网站的伸缩性架构

  • 网站的伸缩性指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务处理能力
  • 大型网站的“大型”,在用户层面可以理解为大量用户及大量访问;在技术层面可以理解为网站部署大量的服务器。
  • 只要技术上能做到向集群中加入服务器的数量和集群的处理能力成线性关系,那么网站就可以以此手段不断提升自己的规模。

网站架构的伸缩性设计

  • 分为两类:一类是根据功能进行物理分离实现伸缩,不同的单个服务器部署不同的服务,提供不同的功能;一类是单一功能通过集群实现伸缩,集群内的多台服务器部署相同的服务,提供相同的功能。

不同功能进行物理分离实现伸缩

  • 不仅可以用在网站发展的早期,而且可以在网站发展的任何阶段使用。
  • 纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统伸缩性。
  • 横向分离(业务分割后分离):将不同的业务模块分离部署,实现系统伸缩性。每个页面都可以独立部署,专门维护。

单一功能通过集群规模实现伸缩

  • 将相同服务部署在多台服务器上构成一个集群整体对外提供服务。
  • 集群伸缩性可分为:应用服务器集群伸缩性和数据服务器集群伸缩性。
  • 数据服务器集群可分为:缓存数据服务器集群和存储数据服务器集群。

应用服务器集群的伸缩性设计

  • 采用负载均衡可实现应用服务器伸缩性
  • 负载均衡服务器,即HTTP请求分发装置,可以感知或者可以配置集群的服务器数量,可以及时发现集群中新上线或下线的服务器,并能向新上线的服务器分发请求,停止向已下线的服务器分发请求。
  • 开源软件负载均衡: Nginx, LVS, Haproxy (Nginx和Haproxy通常做七层负载均衡, LVS做四层负载均衡. 但是Nginx也可以通过stream模块做四层负载均衡, Haproxy也可以做四层负载均衡 )
  • 商业的硬件负载均衡: 设备F5、Netscale ;
  • 负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
  • 目前负载均衡技术大多数是用于提高诸如在Web服务器、FTP服务器和其它关键任务服务器上的Internet服务器程序的可用性和可伸缩性。
  • 负载均衡分类:
    1)二层负载均衡(mac)
    根据OSI模型分的二层负载,一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应.
    2)三层负载均衡(ip)
    一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应. (即一个ip对一个ip的转发, 端口全放开)
    3)四层负载均衡(tcp)
    在三次负载均衡的基础上,即从第四层"传输层"开始, 使用"ip+port"接收请求,再转发到对应的机器。
    4)七层负载均衡(http)
    从第七层"应用层"开始, 根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器。
  • 四层的负载均衡就是基于IP+端口的负载均衡:在三层负载均衡的基础上,通过发布三层的IP地址(VIP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。
    对应的负载均衡器称为四层交换机(L4 switch),主要分析IP层及TCP/UDP层,实现四层负载均衡。此种负载均衡器不理解应用协议(如HTTP/FTP/MySQL等等)。
    实现四层负载均衡的软件有:
    F5:硬件负载均衡器,功能很好,但是成本很高。
    lvs:重量级的四层负载软件
    nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活
    haproxy:模拟四层转发,较灵活
  • 七层的负载均衡就是基于虚拟的URL或主机IP的负载均衡:在四层负载均衡的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web服务器的负载均衡,除了根据VIP加80端口辨别是否需要处理的流量,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。举个例子,如果你的Web服务器分成两组,一组是中文语言的,一组是英文语言的,那么七层负载均衡就可以当用户来访问你的域名时,自动辨别用户语言,然后选择对应的语言服务器组进行负载均衡处理。
    对应的负载均衡器称为七层交换机(L7 switch),除了支持四层负载均衡以外,还有分析应用层的信息,如HTTP协议URI或Cookie信息,实现七层负载均衡。此种负载均衡器能理解应用协议。
    实现七层负载均衡的软件有:
    haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移;
    nginx:只在http协议和mail协议上功能比较好,性能与haproxy差不多;
    apache:功能较差
    Mysql proxy:功能尚可。
    总的来说,一般是lvs做4层负载;nginx做7层负载(也能做4层负载, 通过stream模块);haproxy比较灵活,4层和7层负载均衡都能做。
  • 四层负载均衡和七层负载均衡之间的区别
    -七层负载均衡基本都是基于http协议的,适用于web服务器的负载均衡。在中间传输层执行,它处理消息的传递,但不考虑消息的内容。(nginx)
    -四层负载均衡主要是基于tcp协议报文,可以做任何基于tcp/ip协议的软件的负载均衡。在高级应用层上执行,会处理每个消息的实际内容。(haproxy、LVS)

七层负载均衡技术
*