原创作者:李洋(大众点评 平台架构组成员)
作者介绍:http://leonindy.coding.me/
一、项目介绍
Camel 是大众点评开发的软负载一体解决方案,承担了F5四层硬负载后的软负载工作。Camel已成为大众点评网络流量中必不可缺的一层。
Camel对Nginx集群进行管理,通过可视化的网页,来编辑Nginx配置文件,大大简便了Nginx配置文件的开发量;并且能够同时管理多台Nginx服务器,省去登陆每台服务器再去修改配置文件的烦恼。
camel-admin与Nginx配置有关的功能主要有:站点管理,业务集群管理,Nginx集群管理。详见:http://leonindy.coding.me/camel_in_action/posts/ch3-use-guide/overall.html
Camel在大众点评的应用规模如下:
Camel项目由camel-admin
, Dengine
(基于Tengine开发的Web服务器), camel-agent
三个模块组成:
camel-admin
:
Camel管理端:可以通过接口及页面两种方式对Nginx集群进行发布、重启、监控等操作。Dengine
:
大众点评基于Tengine开发的Web服务器。在Tengine的基础上,添加了降级等功能。camel-agent
:
部署在Nginx服务器上,管理本机的Nginx进程与配置文件。二、设计初衷
大众点评最开始采用F5做七层负载。随着网站规模的增大,F5成为了网络的瓶颈,主要原因有以下两点:
为此,我们决定使用软件工程的银弹-在架构上,增加新的层级。从而大众点评有两层负载,第一层为F5,做四层硬负载;第二层为Nginx集群,做七层硬负载。
三、两层负载
大众点评对网络流量采用两层负载。那么,这两层负载是如何分工的呢?
我们结合一个具体的请求来分析这个问题:
假设有一条请求,访问www.dianping.com/citylist:
F5只做四层负载,不同的公网IP接受的流量,转发到不同的Nginx集群;
Nginx集群做七层负载,根据URL的路径、cookie等,转发到真正响应服务的业务服务器。
域名、IP、Nginx集群、业务集群的对应关系如下:
一个域名或一个泛域名 对应 一个公网IP
多个公网IP 对应 一个Nginx集群
一个Nginx集群 对应 多个业务
四、详细资料:
github地址:https://github.com/leonindy/camel
文档:http://leonindy.coding.me/camel_in_action/