这是我参与「第三届青训营 -后端场」笔记创作活动的的第三篇笔记.
- 本次青训营课程中,微服务架构课程分为上下两篇,这是下篇《微服务架构原理与治理实践》。前面架构相关的课程有《架构初探-谁动了我的蛋糕》。
- 我把《微服务架构原理与治理实践》的笔记也分为上下两篇。这是上篇,本篇简单介绍一下微服务架构以及微服务架构原理以及它的原理
- 微服务架构原理与治理实践 (下篇)| 青训营笔记 - 掘金 (juejin.cn) 话不多说,我们开启本篇笔记~
1.微服务架构介绍
系统架构演变历史
为什么系统架构需要演进?
- 互联网的爆炸性发展
- 硬件设施的快速发展
- 需求复杂性的多样化
- 开发人员的急剧增加
- 计算机理论及技术的发展
系统架构演变历史:
单体架构->垂直应用架构->分布式架构->SOA架构->微服务架构 相关详情可以看作者的另一篇文章# 架构初探-谁动了我的蛋糕 (上篇)| 青训营笔记
微服务架构概述
在微服务架构中本身服务是一等公民的话,那么相应的针对这些服务的各种配置,我们其实是需要一个基础化的一个能力就来支持的。那么这也是服务配置和治理相关的相应的功能。然后链路追踪和监控,微服务架构它本身是一个特别庞大的一个分布式系统。我们需要对上面进行各种问题的定位的话,这需要统一的一个平台层面的能力才能够支撑的。否则我们不可能对每一个服务进行传统的像单体架构那样的直接去看日志之类的那种比较古老的一个开头方法,必须有一个平台级的链路追踪和监控的能力支撑,这是微服务架构的一个整体的概览。
微服务架构核心要素
服务治理
- 服务注册
- 服务发现
- 负载均衡
- 扩缩容
- 流量治理
- 稳定性治理
- ......
可观察性
- 日志采集
- 日志分析
- 监控打点
- 监控大盘
- 异常报警
- 链路追踪
- ......
安全
- 身份验证
- 认证授权
- 访问令牌
- 审计
- 传输加密
- 黑产攻击
- ......
2.微服务架构原理及特征
基本概念
- 服务(Service): 一组具有相同逻辑的运行实体
- 实例(Instance): 一个服务中,每个运行实体即为一个实例
- 实例与进程的关系: 实例与进程直接没有必然对应关系,一个实例可以对应一个或多个进程(反之不常见)
- 集群(Cluster): 通常指服务内部的逻辑划分,包含多个实例
- 常见的实例承载形式: 进程、VM、k8s pod......
- 有状态/无状态服务: 服务的实例是否存储了可持久化的数据(例如磁盘文件)
- 服务间通信:
- 对于单体服务,不同模块通信只是简单的函数调用
- 对于微服务,服务间通信意味着网络传输
服务注册及发现
问题:在代码层面,如何指定调用一个目标服务的地址(ip:port)?
-
解决方法一:hardcode
存在问题:集群不好访问,目标地址可能会发生变化!所以我们不太可能指定一个固定的IP地址。 -
解决方法二:DNS 存在问题:
- 本地 DNS 存在缓存,导致延时
- 负载均衡问题
- 不支持服务实例的探活检查
- 域名无法配置接口 正确处理方式: 新增一个统一的服务注册中心,用于存储服务名到服务实例的映射
流量特征
- 统一网关入口
- 内网通信多采用PRC
- 网状调用链路