生命之中的最大错误在于:终日担心犯错误。— 爱尔伯特·哈伯德 (Elbert Hubbard 1856-1915),《笔记》
采集也做负载均衡,那样可以做的更加稳定和快速。
今天发现某采集功能(采集A服务器的内容)占用时间特别长,很多进程呆滞着了。检查是在该机器上访问A服务器比较慢,在别的机器上访问A服务器还是比较快的,看来可以考虑做一个备用方案,访问A服务器很慢的时候可以考虑用别的机器访问。
如果在程序上修改,那活动性很差,所以尽量还是要保证程序的不变,让这个机器上访问一个网址还有负载均衡,那只能访问一个负载均衡的服务器中间服务器了。
加上是 B服务器要访问 A的内容,B的服务器可以访问C服务器,让C服务器做代理功能,那就可以做代理的负载均衡了,就可以把任务分散到DEF等机器了。
流程:A -> C -> DEF -> B
就大概变成这个流程了,当然,AC是可以是一台机器,甚至C也可以作为负载均衡的其中一个。
假设我要访问B服务器 1.2.3.4 域名是 www.aslibra.com
我有 CDEF 是 192.168.1.2/3/4/5
那A上加上hosts文件设定,这样在访问的时候就无形了
今天发现某采集功能(采集A服务器的内容)占用时间特别长,很多进程呆滞着了。检查是在该机器上访问A服务器比较慢,在别的机器上访问A服务器还是比较快的,看来可以考虑做一个备用方案,访问A服务器很慢的时候可以考虑用别的机器访问。
如果在程序上修改,那活动性很差,所以尽量还是要保证程序的不变,让这个机器上访问一个网址还有负载均衡,那只能访问一个负载均衡的服务器中间服务器了。
加上是 B服务器要访问 A的内容,B的服务器可以访问C服务器,让C服务器做代理功能,那就可以做代理的负载均衡了,就可以把任务分散到DEF等机器了。
流程:A -> C -> DEF -> B
就大概变成这个流程了,当然,AC是可以是一台机器,甚至C也可以作为负载均衡的其中一个。
假设我要访问B服务器 1.2.3.4 域名是 www.aslibra.com
我有 CDEF 是 192.168.1.2/3/4/5
那A上加上hosts文件设定,这样在访问的时候就无形了
192.168.1.2 www.aslibra.com
最近碰到一个问题,某个应用占用的CPU特别高,亟待解决,也整理笔记,希望对有需要的人有帮助。
一般有如下做法:
1 搬至独立的高性能的服务器
2 把部分功能直接用代理的方式教与另外一台服务器处理
3 做负载均衡
第一个解决方式需要做搬迁,一般比较耗时间,如果很多很多文件需要搬,那是很难实现的,这个对于大批文件的服务而言,并不是一个好的方案。
第二个是适合某些功能可以独立运作的。比如某些需要用PHP的功能和静态文件分离,看你碰到的问题了。
第三个是负载均衡,这里最重要的一点是如何保证多个服务器的文件一致性。
前两个解决方案不适合我的问题,保持文件的一致性倒可以尝试:
1 rsync同步文件
2 NFS
3 samba
4 svn
第一个种方案有同步的时间差,对于某些服务不合适。
第二个是我这次采用的方案,NFS可以很简单的实现另外一个服务器立刻上马做服务,不需要同步文件,而且同时使用一样的文件,最适合负载均衡的文件一致性问题了。
第三个则是我构想的,不知道和NFS相比有多大的性能差别,但samba是与windows共享文件的解决方案,可能比NFS要差点。
第四个是听来的,锁定文件更新,同时更新到服务器上,但可能对于很多文件的服务器还不太合适。
一般有如下做法:
1 搬至独立的高性能的服务器
2 把部分功能直接用代理的方式教与另外一台服务器处理
3 做负载均衡
第一个解决方式需要做搬迁,一般比较耗时间,如果很多很多文件需要搬,那是很难实现的,这个对于大批文件的服务而言,并不是一个好的方案。
第二个是适合某些功能可以独立运作的。比如某些需要用PHP的功能和静态文件分离,看你碰到的问题了。
第三个是负载均衡,这里最重要的一点是如何保证多个服务器的文件一致性。
前两个解决方案不适合我的问题,保持文件的一致性倒可以尝试:
1 rsync同步文件
2 NFS
3 samba
4 svn
第一个种方案有同步的时间差,对于某些服务不合适。
第二个是我这次采用的方案,NFS可以很简单的实现另外一个服务器立刻上马做服务,不需要同步文件,而且同时使用一样的文件,最适合负载均衡的文件一致性问题了。
第三个则是我构想的,不知道和NFS相比有多大的性能差别,但samba是与windows共享文件的解决方案,可能比NFS要差点。
第四个是听来的,锁定文件更新,同时更新到服务器上,但可能对于很多文件的服务器还不太合适。
$HTTP["host"] == "a.aslibra.com" {
proxy.server = ( "" =>
( (
"host" => "b.aslibra.com"
) )
)
}
proxy.server = ( "" =>
( (
"host" => "b.aslibra.com"
) )
)
}
这样的代码在apache里面是正常的,今天使用lighttpd就发现出现 500 的内部错误。
于是查资料,看看lighttpd的官方说明:
引用
<extension>: is the file-extension or prefix (if started with "/") might empty to match all requests
"host": is ip of the proxy server ''DO not use hostnames here! only IP Addresses''
"port": is tcp-port on the "host" used by the proxy server (default: 80)
"host": is ip of the proxy server ''DO not use hostnames here! only IP Addresses''
"port": is tcp-port on the "host" used by the proxy server (default: 80)
也就是不允许用域名了,不知道是否正常,可以测试一下:
做个PHP文件:
proxy.php
<?
ob_start();
print_r($_SERVER);
$a=ob_get_contents();
file_put_contents("log.txt",$a);
?>
ob_start();
print_r($_SERVER);
$a=ob_get_contents();
file_put_contents("log.txt",$a);
?>
得到代码:
wget http://127.0.0.1/proxy.php
引用
[SERVER_NAME] => 127.0.0.1
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PORT] => 80
[SERVER_ADDR] => 127.0.0.1
[REMOTE_PORT] => 50677
[REMOTE_ADDR] => 127.0.0.1
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PORT] => 80
[SERVER_ADDR] => 127.0.0.1
[REMOTE_PORT] => 50677
[REMOTE_ADDR] => 127.0.0.1
指定proxy和hosts文件:
127.0.0.1 proxy.aslibra.com
$HTTP["host"] == "proxy.aslibra.com" {
proxy.server = ( "" =>
( (
"host" => "127.0.0.1",
"port" => 80
) )
)
}
proxy.server = ( "" =>
( (
"host" => "127.0.0.1",
"port" => 80
) )
)
}
引用
[SERVER_NAME] => proxy.aslibra.com
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PORT] => 80
[SERVER_ADDR] => 127.0.0.1
[REMOTE_PORT] => 50676
[REMOTE_ADDR] => 127.0.0.1
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PORT] => 80
[SERVER_ADDR] => 127.0.0.1
[REMOTE_PORT] => 50676
[REMOTE_ADDR] => 127.0.0.1
也就是发送的还是当前的主机域名,所以proxy也不用担心只是按IP访问,和正常的代理一样。
但是,这样的话,如果域名指向有变化,那这里就不方便了,apache里面可以用域名的方式,那其实可以不用担心域名指向变化,但lighttpd这样肯定对效率有很大的提高。





