这是我参与「第三届青训营 -后端场」笔记创作活动的第5篇笔记
微服务架构原理及特征
微服务架构中的基本概念及组件
服务:一组具有相同逻辑的运行实体(一个服务必须运行一份相同的代码)
实例:一个服务中,每个运行实体即为一个实例
实例与进程的关系:没有必然对应关系,通常一个实例对应一个或多个进程
集群:通常指服务内部的逻辑划分,包含多个实例
常见的实例承载形式:进程、VM、k8s pod...
有状态/无状态服务:服务的实例是否存储了可持续化的数据
服务间通信:对于单体服务,不同模块通信只是简单的函数调用;对于微服务,服务间通信意味着网络传输
服务注册与发现
如何指定调用一个目标服务的地址(ip:port)?
由于ip port在微服务中是动态变化的,所以不能指定10.23.45.67:8080进行访问
-
使用DNS?
- 本地DNS存在缓存,导致延时;负载均衡问题;不支持服务实例的探活检查;域名无法配置端口
-
中间层:服务注册中心,哈希表或map,存储服务名到服务实例的映射
服务实例上线及下线过程
-
下线实例:去服务注册中心将对应服务实例删除,此时服务A停止向对应实例发送流量,此时再下线实例
-
上线实例:首先进行健康检查(health check),再把实例注册到服务注册中心
流量特征
从流量走向角度看微服务
- 统一网关入口
- 内网通信多数采用RPC
- 网状调用链路
微服务架构核心要素
服务治理
- 服务注册
- 服务发现
- 负载均衡
- 扩缩容
- 流量治理
- 稳定性治理
可观测性
- 日志采集、分析
- 监控打点、大盘
- 异常报警
- 链路追踪
安全
- 身份验证
- 认证授权
- 访问令牌
- 审计
- 传输加密
- 黑客攻击