系统架构知识是架构师的常识而不是能力(第 4 周学习总结)
1. 系统架构概述:互联网系统面临怎样的挑战?
互联网分布式系统的特点
高并发,大流量:
是业务属性,系统本身的特征。系统需要面对高并发用户,大流量访问
高性能,高可用:
是系统设计,系统7×24小时不间断服务
海量数据:
需要存储、管理海量数据
用户分布广泛,网络qingku个复杂
安全环境恶劣
需求快速变更,发布频繁
渐进式发展
2. 应对高并发挑战的两个技术方向
垂直伸缩,特点:
架构不需要改变,软件不需要改变,提升硬件性能。(价格昂贵)
垂直伸缩有物理极限;
操作系统的设计或应用程序自身制约着垂直伸缩有上限。
水平伸缩,特点:
通过增加服务器提升计算能力的一类架构方法
克服垂直伸缩带来的单位计算成本随计算能力增加而迅速飙升的问题;
也不会像垂直伸缩那样遭遇到单台服务器的极限。
3. 互联网架构演化
架构演化第0阶段:应用程序、数据库服务、文件服务等在一台服务器上面
架构演化第1阶段:应用服务器、数据库服务、文件服务器分离部署
架构演化第2阶段:使用缓存改善系统性能
架构演化第3阶段:使用应用服务器集群改善系统的并发处理能力
架构演化第4节点:数据库读写分离
架构演化第5阶段:使用反向代理和CDN加速网站响应
架构演化第6阶段:使用分布式文件系统化和分布式数据库系统
架构演化第7阶段:使用NoSQL和搜索引擎
架构演化第8阶段:业务拆分,增加消息队列服务器等
架构演化第9阶段:微服务及中台化
架构演化第10阶段:大数据和智能化
4. 互联网架构模式
4.1 架构模式
每一个模式描述了一个在我们周围不断重复发生的问题以及该问题解决方案的核心。这样,就可以一次又一次的使用改方案而不必做重复工作。
模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复使用。
互联网架构模式就是试图去描述那些为解决互联网系统高性能、高可用、易扩展、可伸缩、安全等目标,被很多互联网应用重复使用的一些解决方案,这些解决方案是互联网软件系统的重要组成部分。
4.2 分层
分层是企业应用系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层依赖和调用组成一个完整的系统。
4.3 分割
如果说分层是将软件在横向方面进行切分,那么分割就是在纵向方面对软件进行切分。
系统越大、功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成高内聚、低耦合的模块单元,一方面有助于软件的开发和维护;另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力。
4.4 分布式
对于大型网站,分层和分割的一个主要目的是为了切分后的模块便于分布式部署,即将不同模块部署在不同的服务器上,通过远程调用协同工作。分布式意味着解决同样的问题可以使用更多的计算机,计算机越多,CPU、内存、存储资源也就越多,能够处理的并发访问和数据量就越大。
4.5 集群
使用分布式虽然已经将分层和分割后的模块独立部署,但是对于用户访问集中的模块,比如网站首页,还需要将独立的服务器集群化,将多台服务器部署相同应用构成一个集群,通过负载均衡设备共同对外提供服务。
4.6 缓存
缓存就是将数据存放在距离计算最近的位置以加快处理速度。缓存是改善软件性能的第一手段,现代CPU越来越快的一个重要因素就是使用了更多的缓存,在复杂的软件设计中,缓存几乎无处不在。大型网站架构设计在很多方便都使用了缓存设计。
4.7 异步
计算机软件发展的一个重要目标和驱动力是降低软件耦合性。事物之间越少直接联系,那么就越少被彼此影响,越可以独立发展。大型网站架构中,系统解耦合的手段除了前面提到的分层、分隔、分布等外,还有一个重要手段是异步,就是将一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作。主要是通过消息队列服务器来实现异步。
4.8 冗余
互联网应用需要7×24小时连续运行,但是服务器总有可能会出现故障,特别是服务器规模比较大的时候,服务器宕机是必然事件。要想保证在服务器宕机的情况下网站依然可以连续服务,数据不会丢失,就需要一定程度的服务器冗余运行,数据冗余备份。
4.9 自动化
在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态。目前互联网的自动化架构设计主要集中在运维方面。
4.10 安全
互联网的开发特性使得其从诞生起就面对巨大的安全挑战,网站在安全架构方面也积累了许多模式
a. 通过密码和手机校验码进行身份认证
b. 登录、交易等操作需要对网络通信进行加密,网站服务器上存储的敏感数据如用户信息等也进行加密处理
c. 为了防止机器人程序滥用网络资源攻击网站,网站使用验证码进行识别
d. 对于常见的用于攻击网站的XSS攻击、SQL注入等进行编码转换处理
e. 对于垃圾信息、敏感信息进行过滤
f. 对转账交易等重要操作根据交易模式和交易信息进行风险控制
5. 互联网系统架构核心要素:如何衡量一个系统的架构设计
--> 抓住问题是关键,再找可以解决问题的技术方案
架构设计:
a. 满足功能性需求
b. 满足非功能性需求
5.1 高性能
性能是互联网系统架构设计的一个重要方面,任何架构设计方案都必须考虑可能会带来的性能问题
5.2 高可用
大型互联网系统通常都会有上万台服务器,每天都必定会有一些服务器宕机,因此系统高可用架构设计的前提是必然会出现服务器宕机,而高可用设计的目标就是当服务器宕机时,服务或应用依然可用。
系统高可用的主要手段是提升冗余度。
5.3 可伸缩
可以通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。
衡量架构伸缩性的主要标准就是是否可以用多台服务器构建集群,是否容易向集群中添加新的机器。
5.4 可扩展
扩展性架构直接关注系统的功能性需求,系统能够快速响应需求变化。
可扩展架构的主要手段是事件驱动架构和分布式服务。
5.5 安全
互联网是开放的,任何人在任何地方都可以访问系统。系统的安全架构就是保护系统不受恶意访问和攻击,保护网站重要数据不被窃取。衡量系统安全架构的标准就是针对现存和潜在的各种攻击与窃密手段,是否有可靠的应对策略。
最后:期望管理(对上、对下)
版权声明: 本文为 InfoQ 作者【李德政】的原创文章。
原文链接:【http://xie.infoq.cn/article/46a3bb0e8e9d01846e4ca9389】。文章转载请联系作者。
评论