写点什么

系统架构与案例

用户头像
garlic
关注
发布于: 2020 年 10 月 15 日
系统架构与案例

互联网系统面临的挑战



  • 高并发,大流量

  • 高可用

  • 海量数据

  • 用户分布广泛,网络情况复杂

  • 安全环境恶劣

  • 需求快速变更发布频繁

  • 渐进式发展



互联网发展打破了传统应用系统封闭的环,我们每一个人可以参与其中得到更好的服务, 也能为其他人提供服务并花费比以往更低的成本。



应对高并发的两个技术方向





  • 垂直伸缩

增强单一服务器的计算能力, 增加硬件的处理能力如:CPU,内存,网卡,存储提升。

优点:不改变系统架构相对简单

缺点

  1. 超过某一程度,获得计算能力需要更多成本;

  2. 存在物理极限

  3. 操作系统自身也会达到极限。





  • 平行伸缩

通过增加服务器提升计算能力的架构方法。

优点: 单位计算成本相对较低, 能达到更高的计算能力。

缺点:

  1. 相比较垂直伸缩复杂, 需要更多的分布式技术要求更高, 对技术要求更高



分布式架构演进



单台服务器



一台机器搞定所有功能。





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

应用数据分离



这个阶段将应用, 数据库, 文件服务进行拆分。



使用缓存改善系统性能



用户增多,并发增大后,可以通过缓存减少读取压力。





通过本地存储和远程分布缓存方式实现



应用服务集群



当一个应用已经无法满足用户的高并发请求时,通过集群来改善并发压力



负载均衡有软件方式实现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,Horizo​​n,Puppet,Grid Engine,Kubernetes

人员和机器增加后引入 CI / CD



淘宝业务发展



淘宝的技术是和淘宝的业务一起发展起来的, 是业务驱动着技术不得不往前走。

宅米网技术

架构的调整要有对应调整团队组织架构,才能更好的开展工作。



总结



现在的大型互联网网站基本都经历了, 从一个小网站开始逐渐发展起来的过程。对涉及互联网的其他新兴领域也有很大借鉴价值:找到当前最适合自己的架构。



参考及引用



架构师训练营作业-李智慧老师相关讲义

https://wikitech.wikimedia.org/wiki/File:Infrastructure_overview.png

Photo by Andrew Neel from Pexels



用户头像

garlic

关注

还未添加个人签名 2017.11.15 加入

还未添加个人简介

评论

发布
暂无评论
系统架构与案例