网站的伸缩性架构:
通过不断的向集群中添加服务器来增加整个集群的处理能力,这就是系统的伸缩性架构
伸缩性设计,可分为两类 一类是根据功能进行物理分离实现伸缩,一类是单一功能通过集群实现伸缩,是不同的服务器部署不同的服务,提供不同的功能,后者是集群内的多台服务器部署相同的服务,提供相同的功能
实现负载均衡的方法,有以下几种
- http重定向负载均衡
- DNS域名解析负载均衡
- 反向代理负载均衡
- IP负载均衡
- 数据链路层负载均衡
- 轮询
- 加权轮询
- 随机
- 最少连接
- 源地址散列
分布式缓存集群的伸缩性设计,根据应用程序的缓存数据key计算得到应该将数据写入到Memcache的哪台服务器,或者应该从哪台服务器读取数据 由于使用同样的路由算法和服务列表只要应用程序提供相同的key Memcache客户端总是访问相同的服务器去读取数据,只要服务器还缓存着该数据 就能保证缓存命中
Memcache分布式缓存集群的伸缩性挑战:
简单的路由算法可以使用余数Hash
数据存储服务器群集的伸缩性设计可分为关系数据库群集的伸缩性设计和Nosql数据库的伸缩性设计
除了数据库主从读写分离 业务分割模式也可以用在数据库 不同业务数据表部署在不同的数据库集群上俗称数据分库 这种方式的制约条件是跨库表不能进行join操作
大型网站的时间应用中,使进行了分库和主从复制,对于一些表单数据仍然很大的表,比如facebook的用户数据库,还需要进行分片,将一张表拆分 分别存储在多个数据库中,开源的数据库产品有Amoeba Cobar
在计算机数据存储领域一直都是关系型数据库的天下,以至于传统企业应用领域许多应用系统设计都是面向数据库设计,先设计数据库,然后设计程序,从而导致关系模型绑架对象模型,由此引出旷日持久的业务对象贫血模型与充血模型,只业界为了解决关系数据库的不足提出了很多方案,而Nosql弥补关系数据库的不足