系统架构 - 学习总结笔记
互联网架构面临的挑战
高并发,大流量
需要面对高并发用户,大流量访问
高可用
系统7*24 小时不间断服务。
海量数据
需要存储,管理海量数据
用户分布广泛,网络情况复杂
安全环境恶劣
需要快速变更,发布频繁。
渐进式发展
互联网产品都是慢慢运营出来的,不是一开始就开发好的。
应对高并发挑战的两个技术方向
垂直伸缩
当前服务器计算资源不足,通过增强当前服务器处理能力解决,如提升更好硬件资源和网络吞吐能力实现垂直伸缩。
缺点:
达到某个程度后,增加计算能力需要的花费更多
垂直伸缩有物理极限
操作系统的设计或者应用程序自身制约着垂直伸缩最多只能达到某个点
水平伸缩
通过增加服务器提升计算能力的一类架构方法。
是当前互联网通用的一种架构方法。
架构演化
第一个阶段:应用数据分离
应用程序,文件系统,数据库部署在不同的机器上。
第二个阶段:使用缓存改善系统性能
使用缓存改善应用服务性能。
本地缓存
分布式缓存服务器
第三个阶段:使用应用服务器集群改善系统的并发处理能力
使用多台应用服务器,上层使用负载均衡服务器。
减少应用服务 的压力
第四个阶段:数据库读写分离
减少数据库 的压力
第五个阶段:使用反向代理和CDN 加速网站响应
第六个阶段:使用分布式文件系统和分布式数据库系统
第七个阶段:使用NoSQL 和搜索引擎
第八个阶段:业务拆分
不同的业务拆分到不同的应用服务器上。服务之间通过http RPC 调用或异步消息队列实现通信。
第九个阶段:微服务及中台化
第十个阶段 大数据与智能化
架构模式
每个模式描述了不断重复发生的问题以及该问题解决方案的核心
模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复使用。
互联网架构模式就是试图去描述那些为解决互联网系统高性能,高可用,易扩展,可伸缩,安全等目标,被很多互联网应用重复使用的一些解决方案,这些方案是互联网软件系统的重要组成部分
分层
将系统在横向维度上切分成几个部分,每个部分负责一部分相对比较单一的职责,然后通过上层对下层依赖和调用组成一个完整的系统。
分割就是在纵向方向对软件进行切分。系统越大,功能越复杂,服务和数据处理的种类也越多,将这些不同的功能和服务分割开来,包装成高内聚低耦合的模块单元,一方面有助于将软件的开发和维护,另一方面,便于不同模块的分布式部署,提高网站的并发处理能力和功能扩展能力
分布式
将分层和分割后的模块进行分布式部署。
分布式应用和服务
分布式静态资源
分布式数据和存储
分布式计算
集群
将相同功能的多台服务器构成一个集群,
缓存
将数据存储在距离计算最近的位置以加快处理速度,缓存是改善软件性能的第一手段。
CDN
反向代理
本地缓存
远程缓存
异步
将一个业务操作分成多个阶段,每个阶段之间通过共享数据而不是直接调用的方法进行协作
提高系统可用性
加快网站响应速度
消除并发访问高峰
冗余
互联网应用需要7*24 小时连续运行,服务器宕机是必然事件。
想要保住在服务器宕机的情况下网站依然可以继续服务,数据不会丢失,就需要一定程度的服务器冗余运行,数据冗余备份。
自动化
在无人值守的情况下网站可以正常运行,一切都可以自动化是网站的理想状态。目前互联网自动化架构设计主要集中在运维方面
安全
互联网系统架构核心要素
高性能
很多时候系统性能问题是系统架构升级优化的触发器。可以说性能是互联网系统架构设计的一个重要方面,任何架构设计方案都必须考虑可能带来的性能问题
高可用
高可用的目标就是当服务器宕机的时候,服务或者应用依然可用
系统高可用的主要手段是冗余,应用部署在多台服务器上同时提供访问,数据存储在多台服务器上互相备份,任何一台服务器宕机都不会影响应用的整体可用,也不会导致数据丢失。
可伸缩
通过不断向集群中加入服务器的手段来缓解不断上升的用户并发访问压力和不断增长的数据存储需求
衡量架构伸缩性的主要标准就是是否可以用多台服务器构建集群,是否容易向集群中添加新的服务器。加入新的服务器后是否可以提供和原来的服务器无差别的服务。集群中可容纳的总的服务器数量是否有限制。
可扩展
互联网应用快速发展,功能不断扩展,如何设计系统架构使其能够快速响应需求变化,是系统柜可扩展架构主要的目的。
衡量系统架构扩展性好还的主要标准是 在系统增加新的业务产品时,是否可以实现对现有产品透明无影响,不需要任何改动或者很少改动既有业务功能就可以上线新产品。
可扩展架构的主要手段是事件驱动架构和分布式服务。
安全
系统的安全架构就是保护系统不受恶意访问和攻击,保护网站的重要数据不被窃取
衡量系统安全架构的标准就是针对现存和潜在的各走攻击与窃密手段,是否有可靠的应对策略。
互联网架构技术一览
前端架构
App 及 Web 开发技术
浏览器及HTTP 优化技术
CDN
动静分离
图片服务
反向代理
DNS
网关及应用层架构
网关架构
负责均衡
动态页面静态化
业务拆分
服务层架构
微服务框架
分布式消息队列
分布式缓存
分布式一致性(锁)服务
存储层架构
分布式文件
分布式关系数据库
NoSQL 数据库
后台架构
大数据平台
搜索引擎
推荐引擎
数据仓库
运维与安全
数据采集与展示
数据监控与报警
攻击与防护
数据加密与解密
课后作业
一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题?请列举描述。
对于一些网站使用的文件图片,通过使用CDN 内容分发网络,将数据缓存在离用户最近的地方。加快了用户访问速度,减少数据中心负载压力
对一些访问量大的服务使用缓存,减少数据访问时间,提高应用服务性能。
在一些高并发场景下,使用异步的消息队列传输信息,可以起到一个削峰的作用,减轻了服务器和数据库的负载压力。
使用k8s 集群部署应用服务,可以实现弹性扩容,故障快速转移,保障了应用的高可用性。
评论