架构初探 | 青训营笔记
这是我参与「第五届青训营」笔记创作活动的第7天。
什么是架构
架构是一个很抽象的词,表示有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。
没有最好的架构,只有最合适的。
举一个卖蛋糕的例子,最开始店比较小,只要自己来做蛋糕就可以(单机架构),如果生意很好,那么我们就需要雇佣更多的蛋糕师傅来帮助我们一起做蛋糕,这时我们可以把蛋糕师傅分为专门做慕斯的师傅、专门做肉松的师傅...,相当于进行了垂直切分(单体架构,分布式部署),而为了进一步提高做蛋糕的效率,我们可以把每一个步骤都抽象为更小的单元(服务),这样相当于进一步进行了水平切分(SOA,微服务架构),最终的架构如下:
企业级后端架构剖析
云计算:通过软件自动化管理,提供计算资源的服务网络,是现代互联网大规模数据分析和存储的基石。
- 它的基础是虚拟化技术和编排方案。
- 它的架构如下:
- IaaS(使用房屋租赁平台而不是买房子)
- PaaS(使用全包而不是清包)
- SaaS(雇佣培训过的师傅而不是从零培训)
- FaaS(使用蛋糕机批量生产而不是纯手工制作)
云原生:云原生计算的简称,它是云计算发展到现在的一种形态。它的代表技术有:
- 弹性资源(分为计算资源和存储资源)
- 微服务架构(RPC和HTTP)
- DevOps(结合自动化流程,提高软件开发和交互的效率)
- 服务网格(微服务之间通讯的中间层)
企业级后端架构的挑战
挑战:在基础设施层面物理资源是有限的,资源利用率受限于部署服务,用户层面网络通信开销较大,网络抖动导致运维成本提高,异构环境下,不同实例资源水位不均。
企业级开发有以下的方式来解决上述挑战:
- 离在线资源并池ing(混合资源池,根据时间变化,动态调整离线资源池和在线资源池所占的比例)
- 自动缩扩容(利用在线业务潮汐性自动扩缩容)
- 微服务亲和性部署(将满足亲和性条件的容器调度到一台宿主机,微服务中间件与服务网格通过共享通信)
- 流量治理(基于微服务中间件&服务网格)
- CPU水位负载均衡(打平异构环境算力差异,为自动扩缩容提供正向输入)
后端架构实战
本部分主要解决上面的CPU水位负载均衡的问题
上图为该问题的概述,服务网格数据面支持带权重的负载均衡策略;注册中心存储了所有容器的权重信息;宿主机能提供容器的资源使用情况和物理资源信息(如 CPU 型号等)
如何做架构设计:
- 需求先行。弄清楚要解决什么问题
- 业界调研。业界都有哪些解决方案可供参考
- 技术选型。内部/社区都有哪些基础组件
- 异常情况。考虑清楚 xxx 不行了怎么办