国内有许多传统企业“触网”,将传统业务搬上互联网,这是一件值得称道
的事,传统行业与互联网结合将会创造出新的经济模式,改善人们的生活。但遗 憾的是,有些传统企业将自己的管理模式和经营理念也照搬到互联网领域一一在 技术方面的表现就是一开始就企图打造一个大型网站。
回顾网站架构发展历程,网站架构发展史就是一部不断向网站添加服务器的历史。 只要工程师能向网站的服务器集群中添加新的机器,只要新添加的服务器能线性提高网 站的整体服务处理能力,网站就无需为不断增长的用户和访问而焦虑。
一般说来,网站的伸缩性设计可分成两类,一类是根据功能进行物理分离实现伸缩, 一类是单一功能通过集群实现伸缩。前者是不同的服务器部署不同的服务,提供不同的 功能;后者是集群内的多台服务器部署相同的服务,提供相同的功能。
1 不同功能进行物理分离实现伸缩
网站发展早期——通过增加服务器提高网站处理能力时,新增服务器总是从现有服 务器中分离出部分功能和服务,如图6.1所示。
每次分离都会有更多的服务器加入网站,使用新增的服务器处理某种特定服务。事 实上,通过物理上分离不同的网站功能,实现网站伸缩性的手段,不仅可以用在网站发 展早期,而且可以在网站发展的任何阶段使用。具体又可分成如下两种情况。
纵向分离(分层后分离):将业务处理流程上的不同部分分离部署,实现系统伸缩性,
如图6.2所示。
横向分离(业务分割后分离):将不同的业务模块分离部署,实现系统伸缩性。
横向分离的粒度可以非常小,甚至可以一个关键网页部署一个独立服务,比如对于 电商网站非常重要的产品详情页面,商铺页面,搜索列表页面,每个页面都可以独立部 署,专门维护。
2 单一功能通过集群规模实现伸缩
将不同功能分离部署可以实现一定程度的伸缩性,但是随着网站访问量的逐步增加, 即使分离到最小粒度的独立部署,单一的服务器也不能满足业务规模的要求。因此必须 使用服务器集群,即将相同服务部署在多台服务器上构成一个集群整体对外提供服务。
当一头牛拉不动车的时候,不要去寻找一头更强壮的牛,而是用两头牛来 拉车。
以搜索服务器为例,如果一台服务器可以提供每秒1000次的请求服务,即QPS (Query Per Second )为1000o那么如果网站高峰时每秒搜索访问量为10000,就需要部署 10台服务器构成一个集群。若以缓存服务器为例,如果每台服务器可缓存40GB数据, 那么要缓存100GB数据,就需要部署3台服务器构成一个集群。当然这些例子的计算都 是简化的,事实上,计算一个服务的集群规模,需要同时考虑其对可用性、性能的影响 及关联服务集群的影响。
具体来说,集群伸缩性又可分为应用服务器集群伸缩性和数据服务器集群伸缩性。这两种集群由于对数据状态管理的不同,技术实现也有非常大的区别。而数据服务器集 群也可分为缓存数据服务器集群和存储数据服务器集群,这两种集群的伸缩性设计也不 大相同。
文末
我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档
- 第一个要分享给大家的就是算法和数据结构
- 第二个就是数据库的高频知识点与性能优化
- 第三个则是并发编程(72个知识点学习)
- 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料
还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来
了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB
、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来
了解详情https://docs.qq.com/doc/DSmxTbFJ1cmN1R2dB