网站的核心要素之伸缩性篇

伸缩性是指,通过不断向集群中增加(减少)服务器,来应对不断变化的用户并发与业务需求。

加入的服务器能否提供和原来服务器无差别的服务是衡量网站伸缩性的一个指标。在网站系统渐进式演化的过程中,最重要的技术手段就是使用服务器集群,通过不断的向服务器添加机器来增加集群的处理业务能力。这就是网站的伸缩性能力,只要能够从技术上做到通过不断的向服务器增加机器与集群的处理能力成线性关系,那么网站就可以以此手段不断的提升规模。总结各大网站架构发展史,其实就是一个不断向集群中添加服务器的过程。

一、网站架构设计的伸缩性

1、不同功能进行物理分离实现伸缩性。

网站早期,通过增加服务器提高处理能力,其流程如下:

每次分离,都会使更多的服务器加入到整个系统当中,进而提高某种特定业务能力。事实上,通过物理上分离不同网站的功能,实现网站伸缩的手段,不仅仅可以在网站的早起使用,其在网站的任何阶段都可以使用。如果详细的说,又可以分为以下两种情况:

a、纵向分离:将同一个业务处理流程的不同部分进行分离。

b、横向分离:将不同业务模块进行分离部署

2、单一功能通过集群实现伸缩。

不同功能进行物理分离实现伸缩性后,随着网站的发展,如果“某个点”(单一功能点)达到瓶颈,也会影响整个网站的性能与可用性。所以,单一功能通过集群实现伸缩也是特别有必要的。单一功能的实现伸缩具体而言,又分为:应用服务器伸缩,数据服务器的伸缩。

二、应用服务器集群实现伸缩性设计

应用服务器的伸缩主要通过负载均衡的手段。负载从原理上来说主要是7/4层网络负载。从技术上来说分为http从定向负载、dns负载、反向代理负载、ip负载、数据链路层负载。从软件上来说,一般就是nginx和lvs。

1、lvs负载均衡的三种模式:DR模式(VIP+修改Mac,上面的数据链路层负载)、Nat模式(上面的IP负载)、TUN模式(隧道模式,类似DR,也是真实直接服务器直接返回数据。比DR模式的优点是不限制负载均衡器与RS在一个物理段上。但是它的不足需要所有的服务器(lvs、RS)支持"IP Tunneling"(IP Encapsulation)协议。)
2、nginx实现负载均衡的方法:反向代理、正向代理、透明代理。

负载均衡的常用算法一般包含:轮询、加权轮询、随机、hash散列、最小连接。

三、缓存服务器的伸缩性

a、数据分片方面:一致性hash、hash环、以及redis的插槽原理(非redis类型的完全可以借鉴)。

b、Redis方面:redis的主从、哨兵、集群等模式。参考:redis三种部署方式

c、es方面,注意了解数据分片,es集群的原理。参考:es集群原理

四、数据库库的伸缩性

1、关系型数据库的mycat/mysql主从/msql group replication(mgr)。

2、关系型数据库的伸缩性。(了解较少)

五、总结

网站的伸缩性是网站架构师的必备能力。因为几乎所有稍有规模的网站都会涉及伸缩性。有很多的案例可以借鉴,同样也有很多开源的、免费的框架架构供大家使用。

高手定律:这个世界上只有遇不到的问题,没有解决不了的问题。(高手之所以成为高手,是因为他们遇到了你们有遇到的问题)

救世主定律:遇到问题、分析问题、最后总能解决问题。(不要总想着挖来一个牛逼的人来解决自己解决不了的问题)

 

 

 

添加评论

Loading