![](https://csdnimg.cn/release/download_crawler_static/86282214/bg1.jpg)
极客时间
hongfenghuoju/12408[2018/8/6 10:06:11]
42 | 互联网架构模板:“网络层”技术
2018-08-02 李运华
除了复杂度,互联网业务发展的另外两个关键特点是
“
高性能
”
和
“
高可用
”
。通常情况下,我们在设计高可用和高性能系统的时候,主要关注点在系统本身的复杂度,然后通过各种手
段来实现高可用和高性能的要求,例如我前面介绍的计算高性能架构模式、存储高可用架构模式等。但是当我们站在一个公司的的角度来思考架构的时候,单个系统的高可用和高性
能并不等于整体业务的高可用和高性能,互联网业务的高性能和高可用需要从更高的角度去设计,这个高点就是
“
网络
”
,所以我将相关措施统一划归为
“
网络层
”
。注意这里的网络层
和通常理解的如何搭建一个局域网这种概念不一样,这里强调的是站在网络层的角度整体设计架构,而不是某个具体网络的搭建。
接下来我将介绍互联网架构模板的“网络层”技术的几个关键架构设计点,部分内容专栏前面已经有深入阐述,今天作为概要的总结把它们归纳一下。
负载均衡
顾名思议,负载均衡就是将请求均衡地分配到多个系统上。使用负载均衡的原因也很简单:每个系统的处理能力是有限的,为了应对大容量的访问,必须使用多个系统。例如,一
台
32
核
64GB
内存的机器,性能测试数据显示每秒处理
Hello World
的
HTTP
请求不超过
2
万,实际业务机器处理
HTTP
请求每秒可能才几百
QPS
,而互联网业务并发超过
1
万是比较常
见的,遇到双十一、过年发红包这些极端场景,每秒可以达到几十万的请求。
1.DNS
DNS
是最简单也是最常见的负载均衡方式,一般用来实现地理级别的均衡。例如,北方的用户访问北京的机房,南方的用户访问广州的机房。一般不会使用
DNS
来做机器级别的负载
均衡,因为太耗费
IP
资源了。例如,百度搜索可能要
10000
台以上机器,不可能将这么多机器全部配置公网
IP
,然后用
DNS
来做负载均衡。有兴趣的读者可以在
Linux
用
“dig
baidu.com”命令看看实际上用了几个IP地址。
DNS
负载均衡的优点是通用(全球通用)、成本低(申请域名,注册
DNS
即可),但缺点也比较明显,主要体现在:
DNS缓存的时间比较长,即使将某台业务机器从DNS服务器上删除,由于缓存的原因,还是有很多用户会继续访问已经被删除的机器。
DNS不够灵活。DNS不能感知后端服务器的状态,只能根据配置策略进行负载均衡,无法做到更加灵活的负载均衡策略。比如说某台机器的配置比其他机器要好很多,理论上来
说应该多分配一些请求给它,但
DNS
无法做到这一点。
所以对于时延和故障敏感的业务,有实力的公司可能会尝试实现
HTTP-DNS的功能,即使用HTTP协议实现一个私有的DNS系统。HTTP-DNS主要应用在通过App提供服务的业务
上,因为在
App
端可以实现灵活的服务器访问策略,如果是
Web
业务,实现起来就比较麻烦一些,因为
URL
的解析是由浏览器来完成的,只有
Javascript
的访问可以像
App
那样实现
比较灵活的控制。
HTTP-DNS
的优缺点有:
灵活:HTTP-DNS可以根据业务需求灵活的设置各种策略。
可控:HTTP-DNS是自己开发的系统,IP更新、策略更新等无需依赖外部服务商。
及时:HTTP-DNS不受传统DNS缓存的影响,可以非常快地更新数据、隔离故障。
开发成本高:没有通用的解决方案,需要自己开发。
侵入性:需要App基于HTTP-DNS进行改造。
2.Nginx
、
LVS
、
F5
DNS
用于实现地理级别的负载均衡,而
Nginx
、
LVS
、
F5
用于同一地点内机器级别的负载均衡。其中
Nginx
是软件的
7
层负载均衡,
LVS
是内核的
4
层负载均衡,
F5
是硬件的
4
层负载
均衡。
软件和硬件的区别就在于性能,硬件远远高于软件,
Ngxin
的性能是万级,一般的
Linux
服务器上装个
Nginx
大概能到
5
万
/
秒;
LVS
的性能是十万级,没有具体测试过,据说可达
到
80
万
/
秒;
F5
性能是百万级,从
200
万
/
秒到
800
万
/
秒都有。硬件虽然性能高,但是单台硬件的成本也很高,一台最便宜的
F5
都是几十万,但是如果按照同等请求量级来计算成本