写点什么

架构学习第四周总结

用户头像
云峰
关注
发布于: 2020 年 07 月 01 日
架构学习第四周总结

1,互联网业务系统特点

高并发和大流量

大型互联网需要面对高并发的访问用户,比如在天猫“双11”的时候,一分钟之内,有超过一千万的独立用户访问整个天猫系统,大规模的并发用户访问会对系统的处理能力造成巨大的冲击,系统必须要有足够强的处理能力才能够满足。同时有这么多用户来访问,产生了巨大的访问流量,对系统的抗压能力形成了考验。

 

高可用

大型互联网系统必须要 7×24 小时不间断地提供服务,和传统软件系统不同,银行或者是电信甚至零售业,它们都有下班时间,下了班以后可以对系统进行停机维护和升级发布,但是互联网没有下班时间,所以一直要保持高可用,7×24 小时永不间断。为了保证系统的高可用,必须要进行特别的系统架构设计。

 

海量的数据存储

因为互联网需要满足大量的用户使用,所以这些用户会产生很多的数据,需要对这些数据进行重组和管理。除了用户提交的数据,互联网还会采集很多其它的数据,包括一些用户行为的数据、第三方的数据以及网络爬虫获取的数据,通过大数据技术对这些数据做进一步分析,对用户进行更精准的营销和服务,以发现新的业务增长点。

 

用户分布广泛,网络情况复杂

互联网是为全球用户提供服务的,用户分布范围广,各地的网络情况千差万别,为了使所有用户能够得到统一的良好的体验,需要对系统架构进行相关的设计。

 

安全环境恶劣

因为互联网是开放的,所以互联网站很容易就会受到攻击。

 

需求变化快,发布频繁

和传统的软件版本发布频率比,互联网产品为了快速适应市场,满足用户需求,发布频率是非常高的。比如 Office 这样的产品发布版本是以年为单位的,而大型网站的产品发布一般是以周为单位的,每个星期都会发布新的版本来更新产品特性。



2,互联网业务系统常见的扩展手段



垂直伸缩

提升系统处理能力有两种途径,其中一种叫作垂直伸缩,如下图所示。

 



所谓的垂直伸缩就是提升单台服务器的处理能力,比如说用更快频率、更多核的 CPU,用更大的内存,用更快的网卡,用更多的磁盘组成一台服务器,使单台服务器的处理能力得到提升,通过这种手段提升系统的处理能力。

 

水平伸缩

除了垂直伸缩,还有一种手段叫作水平伸缩,如下图所示。





所谓的水平伸缩,是说不提升单机的处理能力,并不使用更昂贵的、更快的、更厉害的硬件,而是使用更多的服务器,将这些服务器构成一个分布式集群。这个集群统一对外提供服务,来提高系统整体的处理能力。



垂直伸缩的局限

在大型互联网出现之前,传统的软件,比如银行、电信这些企业的软件系统,主要是使用垂直伸缩这种手段实现系统能力提升的,先是提升服务器的硬件水平,就像我们刚才说的,提升 CPU 的能力、提升网卡的能力、提升内存和磁盘的能力。当某种类型的服务器能力提升到了瓶颈以后,就会用更强大的服务器,比如说从服务器升级到小型机,从小型机提升到中型机,从中型机提升到大型机,服务器越来越强大,处理能力也越来越强大,当然价格也越来越昂贵,运维越来越复杂。

而在互联网行业中多采用水平伸缩的手段。这主要是因为垂直伸缩有一些缺点。



当垂直伸缩达到一定程度以后,继续增加计算需要花费更多的钱。如果你服务器的内存条没有插满,这个时候你插一条内存不会花费太多的钱。但是如果内存条已经插满了,你想要更强大的容量、更大内存空间,就需要购买更强大的服务器对整体进行升级,这个时候就需要花更多的钱。而从服务器到小型机,到中型机,再到大型机,每一次这种硬件的升级,都意味着成本数十倍的增加。

垂直伸缩是有物理极限的。单单一台机器的处理能力是有极限的,即使是大型机,也有自己的物理极限,它不可能无限地伸缩下去。相对于硬件的极限,互联网的用户需求几乎是没有极限的。更何况到了物联网时代,数据产生的速度和对系统处理能力的要求更是成千上万倍的增加。

操作系统的设计或者应用程序的设计制约着垂直伸缩。因为垂直伸缩就意味着程序在单一服务器上运行,那么这个程序应用以及操作系统要相应具备管理这么庞大的计算资源的能力。要使用这些计算资源,就需要应用程序本身去管理、调度这些资源,这对应用程序以及操作系统的设计提出了极大的挑战。并且,我们知道,应用程序的核心价值是处理业务逻辑,从而满足用户需求,如果应用程序里有大量的代码是去管理系统资源的,必然导致应用程序复杂度提高,难以开发和维护。

与之相比,水平伸缩就没有这些问题。采用水平伸缩,只要架构合理,能够将服务器添加到集群中,你的系统是可以始终正常运行的。它没有极限,成本也不会在某个临界点突然增加。甚至,逐渐增加服务器,获得更强的计算处理能力,还比以前的服务器更便宜,因为硬件的价格总是在不断下降的。

同时,你的应用程序虽然是为单一服务器而设计的,但水平伸缩只是让程序部署在更多的服务器上,并不需要对应用程序进行太多的改变,应用程序不会受到硬件制约。

但是要让更多的服务器构成一个整体,需要在架构上进行设计,让这些服务器成为整体系统中的一个部分,把它们有效地组织起来,统一提升系统的处理能力。



用户头像

云峰

关注

还未添加个人签名 2018.08.12 加入

还未添加个人简介

评论

发布
暂无评论
架构学习第四周总结