使用Nginx实现高并发分布式系统架构
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
Nginx由C语言编写,对系统资源和CPU资源利用率都很高,支持50000并发连接数,并且安装和配置简便,启动速度极快,支持Linux、Mac OS X、Microsoft Windows等众多主流操作系统,是做分布式系统的常用的反向代理器。
Nginx的upstream可以实现负载均衡,upstream依照轮询(默认)方式进行负载,每一个请求按时间顺序逐一分配到不同的后端服务器。假设后端服务器down掉。能自己主动剔除。尽管这样的方式简便、成本低廉。但缺点是:可靠性低和负载分配不均衡。
upstrteam写在独立配置文件里,示例如下
1 2 3 4 5 6 7 8 9 10 11 12 |
upstream backend { ip_hash; server backend1.example.com weight=5; server backend2.example.com:8080; server backup1.example.com:8080 backup; } server { location / { proxy_pass http://backend; } } |
上例的upstream详解如下
upstream backend { } :upstream的代码放进{},backend为upstream的名称
ip_hash; :每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题。也可以通过单点登录方式解决session的问题。
server backend1.example.com weight=5;:backend1.example.com对应的后端服务器地址,可以是域名也可以是IP。weight为权重值,可以根据后端服务器的性能进行分配,权重值越大,接入访客的数量就越大。如果没有权重值设置,默认自动轮询访问。
server backup1.example.com:8080 backup;:backup为备用节点,当非备用节点都down掉或者都在忙碌状态,nginx才会发送请求给备用节点。
注意:如果使用ip_hash时,不能使用weight和backup。