开发面向生产环境的微服务应用
在微服务部署到生产环境中时,除了业务满足需求以外,还有以下方面的问题需要满足生产需求
1、安全问题
安全方面主要包含几个方面:身份验证、访问授权、审计、进程通信安全
(1)单体应用的安全验证,常用的框架有Spring Security、Apache Shiro、Passport(Node.js验证框架)
(2)微服务中实现安全性
- 由API Gateway处理身份验证,可以避免请求直接进入内部各微服务,在请求转发给微服务之前进行验证;另一方面,由于API Gateway处理各种不同的身份验证机制,其他服务的实现变得简单了。
- 在API Gateway中可借助于Spring Security实现基于角色的访问路径的控制
- 如果要实现对单个领域对象的访问权限,则会与服务耦合
- 也可在微服务中实现基于角色访问授权,可实现ACL管理聚合的访问
(3)使用OAuth 2.0,其中的关键概念为:授权服务器 、访问令牌、刷新令牌、资源服务器、客户端
2、设计可配置的服务
外部化配置:
-
推送模型
推送模型依赖于部署环境和协作,部署环境在创建服务实例时提供配置属性。它可能会将配置属性作为环境变量传递,或者环境变量可以使用配置文件提供配置属性,服务实例在启动时读取配置属性。
推送模型的弊端:重新配置后,需要重新启动服务
Spring Boot读取变量的优先顺序如下:
命令行参数
JVM系统属性
操作系统环境变量
当前目录中的配置文件 -
拉取模型
服务实例从配置服务器读取配置属性
实现配置服务器的方法有:版本控制系统,如Git
SQL 和 NoSql
专用配置服务器,如 Spring Cloud Config Server使用配置服务器的好处:
集中配置,统一管理
敏感数据的透明解密
动态重新配置
3、设计可观测的服务
- 健康检查API
- 日志聚合
- 分布式跟踪
- 异常跟踪
- 应用程序指标
- 审核日志记录