本文介绍四块内容:
一,前言
二,购买使用
三,测试案例
四,总结
一,前言
注册配置中心我们有在使用自建的ZooKeeper,在ACK上创建了5个实例的集群,从目前使用情况下,很少出现问题,有可能我们规模不大。偶尔有几次出现问题是,ZK的master因为节点故障,临时进行了选举,这期间服务注册不上去,后端出现了报错。所以ZooKeeper的可用性(AP)是我们比较关心的点,恰巧它只支持一致性(CP)。
等了解到Nacos,在AP层面的能力正是我们所需的,不过需要自建,还是比较麻烦。后来了解到它的企业版MSE-Nacos问世,才发现这款产品是我们的梦寐以求的。托管,可扩缩容,白屏化管理,支持RAM鉴权,一键接入健康和报警等等功能深深吸引了我们。现在我们来测试下MSE-Nacos 这款产品吧,看看是否在使用上,安全性,稳定性等功能满足我们的需求吧。
二,购买使用
此次购买开发版,早些还支持基础版,目前已经停止新购。
生产环境建议采购专业版本,支持同城高可用部署和推空保护。
几分钟后 就创建完成。
配置访问白名单,因为买的是公网,后续需要对本地服务进行测试,白名单就是本地的出口IP。
如果需要vpc网络,可以在升降配页面再配置。
如果实例修改了引擎实例参数,或者实例有问题,也可以在本页面进行实例重启维护。
默认资源和服务使用public空间,如果需要做隔离,把控风险,可以使用新建命名空间。
三,测试案例
环境:
- Dubbo:3.0.6
- Nacos:阿里云2.2.3.0
- Java:1.8
网上开源代码里搜的demo,我将nacos改成了MSE-Nacos。
主要定义了TestService接口
package com.dubbo.api; public interface TestService { /** * 获取名称 * * @param id * @return */ String getName(Integer id); }
dubbo-provider(服务提供者)
TestServiceImpl实现类
package com.dubbo.provider.service; import com.dubbo.api.TestService; import org.apache.dubbo.config.annotation.DubboService; @DubboService public class TestServiceImpl implements TestService { @Override public String getName(Integer id) { // 模拟查询数据库操作,返回了"张三"; return "张三"; } }
启动类
package com.dubbo.provider; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableDubbo public class DubboProviderApplication { public static void main(String[] args) { SpringApplication.run(DubboProviderApplication.class, args); } }
配置nacos
server: port: 8001 spring: application: name: dubbo-provider dubbo: # 注册中心地址--阿里云 registry: address: nacos://xxx.mse.aliyuncs.com:8848
dubbo-consumer(服务消费者)
定义controller
package com.dubbo.consumer.controller; import com.dubbo.api.TestService; import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TestController { @DubboReference private TestService testService; @GetMapping("/test") public String test(Integer id) { return testService.getName(id); } }
启动类:
package com.dubbo.consumer; import org.apache.dubbo.config.spring.context.annotation.EnableDubbo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication @EnableDubbo public class DubboConsumerApplication { public static void main(String[] args) { SpringApplication.run(DubboConsumerApplication.class, args); } }
application.yml 配置Nacos 地址
server: port: 8002 spring: application: name: dubbo-consumer dubbo: # 阿里云-注册中心地址 registry: address: nacos://xxx.nacos-ans.mse.aliyuncs.com:8848 register: false consumer: # 取消服务启动检查 check: false
本地启动provider服务和 consumer服务:
测试启动:
查看本地监听的端口都已经启动
浏览器访问:
返回数据正常。
测试MSE-Nacos控制台功能
查看MSE-Nacos的服务
已经注册创建了3个服务。
点击接口可以查看提供者,订阅者和该接口的推送轨迹。
查看订阅者信息
查看推送轨迹
推送轨迹可以协助排查注册中心服务推送相关的问题,它详细展示了配置中心配置变更的信息记录,
默认全局的需要专业版才开通。
如果使用到配置管理,可以查看配置列表。
此处有接入的示例代码,👍
也可以将历史配置进行回滚操作
监控中心:
这些监控 可以导入到grafana观察以及进一步使用Explore快速分析指标数据。
访问鉴权
我们创建的Nacos引擎默认是不启用鉴权的,Nacos引擎会响应所有请求。
虽然我们加了IP白名单,但无法控制白名单其它用户访问Nacos实例,所以需要鉴权来控制操作和访问。
1,开启鉴权,修改ConfigAuthEnabled或NamingAuthEnabled为“是”。
2,创建RAM账号和AK及分配策略
创建RAM子账户,选择OpenAPI调用访问,会自动创建访问密钥(AccessKey)
随后授权如下策略:
AliyunMSEFullAccess AliyunMSEReadOnlyAccess
3,客户端配置鉴权
此处使用dubbo
对应的配置为
##鉴权 dubbo: registry: address: nacos://mse-8e0e94816-p.nacos-ans.mse.aliyuncs.com:8848?accessKey=XXX&secretKey=XXX
此外MSE Nacos 还支持更细粒度的授权,结合RAM Policy 可以对实例、命名空间、Group、DataId等设置访问的读、写权限,授权给应用最小够用权限,以此降低某个实例被恶意用户非法获取、修改的风险。
此处就不一一介绍啦。
建议
在创建告警规则的时候,选择nacos实例后,告警分组 没有展示出来,进而无法进一步配置告警指标等。
查文档,没有说明Nacos 开发版本不支持。
四,总结
MSE-Nacos总体测试下来,使用比较丝滑,白屏化管理使用简单,直接在控制台查看和维护。对比目前在使用的ZooKeeper集群还是黑屏命令化管理,非常不便,也容易出错。
MSE-Nacos 可以配置集群,支持高可用,同时支持AP和CP,对一致性和可用性的需求都满足。
前言也说了ZK集群在维护期间会出现不可用,维护起来非常痛苦。我们在ACK的自建集群,需要逐台进行ZOO_SERVERS的定义,方便逐次选举,拉入进群。但 每次选举的时候又有半分钟以上的不可用,因为ZooKeeper的选举过程速度很慢,选举过程中需要进行元数据的同步操作,通常耗时30到120秒,所以选举期间注册服务是瘫痪的,导致服务不可用。
上面介绍了MSE-Nacos很多优点,不过最吸引我的还是MSE-Nacos 的 阿里云生态,比如鉴权方面可以使用RAM的Policy做非常精细的授权,确保客户端拿到的是最小够用原则授权,保证了安全性。还可以一键启用Grafana监控和接入钉钉告警。
总之,MSE-Nacos的简单易用,高可用性,云上生态,可托管,可维护性,安全性等方面让人着迷,希望推进到业务测试使用起来。也推荐大家一起来测评。