这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
本文是对于掘金课程的课程笔记,针对课程内容的一些重难点、本人在学习架构知识时候进行的简单记录。本次课程基本为理论课程,接下来我将对架构部分的知识内容进行说明。
一、本堂课的重点内容
- 什么是架构
- 企业级后端架构剖析
- 企业级后端架构挑战
- 后端架构实战
二、详细知识点介绍
什么是架构
架构,一般是指软件的整体结构与组件的抽象描述,但是这样讲显然我们不好理解,因此可以用例子来说明架构到底是什么,有什么用。
以开蛋糕店为例,假如我们想开一家蛋糕店,一开始可以直接开一家小店,自己经营,自己一个人负责做蛋糕、销售蛋糕,小日子虽然过得辛苦一点但是做一个卖一个,清清楚楚的单机操作。当我们有了资本的原始积累,我们会选择开连锁店,多开几家店,也就多赚几家钱,这时候我们采用分布式部署,也就产生了垂直应用架构。而随着业务的拓展,我们又可以使用微服务架构,也就是从水平方向去切分我们的应用内部,这里面我们采用的是SOA,也就是以服务为中心的架构,在进行去中心化处理之后得到了我们最终的微服务架构。
企业级后端架构剖析
在这一部分,主要介绍了云原生技术,这一技术为组织在公有云、自由云等新型动态环境中构建和运行可弹性拓展应用提供了可能。这一部分主要分为弹性资源、微服务架构、DEVOPS、服务网格。
弹性计算资源
- 服务资源调度:微服务和大服务
- 计算资源调度:在线资源和离线资源
- 消息队列:在线消息(削峰和解耦);离线消息(大数据分析)
弹性存储资源
- 经典的有对象和大数据,对象例如宣传视频,大数据则例如用户消费记录
- 关系型数据库,例如收银记录
- 元数据,例如服务发现(通讯录)
- NoSQL
DevOps
主要负责云原生时代软件的交付,贯穿整个软件开发周期
微服务架构
- 通信标准:HTTP(RESTful API)与RPC(Thrift,gRPC)
- 微服务不必在业务逻辑中实现符合通信标准的交互逻辑,而是可以交给架构来做
服务网格
- 是微服务之间通讯的中间层
- 高性能的网络代理
- 可以让业务代码和治理解耦
- 相比于RPC/HTTP框架,让异构系统治理统一化,与业务进程解耦,生命周期更加容易管理
企业级后端架构的挑战
挑战
- 基础设施层面:物理资源是有限的(机器和带宽);资源利用率受制于部署服务
- 用户层面:网络通信开销大;网络抖动导致运维成本高;异构环境下不同实例资源水位不均
解决思路
- 离在线资源并池
- 自动扩缩容
- 微服务亲和性部署
- 基于为服务中间件和服务网格的流量治理
- CPU水位负载均衡
后端架构实战
这一部分回答了上面一节最后的挑战,如何设计CPU水位负载均衡?我们可以给出三个版本,这三个版本逐一优化,最终得到release版本。
- 自适应动态权重Alpha:我们让容器动态权重自适应调整,发挥服务网格的服务发现和流量调度能力,但是在这一过程中有可能会出现过度的流量倾斜,例如有X和Y两个服务,在动态权重分配过程中达到了1:9,结果一个服务被调走了,这样造成的流量倾斜可能会造成异常
- 自适应动态权重Beta:在这一部分我们让服务网格上报RPC指标,因而可以处理极端场景,但是这样的话时序数据库压力会很大,而且动态权重决策中心的职责会越来越多
- 自适应动态权重Release:在最终的版本里,我们引入消息队列削峰、解耦,进行离在线链路的切分,梳理强弱依赖,完成整体架构的微服务化。最终的结果如下图所示(图来自掘金课程,侵删)。
三、课后个人总结
本次课程让我了解了架构的由来,对架构的定义、类型有了更深入的了解,也从一次架构实战中稍微领悟了一些架构设计的思路与技巧,总的来说受益匪浅。