#青训营笔记创作活动# 后端架构——参考课程《架构初探之谁动了我的蛋糕》
一、什么是架构
1.单机架构——All in one,所有的东西都在一个进程里,部署在一个机器上。
优点:
·简单
缺点:
·运维需要停服,用户体验较差
·承载能力有限。
2.单体架构——在单机架构的基础上,将进程部署到多个机器上。
优点:
·具备水平扩容能力
·运维不需要停服
缺点:
·后端进程职责太多,越来越臃肿
·爆炸半径较大,进程中一个很小的模块出现问题,都可能导致整个进程崩溃
3.垂直应用架构——在单机架构基础上,将进程按照某种依据切分开。比如,A 软件和 B 软件的后端原先采用单机架构部署,那就是一个进程部署在多个机器上;如果用垂直应用架构,可以将 A 和 B 的后端拆分为 A、B 两个进程,然后再按照单体模式的思路,部署在多个机器上。
优点:
·一定程度上减少了后端进程职责
·一定程度上缩小爆炸半径
缺点:
·没有根本解决单体架构的问题
4.SOA (Service Oriented Architecture)——面向服务架构 SOA 架构中,服务为一等公民,将进程按照不同的功能单元进行抽象,拆分为『服务』。有了服务之后,SOA 还为服务之间的通信定义了标准,保证各个服务之间通讯体验的一致性。
优点:
·各服务的职责更清晰
·运维粒度减小到服务,爆炸半径可控
缺点:
·ESB (企业服务总线) 往往需要一整套解决方案
5.微服务 (Microservice)——在SOA 架构中,ESB 起到了至关重要的作用。但从架构拓扑来看,它更像是一个集中式的模块。有一个 SOA 分布式演进的分支,最终的形态便是微服务。
优点:
·兼具 SOA 解决的问题
·服务间的通信更敏捷、灵活
缺点:
·运维成本
二、企业级后端架构剖析
1.云计算
(1)云计算基础:
虚拟化技术
·硬件层面(VM 虚拟机)- KVM/Xen/VMware
·操作系统层面(Container 容器)- LCX/Docker/Kata Container
·网络层面 - Linux Bridge/Open v Switch
编排方案
·VM - OpenStack/VMWare Workstation
·Container - Kubernetes/Docker Swarm
(2)云计算架构:
云服务
·IaaS - 云基础设施,对底层硬件资源池的抽象
·PaaS - 基于资源池抽象,对上层提供的弹性资源平台
·SaaS - 基于弹性资源平台构建的云服务
·FaaS - 更轻量级的函数服务。好比 LeetCode 等 OJ,刷题时只需要实现函数,不需要关注输入输出流
云部署模式(拓展)
·私有云 - 企业自用
·公有云 - AWS/Azure/Google Cloud/Huawei
·混合云
2.云原生:为组织(公司)在公有云、自由云、混合云等新型的动态环境中,构建和运行可弹性拓展的应用提供可能。
弹性资源——虚拟化容器、快速扩缩容
弹性计算资源类型:
·服务资源调度
·微服务:和面、雕花
·大服务:烤箱
·计算资源调度
·在线:热销榜单
·离线:热销榜单更新
·消息队列
·在线:削峰、解耦
·离线:大数据分析
弹性存储资源类型——将存储资源当成服务一样
·经典
·对象:宣传视频
·大数据:用户消费记录
·关系型数据库:收银记录
·元数据:服务发现——蛋糕店通讯录
·NoSQL:KV存储
微服务架构——业务功能单元解耦、统一的通信标准
通信协议
·HTTP
·RPC
中间件
DevOps——云原生时代软件交付的利器,贯穿整个软件开发周期(敏捷开发、CI/CD)
软件生命周期
服务网格——业务与治理解构、异构系统的治理统一化、复杂治理能力
三、企业级后端架构的挑战
离在线资源并池
考虑到在线业务的潮汐性,物理资源的用量不是一成不变的。离在线资源并池,可以:
·提高物理资源利用率
·提供更多的弹性资源
微服务亲合性部署
微服务之间的通信成本较高,是否可以:
·形态上是微服务架构
·通信上是单体架构
亲合性部署,通过将微服务调用形态与资源调度系统结合,将一些调用关系紧密、通信量大的服务部署在同一个机器上,并且使用 IPC 代替 RPC 的方式,降低网络通信带来的开销
四、后端架构实战
如何设计一个根据主机层面的资源信息,实时进行流量调度的系统,打平不同宿主机异构环境的算力差异。
关键点:
·紧急回滚能力
·大规模
·极端场景
五、总结与思考
1.架构的发展历程
在总结中,对不同架构方式进行了介绍和比较。从单机架构到单体架构、垂直应用架构、SOA 架构再到微服务架构,每一步都是为了解决前一种架构方式存在的问题并提升系统性能和可扩展性。云计算和云原生则为企业级后端架构提供了更加灵活和弹性的基础设施。
2.架构的优点与挑战
不同架构方式有各自的优点和挑战。单机架构简单但承载能力有限,单体架构具备水平扩容能力但进程职责臃肿。垂直应用架构减少了后端进程职责,但没有根本解决单体架构问题。SOA 架构将服务作为一等公民,提供了更清晰的职责划分和可控的爆炸半径。微服务架构兼具 SOA 解决的问题,并且服务之间的通信更加敏捷和灵活。然而,微服务架构也带来了运维成本的增加。
3.企业级后端架构的挑战
企业级后端架构面临的挑战主要集中在基础设施层面和用户层面。在基础设施层面,云提供了弹性资源,但背后的物理资源却是有限的。这引发了如何解决弹性资源与物理资源之间的矛盾的问题。同时,闲置资源的存在也需要提高资源利用率,以增加物理资源的价值转换率。
在用户层面,上云原生微服务后,服务间通信开销变得较大,需要进行成本优化。此外,微服务架构中的抖动现象会导致较高的运维成本,需要找到解决方案来减少抖动对系统的影响。另外,为了屏蔽物理环境的异构性对用户的透明度,需要设计合适的机制来隐藏这些细节。
针对这些挑战,可以思考以下解决方案:
·基础设施层面:
·通过资源调度算法,确保弹性资源的分配公平性和高效性,合理利用有限的物理资源。
·使用虚拟化技术,将物理资源划分为多个虚拟机或容器,提高资源利用率。
·基于需求预测和负载均衡,动态调整资源分配。
·用户层面:
·通过优化微服务之间的通信模式和协议,减少通信开销,如采用异步通信、缓存数据等方式。
·引入容错机制和负载均衡策略,降低抖动对系统的影响,确保系统的稳定性和可靠性。
·提供抽象层,为用户屏蔽物理环境的异构性,使用户能够方便地使用统一的接口和服务。
综上所述,企业级后端架构在面对挑战时需要综合考虑基础设施层面和用户层面的需求,通过合理的资源调度、优化通信开销、降低抖动以及提供透明性等手段来解决问题。这些解决方案可以帮助提高系统性能、资源利用率和用户体验,从而更好地满足企业的需求。
4.实战案例 最后,通过实战案例——如何设计一个根据主机层面的资源信息,实时进行流量调度的系统,打平不同宿主机异构环境的算力差异。
总体而言,通过课程学习,我们明白了了解和选择适合企业需求的后端架构是至关重要的,它可以决定系统的性能、可扩展性和维护成本。在架构设计过程中,需要权衡各种因素,并结合实际情况做出合理的决策。