第四周总结
互联网项目所面对的挑战是什么?
大流量,高并发
Google日均PV数35亿,日均IP访问数3亿
微信在线用户数10亿
天猫双11活动一天交易额3000亿
高可用
系统需要7X24小时不间断服务,大型互联网站的宕机事件通常会成为新闻焦点。
例如:
支付宝电缆被挖断,导致一部分用户无法使用支付宝部分功能,引起公众恐慌。
海量的数据
需要存储、管理海量的数据
Facebook每周上传的照片数接近10亿
百度收录的网页数目有数百亿
...
互联网安全问题
由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会遇到黑客攻击的情况。
用户分布广泛,网络情况复杂
许多大型互联网是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别。在国内,有各个运营商网络互通难的问题。
需求快速变更,发布频繁
和传统软件的版本发布频率不同,互联网产品为更快速适应市场,满足用户需求,其产品发布频率也是极高的。
渐进式发展
不同与传统软件产品或企业应用系统,一开始就规划好全部的功能和非功能需求,几乎所有的大型互联网站都是从一个小网站开始,渐进的发展起来的。
Facebook是伯克扎克同学在哈佛大学的宿舍里开发的
Google的第一台服务器部署在斯坦福大学的实验室里
阿里巴巴则是马云的客厅里诞生的
好的互联网产品都是慢慢运营出来的,不是一开始就开发好的。那些刚建立就投入巨资,有巨大背景的网站,后来发展都很惨淡。
应对高并发挑战的两个方向
垂直伸缩
通过升级硬件来提升吞吐能力可以实现垂直伸缩。由于不需要改变应用架构,所以通常被认为是最简单的短期伸缩性方案。
通过使用RAID增加I/O吞吐能力
通过切换到SSD改善I/O访问速度
通过增加内存减少I/O操作
通过升级网络接口或者增加网络接口提高网络吞吐能力
更新服务器使用更多处理器或更多超线程
水平伸缩
水平伸缩是指通过增加服务器提升计算能力的一类架构方法。
水平伸缩可以克服垂直伸缩所带来的单位计算成本随计算能力增加而迅速飙升的问题。
垂直伸缩 VS 水平伸缩
垂直伸缩
优点:
不需要改变应用架构,升级了硬件就可以直接部署项目
缺点:
达到某个程度后,增加计算力需要更多的花费
垂直伸缩有物理极限,例如,一共就4个内存条接口,插满了就不能再扩容了
操作系统的设计或者应用程序自身制约着垂直伸缩最多只能达到某个点
水平伸缩
优点:
在某个程度后,增加计算力相比于垂直伸缩成本要低,理论上没有物理极限
缺点:
分布式程序所带来的挑战,数据一致性,分区容错性,可用性只能三选二
多服务器运维的复杂性
使用水平伸缩可能会改变应用架构,升级项目时间会比垂直伸缩花费要长
架构模式
每一个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心。
模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复性。
分层
将系统在横向维度上切分成为几个部分,每个部分负责相对单一的职责。
例如MVC架构 : Controller Service Dao
分割(分而治之)
系统越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,一方面有助于软件的开发和维护;另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。例如:微服务
分布式
分割与分层的主要目的为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着解决同样的问题可以使用更多的计算机,计算机越多,CPU,内存,存储资源也就越多,能够处理的并发访问和数据量就越大。
例如:
分布式数据库,
分布式缓存,
分布式计算
集群
使用分布式虽然已经将分层和分割后的模块独立部署,但对于用户访问集中的模块,比如网站的首页,还需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡对外提供服务。
缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度。
例如 一般我们从数据库取数据,是从硬盘中读取数据,缓存就是从我们的内存中读取数据,内存的访问速度要比硬盘的访问速度快很多。
异步
计算机软件发展的一个重要目标和驱动力是降低软件耦合性。事物之间联系越少,那么彼此的影响就越少,越可以独立发展。
异步可以消除并发访问高峰、加快网站响应速度、提高系统可用性。
冗余
互联网应用需要7X24小时运行,服务器可能会出现故障,服务器规模较大的时候,服务器宕机是必然事件。想要保证在服务器宕机的情况下网站依然可以继续服务,数据不丢失,就需要一定程度的服务器冗余,数据冗余备份。
安全
互联网的开放特性使得从诞生起就面对巨大的安全挑战,例如常见的攻击 SQL注入,跨域攻击等等。
自动化
在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态。目前自动化架构主要几种在运维方面。
如何衡量一个系统的架构设计
高性能
性能是互联网的一个重要指标,除非是没得选择,否则用户无法忍受一个响应缓慢的应用。
一个打开缓慢的应用会导致严重的用户流失。
性能是互联网系统架构设计的一个重要方面,任何架构设计方案都必须考虑可能会带来的性能问题。
高可用
系统高可用的主要手段是冗余,应用部署在多态服务器上同时提供访问,数据存储在多台服务器相互备份,任何一台服务器宕机都不会导致系统不可用。也不会导致数据丢失。
可伸缩
衡量架构伸缩性的主要标准就是是否可以用多态服务器构建集群,是否容易向集群中添加新的服务器。
可扩展
扩展关注功能,功能不断扩展,如何设计系统的架构使其能够快速响应需求变化是系统可扩展架构的主要目的。
安全
互联网是开放的,任何人在任何地方都可以访问系统。系统的安全架构就是保护系统不受恶意访问和攻击,保护网站的重要信息不被窃取。
评论