week04 小结
互联网系统面临怎么样的挑战?
高并发,大流量,需要面对高并发用户,大流量访问。
高可用,系统7x24小时不间断服务。
海量数据,需要存储、管理海量数据。
用户分布广泛,网络情况复杂
安全环境恶劣
需求快速变更,发布频繁
渐进式发展
好的互联网产品都是慢慢运营出来的,不是一开始就开发好的。那些刚建立就投入巨资,有巨资背景的网站,后来发展都很惨。
应对高并发挑战的两个技术方向
垂直伸缩,购买单一更强大的服务器。通过升级硬件和网络吞吐能力可以实现垂直伸缩。由于不需要改变应用架构,所以通常被认为是最简单的短期伸缩性方案。
缺点:
1、达到某个程度后,增加计算能力需要更多的花费。
2、垂直伸缩有物理极限。
3、操作系统的设计或者应用程序自身制约着垂直伸缩最多只能达到某个点。
水平伸缩,水平伸缩是指通过增加服务器提升计算能力的一类架构方法。可以有效解决垂直伸缩的缺点。
互联网架构演化
第0阶段:一台服务器,应用程序、数据库、文件全部放一起
第1阶段:应用数据文件分离
第2阶段:使用缓存改善系统性能
第3阶段:使用应用服务器集群改善系统的并发处理能力
第4阶段:数据库读写分离
第5阶段:使用反向代理和CDN加速网站响应
第6阶段:使用分布式文件系统和分布式数据库系统
第7阶段:使用nosql和搜索引擎
第8阶段:业务拆分
第9阶段:微服务及中台化
互联网架构模式
每一个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心。这样,你就能一次又一次的使用该方案而不必做重复的工作。
互联网架构模式就是试图去描述那些为解决互联网系统高性能、高可用、易扩展、可伸缩、安全等目标,被很多互联网应用重复使用的一些解决方案,这些解决方案是互联网软件系统的重要组成部分。
分层
分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层依赖和调用组成一个完整的系统
分割
如果说分层是将软件在横向方面进行切分,那么 分割就是在纵向方面对软件进行切分
分布式
对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着解决同样问题可以使用更多的计算机,计算机越多,cpu、内存、存储资源也就越多,能够处理的并发访问和数据量就越大
集群
分布式虽然已经将系统分层和分割后的模块独立部署,但是对于用户访问集中的模块,还需要将独立部署的服务器集群化,即多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段,现在cpu越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在很多方面都使用了缓存设计。
异步
计算机软件发展的一个重要目标和驱动力是降低软件耦合性。事物之间越少直接关系,那么越少被彼此影响,越可以独立发展。大型网站架构中,系统解耦的手段除了前面提到的分层、分割、分布式等手段,还有一个重要手段就是异步,就是将一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作。
冗余
自动化
安全
如何衡量一个系统的架构设计?
高性能,性能是互联网的一个重要指标,除非是没得选择,否则用户无法忍受一个响应缓慢的应用。一个打开缓慢应用会导致严重的用户流失,很多时候系统性能问题是系统架构升级优化的触发器。可以说性能是互联网系统架构设计的一个重要方面,任何架构设计方案都必须考虑可能hi带来的性能问题。
高可用,系统高可用架构设计的前提是必然会出现服务器宕机,而高可用设计的目标就是当服务器宕机的时候,服务或者应用依然可用。高可用的主要手段是冗余,应用部署在多台服务器上同时提供访问,数据存储在多台服务器上相互备份,任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失。
可伸缩,支持通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
可扩展,不同于其他架构要素主要关注非公能性需求,扩展性架构直接关注系统的功能需求。互联网应用快速发展,功能不断扩展,如何设计系统的架构使其能够快速响应需求变化,是系统可扩展架构主要的目的。
安全,互联网是开放的,任何人在任何地方都可以访问系统。系统的安全架构就是保护系统不受恶意访问和攻击,保护网站的重要数据不被窃取。
评论