架构师训练营 04 周 -- 学习总结
系统架构:系统技术与方案
互联网应用面对的挑战
高并发、大流量
高可用:7*24小时不间断服务
海量数据:存储管理海量数据
用户分布广泛、网络情况复杂:提供全球服务
安全环境恶劣:互联网的开放性,使其易受攻击
需求变更快,发布频繁:发布频率高,以周为时间单位发布
渐进式发展:好的互联网产品都是慢慢运营出来的
应对高并发挑战的两个技术方向
a. 垂直伸缩
升级硬件和网络吞吐能力
最简单的短期伸缩性方案
缺点:
有物理极限
到达某一点后,成本增加快速
b. 水平伸缩
增加服务器数量,以提升计算能力
不会遭遇单台服务器的极限
分布式架构演化
互联网架构演化
a. 第0阶段
主要目的是,试探用户反映,快速实现和快速改变
架构简单,都放在一个服务器上
架构图:
b. 第1阶段:应用数据分离
随着用户的增加,单台服务的计算能力无法满足需求
解决方法是,增加服务器,组件部署在不同的服务器上,分摊计算压力
架构图
c. 第2阶段:使用缓存改善系统性能
随着用户和数据量的增加,单次数据查询的时间变长,影响了用户体验;同时数据库访问压力较大。
解决方法是,引入缓存,提高性能,缓解数据库压力
缓存有两种
1) 本地缓存
2) 分布式缓存
架构图
d. 第3阶段:使用应用服务器集群,改善系统的并发处理能力
用户数量进一步增加,并发量加大,单台应用服务器吞吐量不够,无法及时响应用户请求。
解决方法是,应用程序为无状态服务,并建立应用程服务器集群
架构图
e. 第4阶段:数据库读写分离
当应用中有大量的读操作,并且这些数据无法缓存的时候,这些请求都会落在数据库上,同时所有的写请求也会需要访问数据库,这时单个数据库会成为瓶颈,需要提升数据库处理能力
解决方法是,数据库的读写分离,读操作到一个数据库,写操作到另一个数据库,读写数据库之间通过主从复制同步数据
架构图
f. 第5阶段:使用反向代理和CDN加速网站响应
如果网页中有大量的静态资源,同时用户分布广泛,为了提升用户体验,可以将静态资源和动态资源分开,实现动静分离。
实现方法是,引入反向代理和CDN,使得只有少部分的用户请求到达负载均衡和应用服务器
1) CDN:放在网络运营商机房的缓存服务器,缓存静态资源,将静态资源放在离用户近的地方
2) 反向代理服务器:缓存用户请求
架构图:
g. 第6阶段: 使用分布式文件系统和分布式数据库系统
当数据量巨大(TB级以上数据),增长很快的时候,单个关系型数据库无法存储这么多的数据。
解决方法是,引入分布式数据库,数据分片存储到多个服务器上
架构图
h. 第7个阶段:使用NoSQL和搜索引擎
数据量变大,存储的问题解决,但是查询效率和速度又成为新的问题。
解决方法是,引入nosql数据库做热数据查询,搜索引擎做全文检索,这样可以提高查询速度,并支持复杂的查询。
架构图
i. 第8个阶段:业务拆分
业务种类繁多并且复杂,对于计算资源的需求不一样。而且每个业务需要有专门的团队开发测试运维。单个应用程序将业务耦合在一起,不适合团队协作开发。
解决方法,拆分业务,解耦合
架构图:
j. 第9个阶段:微服务及中台化
进一步拆分业务,发现业务的独立性,实现团队的小型化。
同时,业务拆分后,有部分业务是可以重用的,比如消息推送,用户管理等
解决方法是,微服务和中台化,实现敏捷开发,解决服务重用的问题,避免重复实现。
架构图
k. 第10个阶段:大数据与智能化
当数据积累到一定的数量级,如何分析和应用这些数据为客户服务,为公司带来利润,成为新的问题,
解决方法是,运用大数据和AI,实现客户行为分析,商品推荐等服务。
架构图:
架构模式与要素
架构模式:被很多互联网应用重复使用的解决方案
分层架构:横向切分,每层负责较为单一的职责,上层依赖下层,比如应用层,数据访问层等
分割架构模式:按业务纵向切分,包装成高内聚低耦合的模块单元,便于开发维护,和部署。
分布式:分层和分割后的模块独立部署。
集群:对访问集中的模块集群化部署。多台服务器构成一个集群,通过负载均衡设备对外提供服务
缓存:将数据放在距离计算最近的地方,是改善性能的第一手段
CDN
反向代理
本地缓存
远程缓存
异步:业务操作的不同阶段之间共享数据,而不是直接调用方法,降低模块耦合
冗余:保证服务的连续性,以及保证数据不会丢失
自动化:自动化运维保证无人值守的情况下应用正常运行
安全性:加解密,认证,垃圾和敏感信息过滤等安全解决方案
核心要素 -- 互联网架构的衡量标准
高性能 -- 非功能需求
任何架构都必须考虑性能问题
性能问题是系统架构升级优化的触发器
从客户端到数据库,从代码到机房部署,各个环节都有性能优化方案
高可用 -- 非功能需求
分布式系统必然会出现服务器宕机。要保证服务器宕机时,服务仍然可用。
高可用的主要手段:冗余(应用服务器冗余,数据库服务器冗余等等)
是分布式架构设计的硬指标
可伸缩性 -- 非功能需求
通过添加服务器来满足用户并发访问需求,和数据存储的增长需求
需要很容易的向集群中添加服务器,并保证新的服务器提供同样的服务。
与分布式数据库相比,NoSQL数据库伸缩性更好(更容易添加服务服务器)。
可扩展性 -- 功能需求
为了是架构能有快速响应需求变化
添加新的功能,而对现有产品透明无影响
主要手段:事件驱动架构和微服务架构
安全 -- 功能需求
保护系统,保护数据
对各种攻击手段,都要有应对策略
互联网架构总览
前端架构
App 及 Web 开发技术
浏览器及 HTTP 优化技术
CDN
动静分离
图片服务
反向代理
DNS
网关及应用层架构
网关架构
负载均衡
动态页面静态化
业务拆分
服务层架构
微服务框架
分布式消息队列
分布式缓存
分布式一致性(锁)服务
存储层架构
分布式文件
分布式关系数据库
NoSQL 数据库
后台架构
大数据平台
搜索引擎
推荐引擎
数据仓库
运维和安全
数据采集与展示
数据监控与报警
攻击与防护
数据加密与解密
版权声明: 本文为 InfoQ 作者【骏马】的原创文章。
原文链接:【http://xie.infoq.cn/article/32d71785e697e34814fbf4f38】。未经作者许可,禁止转载。
评论