系统架构与案例

互联网系统面临的挑战
高并发,大流量
高可用
海量数据
用户分布广泛,网络情况复杂
安全环境恶劣
需求快速变更发布频繁
渐进式发展
互联网发展打破了传统应用系统封闭的环,我们每一个人可以参与其中得到更好的服务, 也能为其他人提供服务并花费比以往更低的成本。
应对高并发的两个技术方向

垂直伸缩
增强单一服务器的计算能力, 增加硬件的处理能力如:CPU,内存,网卡,存储提升。
优点:不改变系统架构相对简单
缺点:
超过某一程度,获得计算能力需要更多成本;
存在物理极限
操作系统自身也会达到极限。

平行伸缩
通过增加服务器提升计算能力的架构方法。
优点: 单位计算成本相对较低, 能达到更高的计算能力。
缺点:
相比较垂直伸缩复杂, 需要更多的分布式技术要求更高, 对技术要求更高
分布式架构演进
单台服务器
一台机器搞定所有功能。

随着用户量不断增加, 对并发量有更高的要求。
应用数据分离

这个阶段将应用, 数据库, 文件服务进行拆分。
使用缓存改善系统性能
用户增多,并发增大后,可以通过缓存减少读取压力。

通过本地存储和远程分布缓存方式实现
应用服务集群
当一个应用已经无法满足用户的高并发请求时,通过集群来改善并发压力

负载均衡有软件方式实现lvs, 的也有硬件如F5
数据库读写分离

由于数据的增加,数据库压力增大, 对比应用的集群,读写分离处理缓解数据库压力。
反向代理和CDN加速网站响应
出现了类似秒杀的场景后,热点数据会出现在一条记录上, 无论是怎么分库分表,也无法实现于是在出现CDN边缘计算的方案, 反向代理服务器一般会缓冲一些静态资源, 都可以减轻服务器压力,从而能够同时受理更多请求。

使用分布式的文件系统和分布式数据库。
分布式数据库,分布式文件系统,通过集群新增节点,数据分片,进行自我治理,无需对应用改造,提高数据库数据存储和处理能力。
分布式文件系统发展更早一些从最早的NFS到之后的HDFS, GFS, 分布式数据库 TiDB、CockroachDB、YugabyteDB、TBase、TDSQL等。

使用NOSQL和搜索引擎
数据量增大后需要不应当在数据库上做太复杂的关联查询,可以将其放到更适合的将其放到NOSQL服务上进行,进行查询, 针对报表分析可以通过ElasticSearch 来做查询。 放到hadoop上进行后续报表使用。

业务拆分
功能复杂后需要对业务进行拆分, 这个时候也伴随这团队的拆分。

通过使用消息队列MQ,可以实现应用服务间的通讯。
微服务及中台化
提取核心基础业务到微服务,应用服务通过这些基础服务组合成应用服务。微服务需要更灵活的配置和管理,云服务是很好的选择。

大数据与智能化
分布式架构不断完善后,通过大数据和智能化可以根据用户特点提供个性化内容。通过大数据分析和挖掘发现不同用户偏好, 发现内容之间关联为不同用户提供不同内容, 可以通过构建大数据平台来实现。
互联网架构模式
架构模式
架构模式是架构问题的一些标准的解决方案。
分层

将系统横向维度的分为几个部分, 每层负责一部分,通过层与层之间的依赖完成整个系统
比如:按照职责分为, 接口层, 业务处理层, 数据服务层等。
分割

对比分层横向拆分, 分割是系统的纵向分割,将服务业务功能进行拆分, 这期间也伴随这团队的分割和重组。
分布式

分层和分割是为了满足分布式部署将服务部署到不同服务其上,通过更多机器的协作完成工作, 从而满足更大的并发访问和数据存储
集群
分布式已经将模块独立部署, 但是对于访问量大的模块仍然需要冗余化,集群化。

缓存

由于程序运行存在局部性规律, 即一段时间内, 指令和数据可能会再次执行或被访问, 于是将这些指令数据放到距离处理单元最近,最易获取的地方从而加快处理速度。 类似CPU缓存。
涉及的技术有CDN, 反向代理, 本地缓存, 远程缓存。
异步

主要通过消息队列对请求进行排队, 并完成数据在各个应用节点间传送, 可以适当减缓提高系统可用性, 加快网站响应速度, 消除并发访问高峰。
冗余
服务的7*24小时运行及数据的冗余的备份. 包括上面提到的应用的服务集群化,数据库的集群化都属于冗余技术。
自动化

图片来源: https://www.mansystems.com/blog/adding-ats-to-a-ci-cd-pipeline
在无人值守的情况下, 可以正常运行。并且通过CI/CD在开发阶段引入自动化来向客户自动的,快速的提交应用。 提供一条完整流畅的软件发布管线,其中有足够的自动化测试,灰度发布,线上系统自动化控制等。
相关案例
维基百科
可以看到目前wikimedia架构发展也印证了, 老师上面讲的发展趋势。

负载均衡: LVS作为3/4层负载均衡器;
DNS: gdnsd(GeoDNS):通过将请求根据地位位置分发到五个数据中心(美国3个,欧洲1个,亚洲1个)
nginx-仅用于TLS(不适用于负载平衡),Varnish:90%的请求转到varnish;通过哈希请求后端
应用层:PHP语言开发
缓存:Memcached,Parsercache, Redis用于会话存储,后续会迁移到Cassandra
消息队列:Kafka
应用服务:Thumbor图像缩放服务; LaTeX的Mathoid排版功能; ORES是用于恶意破坏检测的ML;MCS:移动内容服务(MCS)
数据库:MariaDB, 进行分库,读写分离。
搜索引擎:Elasticsearch
媒体存储(OpenStack对象存储)
Wikipedia云服务:OpenStack,Horizon,Puppet,Grid Engine,Kubernetes
人员和机器增加后引入 CI / CD
淘宝业务发展
淘宝的技术是和淘宝的业务一起发展起来的, 是业务驱动着技术不得不往前走。
宅米网技术
架构的调整要有对应调整团队组织架构,才能更好的开展工作。
总结
现在的大型互联网网站基本都经历了, 从一个小网站开始逐渐发展起来的过程。对涉及互联网的其他新兴领域也有很大借鉴价值:找到当前最适合自己的架构。
参考及引用
架构师训练营作业-李智慧老师相关讲义
https://wikitech.wikimedia.org/wiki/File:Infrastructure_overview.png
Photo by Andrew Neel from Pexels
评论