MSE从2020年1月发布Nacos1.1.3版本引擎,支持在公有云环境全托管的方式使用Nacos作为注册中心。2020年7月发布Nacos1.2.1版本支持元配置数据管理,支持微服务应用在运行时动态修改配置信息和路由规则等。随着用户的深入使用,Nacos1.X版本的性能问题也渐渐暴露出来。通过对1.X版本的内核改造,Nacos2.0专业版性能提升10倍,基本能满足用户对微服务场景的性能要求。
除了性能的提升,专业版具有更高的SLA保障,并且在配置数据上具有更高的安全性,同时通过MCP协议与Istio生态打通,作为Istio的注册中心。
整体1.X架构可以粗略分为五层,分别是接入层、通信层、功能层、同步层和持久化层。
目前1.X的架构存在几个问题:
1.X架构的问题核心点在于连接模型上,2.0架构升级为长连接模型,在通信层通过gRPC和RSocket实现长连接数据传输和推送能力,在连接层新增加请求处理器、流控和负载均衡等功能
2.0架构解决的问题:
2.0架构带来的问题:
2.0架构整体来说降低了资源开销,提高了系统吞吐量,在性能上有大幅提升,但同时也增加了复杂度
Nacos分为服务发现模块和配置管理模块,这里先对服务发现场景进行性能测试。
使用200台施压机,每个施压机模拟500个客户端,每个客户端注册5个服务,订阅5个服务,最高可以提供10W个长连接、50W个服务实例和订阅者压测场景
服务发现压测主要压变更态和稳定态两种场景:
服务发现也会在MSE上对低版本做升级,对比升级前后的性能变化曲线,这样的性能对比更直观
配置管理模块在实际使用中是写少读多的场景,主要瓶颈点在单台机器性能上,压测场景主要基于单台机器的读性能和连接支撑数
使用200台施压机,每台施压机可以模拟200个客户端,每个客户端订阅200个配置,发起配置订阅和读配置请求
在服务发现场景对比基础版和专业版在2C4G、4C8G和8C16G规格下的性能数据情况。
这里最大的TPS和实例数都是服务能保证高可用稳定运行的数据,大概会是最大值的一半或者三分之二,也就是说挂一台机器也可以正常运行。
稳定运行时支持规模提升7倍,实际上最大支持规模提升7-10倍
还有一个场景是对3节点2C4G MSE Nacos升级前后的对比,主要分为三个阶段:
从升级前后的性能曲线感受MSE Nacos2.0专业版性能有提升较大。最后整体的压测情况,相较于基础版,专业版服务发现性能提升10倍,配置管理提升7倍
对于新用户可以直接创建专业版实例,老用户则可以通过MSE"实例变更"一键升级。MSE会在后台对POD升级,由于V1V2数据结构不一样,在一开始的时候Nacos数据默认是双写的,在升级过程中数据会从V1同步到V2,升级完成后数据会从V2同步V1,最后MSE会关闭双写逻辑,整体流程都是自动。
SLB的服务端口最后也会增加GRPC 9848端口,此时应用SDK可以从1.X版本升级到2.0版本,整体客户端服务端升级到2.0架构
版本之间的兼容性情况,整体的兼容原则是高版本的服务端兼容低版本客户端,但是高版本客户端不一定能访问低版本服务端:
上一期岛风同学讲解了配置权限控制,整体MSE Nacos通过阿里云RAM主子账号体系来做权限控制,这期我主要讲一下Nacos的配置加密功能。
用户在使用配置数据时可能会将用户信息、数据库密码等敏感信息存放到Nacos中,而Nacos存储配置数据都是明文传输、明文存储的,在数据库内容泄漏或者传输层抓包时会导致敏感配置数据项泄漏,整体安全风险非常高。
常用的HTTPS协议能解决传输安全,但解决不了存储安全,这里直接在客户端进行加密,这样在传输和存储的过程中数据都是加密的。
这里使用第三方加密系统(如阿里云KMS)加强加密的安全性,为了加密速度快使用对称加密(AES算法),由于密钥要随着密文传输,同时对密钥进行加密,整体采用二级加密的方式。
SDK在发布数据时会先从KMS中拿到密钥和加密后的密钥,然后使用密钥对数据进行加密,接着将加密数据和加密后的密钥传输到Nacos存储。SDK会从Nacos获取加密数据和加密后的密钥,然后通过加密后的密钥从KMS获取明文密钥,接着通过明文密钥对加密数据进行解密获取明文数据,解决了整体传输和存储中的数据安全问题。
为了兼容老逻辑,并且只有敏感数据需要加密,Nacos只对固定前缀DataId的数据进行加密,并且在开源侧通过SPI插件化实现,让用户自己能扩展
用户可以通过SDK和MSE控制台对敏感数据进行加解密,整体SDK和MSE控制台都会先访问KMS再加密存储配置数据,然后解密之后再展示明文,使用流程和之前明文存储一致
用户使用SDK接入开启加解密功能需要SDK在1.4.2版本及以上,同时需要引入MSE内部实现的nacos-client-mse-extension加解密插件。
com.alibaba.nacos
nacos-client
1.4.2
com.alibaba.nacos
nacos-client-mse-extension
1.0.1
初始化SDK时需要填入子账号AK/SK,并授权KMS加解密权限,具体细节可以参考创建和使用配置加密
Properties properties = new Properties();
properties.put("serverAddr", "mse-xxxxxx-p.nacos-ans.mse.aliyuncs.com");
properties.put("accessKey", "xxxxxxxxxxxxxx");
properties.put("secretKey", "xxxxxxxxxxxxxx");
properties.put("keyId", "alias/acs/mse");
properties.put("regionId", "cn-hangzhou");
ConfigService configService = NacosFactory.createConfigService(properties);
String content = configService.getConfig("cipher-kms-aes-256-dataid", "group", 6000);
MSE Nacos2.0专业版相较于基础版在性能、可用性和安全性上都有较大提升,基础版建议用于测试环境,对于生产环境建议使用专业版。对于用户身份、密码等配置敏感信息建议都开启权限控制能力并且加密保存加强数据安全。
原文链接:http://click.aliyun.com/m/1000282177/
本文为阿里云原创内容,未经允许不得转载。