这是我参与「第五届青训营」伴学笔记创作活动的第6天。青训营的第七次课程中讲解了有关“架构”的相关知识,介绍了架构的概念、企业级后端架构形态、企业级后端架构面临的挑战。下面是我对本次课程内容的一些总结。
架构定义
架构为软件整体结构及组件的抽象描述,用于指导软件系统各方面上的设计。通俗上来讲,架构即为实现一个软件过程中方法选择的纲领。课程中通过一个开蛋糕店的例子演示了几种基本架构的形态。
单机架构
单机架构是最简单的架构,即把所有功能实现在一个进程中,并部署在一台机器上。以蛋糕店为例,单机架构就是仅开一个蛋糕店,并通过一个蛋糕店服务用户。
- 优点:简单
- 缺点:运维需要停服、承载能力有限
单体分布式部署
通过分布式进行部署,并引入负载均衡层即可得到单体架构,其将用户引流到某服务器中进行服务。
- 优点:运维无需停服、提高了一定的承载能力
- 缺点:后端一个进程职责太多,当其中一个模块出现问题时,整个进程都会崩溃。
垂直应用架构
垂直应用架构将一个进程的中不同应用进行拆分,如将蛋糕店中蛋挞制作、泡芙制作拆分开来。
- 优点:相比单体系统,使得一个进程的职责减少
- 缺点:没有脱离单体系统的问题
SOA(面向服务架构)及微服务
SOA架构将进程按不同的功能单元进行抽象,拆分成“服务”,并为服务间的通信提供了标准,使得服务间进行通信协作。
- 优点:各服务的职责清晰,粒度较小,运维难度低
- 缺点:需要运用ESB(企业服务总线)进行服务间的协作,需要一整套解决方案
相比SOA而言,微服务去除了通常SOA中企业服务总线的集中式处理模块,使得服务之间的通信更加灵活
- 优点:兼备SOA的优点、服务间通信更加灵活
- 缺点:运维成本较高
总结而言,架构演变的初衷是随着需求量及业务复杂程度提升而进行的,其演进的方向有两种:垂直切分(按照不同功能模块)、水平切分(同一功能模块的复制)。
企业级后端架构形态
云计算
云计算是指通过软件自动化管理,提供计算资源的服务网络,通俗来讲就是通过抽象隐藏计算资源的底层特性,并提供使用计算资源的接口。
按照实现方式,云计算可以如下分类:
- 虚拟化技术:针对硬件层面、操作系统层面、网络层面进行虚拟化;
- 编排方案:虚拟机编排、容器编排
按照提供服务的层级,云计算可以分为以下几种:
- IaaS:云基础设施,提供了底层硬件资源的抽象,如CPU、内存;
- PaaS:基于底层资源池的抽象,为上层提供弹性的资源平台;
- SaaS:基于弹性资源平台构建的云服务;
- FaaS:更轻量级的函数服务;
云原生
云原生是云计算发展到现在的一种形态,其为组织在公有云、自由云等新型的动态环境中创建应用,提供了一系列的云计算服务。其代表技术如下:
- 弹性资源:通过虚拟化技术,提供弹性的计算资源和存储资源。计算资源如在线、离线计算资源,消息队列;存储资源如对象存储、关系型数据库、KV存储。
- 微服务架构:在微服务架构下,服务之间的通信是基于协议的而不是基于总线的,如使用HTTP、RPC协议。
- 服务网络:其为微服务之间通信提供了中间层,使得业务代码与系统治理相解耦。
企业级后端架构挑战
按照基础设施及用户层面,云服务存在如下的挑战:
- 基础设施:物理资源(机器、带宽)是有限的,如何解决无限的弹性资源与有限的物理资源间的矛盾;资源的利用率如何提高;
- 用户层面:服务间通信开销大、运维成本高、如何屏蔽异构物理环境;
针对以上挑战,产生了如下的云服务优化措施:
- 离在线资源并池:其设计原理即为在线业务是具有实时性的,其在一定时间段可能占用较高或较低的资源。在这里可以根据具体在线业务的压力来调控用于服务在线任务的在线资源池、服务离线任务的离线资源池,并分配两者的占用比率。
- 微服务亲和性部署:在微服务中,不同服务间的通信频率是不同的,可以将相互通信的容器部署在同一台物理机器,降低通信开销;
- CPU水位负载均衡:通过云计算IaaS提供底层硬件资源的抽象,并利用服务网络进行动态的负载均衡。
- 流量治理:基于微服务中间件、服务网络进行流量治理,提高微服务调用的容错性。