微服务设计模式 - 11 面向生产环境微服务
面向生产环境, 要保证 3 点: 安全性, 可配置性(服务可配置), 可观测性(监控和日志记录).
安全
身份验证
访问权限
审计, 用户的关键操作行为
安全进程间通信 (服务之间通信都应该采用传输层安全性 TLS)加密. 服务间通信甚至可能需要使用身份验证.
可以考虑使用安全架构: Spring Security, Apache Shiro 等.
Oauth2
access token 过期了.
可配置服务
Sping Cloud Config 支持的 配置中心就挺好用, 有以下功能:
可观测服务
- 健康检查API: 公开返回服务运行状况的接口.
- 日志聚合: 记录服务活动并将日志写入集中式日志记录服务器, 该服务器提供搜索和告警.
- 分布式跟踪: 为每一个服务之间跳转的外部请求分配唯一 ID, 并跟踪请求.
- 异常跟踪: 向异常跟踪服务报告异常,该异常跟踪服务可以对异常进行重复数据删除,向开发人员发出警报并跟踪每个异常的解决方案.
- 应用程序指标: 服务运维指标, 例如计数器和指标, 并将它们公开给指示服务器.
- 审核日志记录: 记录用户操作.
健康检查
有的服务看上去正在运行, 但它却无法处理请求, 例如,新启动的服务实例可能尚未准备好接受请求.
服务公开健康检查 API 接口, 例如 GET/health, 它返回服务的健康状况. 服务健康时返回200,否则返回503.
主要是用来测试外部链接, 比如, 它可能执行一个 DB 的测试检查, 返回响应代码, 比如 HTTP 200.
使用日志聚合
在支持搜索和告警的集中式数据库中聚合所有服务的日志. (API Gateway 日志, 其他服务的日志)
Logback, log4j
Elasticsearch: 面向文本搜索的 NoSQL 数据库, 用作日志记录服务器.
LogstashL: 聚合服务日志并将其写入 Elassticsearch 的日志流水线.
Kibana: Elasticsearch 的可视化工具.
分布式追踪
为每个外部请求分配一个唯一的ID, 并在提供可视化和分析的集中式服务器中记录它如何从一个服务流向另一个服务.
使用应用程序指标模式 (Matrix)
CPU, 内存, 磁盘等.
异常追踪模式
central 管理异常, 异常追踪, 服务把生产的异常报告给中央服务, 该服务队异常进行重复数据删除, 生成告警并管理异常的解决方案.
有 纯粹基于云的异常服务, Honeybadger.
使用审计日志
关键性操作, 合规性.
审计日志可以使用面向切面编程, AOP, 将审计日志的内容加进去.
使用微服务基底模式开发微服务
从微服务基底到服务网格
服务网格模式: 把所有进出服务的网络流量通过一个网络层进行路由, 这个网络层负责解决包括 断路器, 分布式追踪, 服务发现, 负载均衡和基于规则的流量路由等具有共性需求.
Istio 服务网格.