一、nginx+webserver
nginx作为反向代理,转发前端请求,该方案配置简单,在访问量不是特别大的情况下是一个很好的负载均衡方案。
以下的方案是一台nginx带三台web服务器,如图
nginx 部分配置如下:
upstream mysvr {
#设定负载均衡的服务器列表
#weigth参数表示权值,权值越高被分配到的几率越大
server 192.168.8.1:80 weight=5;
server 192.168.8.2:80 weight=1;
server 192.168.8.3:80 weight=6;
}
以上weight参数用于指定轮询几率,与访问比率成正比,用于服务器性能不均衡的情况。还有一种常用的ip hash策略, 对于使用session的站点非常有用。
upstream mysvr{
server 192.168.8.1;
server 192.168.8.2;
ip_hash;
}
#默认请求
location / {
root /web;
index index.php index.html index.htm;
fastcgi_pass mysvr;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
}
以上的配置可以正常运行,但是在访问量大的时候会发现web服务器有大量的time_wait链接,很容易看到是因为每次的web调用前端nginx都与后端建立新的tcp连接,通过在nginx配置中启用keepalive提供长连接支持避免该问题。
upstream mysvr{
server 192.168.8.1;
server 192.168.8.2;
keepalive 32;
}
location / {
root /web;
index index.php index.html index.htm;
fastcgi_pass mysvr;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
fastcgi_keep_conn on;
}
nginx存在单点问题,常用heartbeat或者keepalived与另外的机器组成热备。
二、LVS+webserver
LVS是基于IP层的负载均衡方案,对接口层来讲该方案更可以应付更大的流量。因为第一种方案存在一个问题--用户请求和返回的数据全部通过nginx,在流量增大的情况下这里很容易成为系统的瓶颈。LVS的VS/DR方案完美解决了这个问题--服务器处理完请求直接返回数据给客户的,而不经过负载均衡器ld。
三、业务代码实现(基于laravel)
laravel对rest提供了良好的支持。
在项目目录下执行php artisan make:controller UserController,即可在相应目录生成一个资源类型的UserControler。
在route文件配置
Route::resource(‘/user’,‘UserControler’);
就这样完成了对一个资源的rest配置,是不是很简单?
网友评论