
1.阿里集团内部孵化期
2.开源&商业化探索尝试
3.三位一体融合发展

Cloud Native


在每年阿里集团的双十一大促中,配置中心也是一个不可或缺的基础组件,包括前期热点商品推送,大促氛围活动标调整,大促期间数据库主备切换开关,核心功能降级,各类名单调整,预案限流调整,各种基础中间件的核心参数动态,大促结束后各类预案的恢复,大促态到日常态的状态切换,都是配置中心所支持的场景。
1.配置中心原理

业务应用:nacos 的使用方,通过 nacos-client 实现配置的发布,查询,监听回调的等基础操作。
负载均衡 SLB:与后端的 nacos 服务节点进行交互的地址,在用户自建或者调试的场景下,也可以采用直连 IP 或者地址服务器 endpoint 的模式。
Nacos Server:nacos 服务端存储当前集群全量配置的内存和磁盘缓存,集群节点之间进行水平通知配置变更事件,和后端数据库进行对账保证数据一致性。
Nacos 控制台:管理控制台,可以进行配置查看,配置发布,监听查询等运维功能。商业化 Nacos 支持推送轨迹,监控,事件中心等高级功能。
数据库:配置持久化存储的数据库,一般是主备库架构进行容灾。
用户在接入 nacos 主要有两种模式,一种是通过原生 nacos-client 的 ConfigService 组件的基础 API 接入,第二种是通过 Spring 框架或者其他类似框架组件接入,包括 SpringCloud 和 SpringBoot 等。
2.基础 API 接入
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, "127.0.0.1");
properties.put(PropertyKeyConst.NAMESPACE, "namespaceId");
final ConfigService configService = new NacosConfigService(properties);
final String dataId = "my-config-dataId";
final String group = "group";
//初始化查询配置,并添加监听器,监听后续变更
String config = configService.getConfigAndSignListener(dataId, group, 3000L, new Listener() {
@Override
public Executor getExecutor() {
//如果回调逻辑比较耗时,建议自定义线程池,以免堵塞推送回调线程
return null;
}
@Override
public void receiveConfigInfo(String configInfo) {
handleBusinessLogic(configInfo);
}
});
//初始化业务逻辑.
handleBusinessLogic(config);
复制
3.SpringCloud 接入
复制
spring:
application:
name: nacos-config-demo
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: namespaceid-对应nacos服务端的命名空间ID,public填空
group: group-demo
file-extension: yml
refresh-enabled: true
accessKey: xxx
secretKey: xxx
复制

复制
@Configuration
@RefreshScope
public class ConfigBean {
@Value("${cache.useLocalCache:false}")
private boolean useLocalCache;
public boolean isUseLocalCache() {
return useLocalCache;
}
}
复制
通过 Value 注解可以实现属性值的自动更新,如果希望在配置内容变更时触发回调方法执行。在SpringCloud也可以通过NacosConfigManager#getConfigService获取 springboot 内置的 NacosConfigService 进行基础 API 操作。
更多的接入指引可参照官方文档:
Spring: https://nacos.io/zh-cn/docs/quick-start-spring.html Spring Boot: https://nacos.io/zh-cn/docs/quick-start-spring-boot.html Spring Cloud:
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
4.日志自助排查

add-listener: 添加监听,只有添加了对配置的监听,才能收到配置变更推送
server-push:客户端已经收到某个配置的变更通知
data-received:收到变更通知后,客户端向服务端查询到了最新的配置内容
notify-listener: nacos回调了的监听器Listener,可以看到回调的配置内容MD5。
notify-ok: 回调执行正常,可以查看执行回调的具体监听器 Listener,执行耗时。
notify-error:监听器执行失败,对业务来说可能业务不符合预期,需要根据异常排查原因。
如果有 notify-listener 日志,但是没有 notify-ok 日志,则可能是监听器执行堵塞。如果想确认回调线程是否阻塞,可以通过 jstack 命令查看线程堆栈,jstack {pid} | grep -20 'nacos' ,通过堆栈判断导致线程堵塞的原因,对应解决即可。
5.使用须知
小配置
低频变更
低频查询
最终一致性
幂等性
轻回调
配置超过 1M,频繁变更导致配置中心数据库可用性下降
配置频繁变更,导致对客户端造成推送风暴,造成客户端应用 cpu,gc 压力。
客户端在流量链路中调用 getConfig 方法查询配置,业务请求上涨时,配置中心服务端压力上涨,可用性下降
回调方法中处理远程 RPC,IO 操作,锁等待等造成回调方法执行堵塞,进而堵塞其他配置变更推送,影响业务
Cloud Native
1.客户端容灾
▧容灾目录
容灾目录地址:
public 命名空间: {user.home}/nacos/config/{servername}_nacos/data/config-data 非 public 命名空间: {user.home}/nacos/config/{servername}_nacos/data/config-data-tenant
▧本地缓存
缓存目录地址:
public 命名空间: {user.home}/nacos/config/{servername}_nacos/snapshot 非 public 命名空间: {user.home}/nacos/config/{servername}_nacos/snapshot-tenant
2.服务端反脆弱

Cloud Native
微服务引擎 MSE 是一个面向业界主流开源微服务框架 SpringCloud、Dubbo 以及多语言等一站式微服务平台,支持服务网格生态,标准、灵活、精准的控制流量,帮助提升系统整体的可用性,并且 MSE 在高可用、性能、安全方面大量增强,让您的应用获得企业级的保障。


自建 Nacos 迁移 Mse Nacos 详见: https://help.aliyun.com/document_detail/460944.html
ACM 迁移 MSE Nacos 详见: https://help.aliyun.com/document_detail/312705.html
Applo 等迁移 MSE Nacos 详见: https://help.aliyun.com/document_detail/460717.html
Cloud Native