这是我参与「第五届青训营 」笔记创作活动的第2天
大纲:
- 什么是架构
- 企业级后端架构剖析
- 企业级后端架构的挑战
- 后端架构实战
什么是架构
架构,又称软件架构,是有关软件整体结构与组件的抽象描述,用于指导软件系统各方面的设计。架构在方法选择上对实现软件的方法起着至关重要的指导作用。
思考:架构是软件工程中的对软件的管理的科学。好的软件架构是软件可靠性和可持续性的基础。
架构示例:单机,把所有功能是实现在一个进程里,并部署在一台机器上。优点:简单易部署 缺点:运维需要停服 C10K Problem
对单机架构的演进:从单机架构演进到单体架构,按应用垂直切分。优点:水平扩容 运维不需要全部停服 缺点:指责太多,开发效率不高 爆炸半径大
思考:Nginx的代理功能就是简单的单机架构
再演进:将后端按照应用分类,扩展出负责不同应用的服务。
再演进:分工协作,将单体架构中每个服务的职责再切分,每个服务所做的事更小,更具体,即 SOA,SOA再进行水平扩容和垂直拆分,出现了微服务。
微服务产生的问题:数据一致性 高可用 治理 解耦和过微之间的平衡
总结:在需求量越来越大的背景下,原本原始且高度聚合的服务处理方式不再适用,需要进行进一步的拆分和扩容,才能满足需求。服务逐渐向微型化和专一化演进。
企业级架构剖析
云计算:IaaS 基础设施即服务 PaaS 平台即服务 SaaS 软件即服务 Faas 函数即服务
IaaS 提供软件和系统运行的基础架构,例如 Bare Metal 裸金属服务器 PaaS 提供软件运行的平台,例如 VPS SaaS 提供软件,例如 SQL 数据库 FaaS 提供软件的某一功能,例如 云函数
云原生:为组织和公司在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供了可能。
企业级后端架构的挑战
在基础设施层面:
- 物理资源有限
- 资源利用率受制于部署服务
用户层面:
- 网络通信开销较大
- 网络抖动导致运维成本提高
- 异构环境下,不同实例资源水位不均
解决方案1:离在线资源并池
目的:降低物力成本 提供更多弹性资源,增加收入
在线业务具有 IO 密集性和潮汐性、实时性,离线业务具有计算密集性、非实时性。将这两种资源池合并起来,可以在在线业务繁忙时暂时减少离线业务资源的分配,在凌晨等在线业务较低迷时增加离线业务的资源分配。动态分配的方案能够提高物理资源的使用率,减少物理资源的数量,提高效益。
思考:同一台机器如何做离在线隔离?答:考虑使用虚拟化和容器方案,隔离离线业务和在线业务进程,限制 CPU 使用率。
思考:如何使业务能够自动分配?使用自动扩缩容。扩缩容可以使用 CPU 使用率和内存占用等指标进行扩缩容的阈值。
解决方案2:微服务亲和性部署
如何解决网络通信开销问题?答:将相互依赖性较强的服务部署在同一台宿主机中,使得两者之间的网络通信的耗时、抖动、可靠性提升。还可以通过算法动态探测和调整服务之间的亲和性关系,使得效益进一步提高。
解决方案3:基于微服务中间件 和 服务网格的流量治理
- 熔断、重试
- 单元化
- 复杂环境的流量调度
解决方案4:CPU 水位负载均衡
通过微服务容器内的资源探针实现服务网格的动态负载均衡