保证服务三个关键质量属性
应用程序安全性
企业需要解决的安全性问题包括:硬件的物理安全性、传输和静态数据加密、身份验证、访问授权和修补软件漏洞策略等
身份验证
流行的安全框架
1.Spring Security
2.Apache Shiro
3.Passport
微服务中的身份验证
由API Gateway处理身份验证
模式:访问令牌
API Gateway将包含用户信息(例如其身份和角色)的令牌传递给它调用的服务。
访问授权
JWT(JSON Web Token)(透明令牌)
JWT全称是JSON Web Token,如果从字面上理解感觉是基于JSON格式用于网络传输的令牌。实际上,JWT是一种紧凑的Claims声明格式,旨在用于空间受限的环境进行传输,常见的场景如HTTP授权请求头参数和URI查询参数。JWT会把Claims转换成JSON格式,而这个JSON内容将会应用为JWS结构的有效载荷或者应用为JWE结构的(加密处理后的)原始字符串,通过消息认证码(Message Authentication Code或者简称MAC)和/或者加密操作对Claims进行数字签名
OAuth 2.0
OAuth 2.0的关键概念
1.授权服务器:提供用于验证用户身份以及获取访问令牌和刷新访问令牌的API
2.访问令牌:授予对资源服务器的访问权限的令牌。访问令牌的格式取决于具体的实现技术
3.刷新令牌:客户端用于获取新的AccessToken的长效但同时也可以被撤销的令牌
4.资源服务器:使用访问令牌授权访问的服务。在微服务架构中,服务是资源服务器
5.客户端:想要访问资源服务器的客户端。在微服务架构中,API Gateway是OAuth2.0的客户端
OAuth 2.0的关键思想
1.API Gateway负责验证客户端的身份
2.API Gateway和服务使用透明令牌来传递有关主体的信息
3.服务使用令牌获取主体的身份和角色
审计
安全的进程间通信
设计可配置服务
外部化配置
在运行时向服务提供配置属性值,例如数据库访问凭据和网络位置。
外部化配置机制在运行时向服务实例提供配置属性值。主要有两种方法:
1.推送模型:部署基础设施通过类似操作系统环境变量或者配置文件,将配置属性传递给服务实例
2.拉取模型:服务实例从配置服务器读取它所需要的配置属性
使用基于推送的外部化配置
Spring Boot读取参数的方式:
1.命令行参数
2.SPING_APPLICATION_JSON,包含JSON的操作系统环境变量或JVM系统属性
3.JVM系统属性
4.操作系统环境变量
5.当前目录中的配置文件
来自此列表中靠前的来源的特定属性值将覆盖此列表中稍后的来源中的相同属性
Spring Boot使这些属性可以通过Spring Framework的ApplicationContext访问。例如服务可以使用@Value注解获取属性的值:
public class OrderHistoryDynamoDBConfiguration{
@Value("${aws.region}")
private String awsRegion;
}
Spring Framework将awsRegion字段初始化为aws.region属性的值。从前面列出的某个来源(例如配置文件或AWS_REGION环境变量)中读取此属性
使用基于拉取的外部化配置
有多种方法可以实现配置服务器,包括:
1.版本控制系统,如GIT
2.SQL和NoSQL数据库
3.专用配置服务器,如Spring Cloud Config Server,Hashicorp Vault和AWS Parameter Store
使用配置服务器的好处
1.集中配置:所有配置属性都存储在一个位置,这使得它们更易于管理。此外,为了消除重复的配置属性,有些实现允许你定义全局默认值,针对单个服务的值可以覆盖这些默认值
2.敏感数据的透明解密
3.动态重新配置:服务可以通过轮询等方式检测更新的属性值,并重新配置自身
设计可观测的服务
服务部署完成运行后,需要知道应用程序正在做什么:每秒请求数和资源利用率等等。如果出了问题,还想收到告警,例如服务失败或者磁盘写满
使用以下模式来设计可观测的服务
1.健康检查API:公开返回服务运行状况的接口
2.日志聚合:记录服务活动并将日志写入集中式日志记录服务器,该服务器提供搜索和告警
3.分布式跟踪:为每一个在服务之间跳转的外部请求分配唯一ID,并跟踪请求
4.异常跟踪:向异常跟踪服务报告异常,该异常跟踪服务可以对异常进行重复数据删除,向开发人员发出警报并跟踪每个异常的解决方案
5.应用程序指标:服务运维指标,例如计数器和指标,并将它们公开给指标服务器
6.审核日志操作:记录用户操作
服务如何生成日志
日志聚合的基础设施
分布式追踪
使用追踪工具类库
关于分布式追踪服务器
异常追踪
审计日志模式
使用微服务基底模式开发服务
模式:微服务基底
异常追踪、日志记录、健康检查、外部化配置和分布式追踪是微服务架构需要解决的共性问题,我们需要在能够处理那些共性问题的框架或框架集合上构建服务。