第6章
网站的伸缩性架构
1:根据功能进行物理隔离实现伸缩
2:单一功能通过集群实现伸缩
纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统伸缩性。
横向分离(业务分割后分离):将不同的业务模块分离部署,实现系统伸缩性。
计算一个服务的集群规模,需要同时考虑其对可用性,性能的影响及关联服务集群的影响。
集群伸缩性,可分为服务器集群伸缩性和数据服务器集群伸缩性
数据服务器集群也可分为缓存数据服务器集群和存储服务器集群,两者伸缩性设计也大不相同。
DNS域名解析负载均衡
利用DNS处理域名解析的同时进行负载均衡处理
大型网站总是部分使用DNS域名解析,利用域名解析作为第一级负债均衡手段,即域名解析得到的一组
服务器并不是实际提供的Web服务的物理服务器,而是同样提供负债均衡的内部服务器,这组内部负载均衡服务器
在进行负载均衡,将请求分发到真实的Web服务器。
反向代理提供负载均衡,需要同时配置双网卡和内部外部两套IP地址。
由于反向代理服务器转发请求在HTTP协议层面,因此也要应用层负载均衡。
其优点是和反向代理服务器功能集成在一起,部署简单。缺点是反向代理服务器是
所有请求和响应的中转站,其性能可能成为瓶颈。
IP负载均衡在内核进程完成数据分发,较反向代理负载均衡(在应用程序中分发数据)
有更好的处理性能。
数据链路层负载均衡是指在通讯协议的数据链路层修改mac地址进行负载均衡。
这种分发过程中不修改IP地址,只修改目的地mac地址,又称三角传输模式。
linux平台负载均衡开源产品是LVS(Linux Virtual Server)
负载均衡算法
轮询(Round Robin RR)
加权轮询(Weighted Round Robin,WRR)
随机(Random)
最少连接(Least Connections)
源地址散列(Source Hashing)
分布式缓存的伸缩性
必须让新上线的缓存服务器对整个分布式缓存集群的影响最小,也就是说新加入的缓存服务器后
应使整个缓存服务器集群中已经有缓存的数据尽可能还被访问到,这是分布式缓存集群伸缩性设计
的最主要目标。
分布式缓存一致性Hash算法
关系式数据库集群的伸缩性和NoSQL数据库的伸缩性设计
分布式关系数据库开源有 Amoeba , Cobar
Cobar是一个分布式关系数据库访问代理
Cobar服务器根据SQL和分库规则分解SQL,分发到MySQL集群不同的数据库实例上执行(每个MySQL实例部署都分为
主/从结构,保证数据高可用)
从业务上回避分布式关系数据库的各种缺点,避免事务或利用事务补偿机制代替数据库事务,分解数据访问逻辑
避免JOIN操作等
一般而言,NoSQL数据产品都放弃了关系数据库的两大重要基础:以关系代数为基础的结构化查询语言(SQL)和事务一致性
保证(ACID)。而强化其他一些大型网站更关注的特性:高可用性和伸缩性。
一个具有良好伸缩性架构设计的网站,其设计总是走在业务发展之前,在业务需要处理更多访问和服务之前,就已经做好
充足准备,当业务需要时,只需要购买或租用服务器简单的部署实施就可以。
架构师对网站伸缩性的把握,一线之间,天堂和地狱。
高手定律:这个世界只有遇不到的问题,没有解决不了的问题,高手之所以成为高手,是因为他们遇到了常人很难遇到
的问题,并解决了。
遇到问题,分析问题,最后总能解决问题。