Nacos

聊聊nacos的ServerStatusManager

自闭症网瘾萝莉.ら 提交于 2019-12-09 11:50:48
序 本文主要研究一下nacos的ServerStatusManager ServerStatusManager nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/cluster/ServerStatusManager.java @Service public class ServerStatusManager { @Resource(name = "consistencyDelegate") private ConsistencyService consistencyService; @Autowired private SwitchDomain switchDomain; private ServerStatus serverStatus = ServerStatus.STARTING; @PostConstruct public void init() { GlobalExecutor.registerServerStatusUpdater(new ServerStatusUpdater()); } private void refreshServerStatus() { if (StringUtils.isNotBlank(switchDomain.getOverriddenServerStatus())) {

聊聊nacos的DelegateConsistencyServiceImpl

流过昼夜 提交于 2019-12-09 11:49:29
序 本文主要研究一下nacos的DelegateConsistencyServiceImpl ConsistencyService nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/consistency/ConsistencyService.java public interface ConsistencyService { /** * Put a data related to a key to Nacos cluster * * @param key key of data, this key should be globally unique * @param value value of data * @throws NacosException * @see */ void put(String key, Record value) throws NacosException; /** * Remove a data from Nacos cluster * * @param key key of data * @throws NacosException */ void remove(String key) throws NacosException; /** * Get a data from

聊聊nacos的DistroMapper

自闭症网瘾萝莉.ら 提交于 2019-12-09 10:34:24
序 本文主要研究一下nacos的DistroMapper ServerChangeListener nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/cluster/servers/ServerChangeListener.java public interface ServerChangeListener { /** * If member list changed, this method is invoked. * * @param servers servers after change */ void onChangeServerList(List<Server> servers); /** * If reachable member list changed, this method is invoked. * * @param healthyServer reachable servers after change */ void onChangeHealthyServerList(List<Server> healthyServer); } ServerChangeListener定义了onChangeServerList、onChangeHealthyServerList方法

聊聊nacos client的MetricsMonitor

荒凉一梦 提交于 2019-12-09 10:34:12
序 本文主要研究一下nacos client的MetricsMonitor MetricsMonitor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/monitor/MetricsMonitor.java public class MetricsMonitor { private static Gauge nacosMonitor = Gauge.build() .name("nacos_monitor").labelNames("module", "name") .help("nacos_monitor").register(); private static Histogram nacosClientRequestHistogram = Histogram.build().labelNames("module", "method", "url", "code") .name("nacos_client_request").help("nacos_client_request") .register(); public static Gauge.Child getServiceInfoMapSizeMonitor() { return nacosMonitor.labels("naming",

聊聊nacos config的RequestLogAspect

我是研究僧i 提交于 2019-12-09 10:34:00
序 本文主要研究一下nacos config的RequestLogAspect RequestLogAspect nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/aspect/RequestLogAspect.java @Aspect @Component public class RequestLogAspect { /** * publish config */ private static final String CLIENT_INTERFACE_PUBLISH_SINGLE_CONFIG = "execution(* com.alibaba.nacos.config.server.controller.ConfigController.publishConfig(..)) && args" + "(request,response,dataId,group,tenant,content,..)"; /** * get config */ private static final String CLIENT_INTERFACE_GET_CONFIG = "execution(* com.alibaba.nacos.config.server.controller

阿里巴巴是如何打通 CMDB,实现就近访问的?

匆匆过客 提交于 2019-12-07 18:54:13
CMDB在企业中,一般用于存放与机器设备、应用、服务等相关的元数据。当企业的机器及应用达到一定规模后就需要这样一个系统来存储和管理它们的元数据。有一些广泛使用的属性,例如机器的IP、主机名、机房、应用、region等,这些数据一般会在机器部署时录入到CMDB,运维或者监控平台会使用这些数据进行展示或者相关的运维操作。 在服务进行多机房或者多地域部署时,跨地域的服务访问往往延迟较高,一个城市内的机房间的典型网络延迟在1ms左右,而跨城市的网络延迟,例如上海到北京大概为30ms。此时自然而然的一个想法就是能不能让服务消费者和服务提供者进行同地域访问。 我们在集团内部的实践中,这样的需求是通过和CMDB打通来实现的。 Nacos 的服务发现组件中,对接CMDB,然后通过配置的访问规则,来实现服务消费者到服务提供者的同地域优先。 <div data-type="alignment" data-value="center" style="text-align:center"> <div data-type="p">图1 服务的同地域优先访问</div> </div> 这实际上就是一种负载均衡策略,在Nacos的规划中,丰富的服务端的可配置负载均衡策略是我们的重要发展方向,这与当前已有的注册中心产品不太一样。在设计如何在开源的场景中,支持就近访问的时候

聊聊nacos config的EventDispatcher

不想你离开。 提交于 2019-12-07 14:34:45
序 本文主要研究一下nacos config的EventDispatcher EventDispatcher nacos-1.1.3/config/src/main/java/com/alibaba/nacos/config/server/utils/event/EventDispatcher.java public class EventDispatcher { /** * add event listener */ static public void addEventListener(AbstractEventListener listener) { for (Class<? extends Event> type : listener.interest()) { getEntry(type).listeners.addIfAbsent(listener); } } /** * fire event, notify listeners. */ static public void fireEvent(Event event) { if (null == event) { throw new IllegalArgumentException(); } for (AbstractEventListener listener : getEntry(event.getClass())

Nacos搭建流程

廉价感情. 提交于 2019-12-07 08:13:28
要使用nacos,我们首先得下载它的服务端,下载地址 https://github.com/alibaba/nacos/releases 根据你的Spring Cloud Alibaba版本来下载需要使用的版本 我这里是tar.gz的,下载完成后,解压,进入bin目录 执行sh startup.sh -m standalone 通过docker安装nacos服务端 docker pull nacos/nacos-server:1.1.3 docker run -d --name nacos -p 8848:8848 --env MODE=standalone nacos/nacos-server:1.1.3 然后通过浏览器访问 http://127.0.0.1:8848/nacos/ 此时界面如图所示 输入账号nacos,密码nacos后,进入管理界面 搭建一个Spring Cloud Alibaba项目,在父项目中,Springboot版本2.1.7,SpringCloud版本Greenwich.SR2,SpringCloudAlibaba版本2.1.1.RELEASE <spring-cloud.version> Greenwich.SR2 </spring-cloud.version> <spring-cloud-alibaba.version> 2.1.1.RELEASE

Nacos搭建流程

非 Y 不嫁゛ 提交于 2019-12-06 16:52:07
要使用nacos,我们首先得下载它的服务端,下载地址 https://github.com/alibaba/nacos/releases 根据你的Spring Cloud Alibaba版本来下载需要使用的版本 我这里是tar.gz的,下载完成后,解压,进入bin目录 执行sh startup.sh -m standalone 然后通过浏览器访问 http://127.0.0.1:8848/nacos/ 此时界面如图所示 输入账号nacos,密码nacos后,进入管理界面 搭建一个Spring Cloud Alibaba项目,在父项目中,Springboot版本2.1.7,SpringCloud版本Greenwich.SR2,SpringCloudAlibaba版本2.1.1.RELEASE <spring-cloud.version> Greenwich.SR2 </spring-cloud.version> <spring-cloud-alibaba.version> 2.1.1.RELEASE </spring-cloud-alibaba.version> <dependencyManagement> <dependencies> <dependency> <groupId> org.springframework.cloud </groupId> <artifactId>

原创|ES广告倒排索引架构演进与优化

余生长醉 提交于 2019-12-06 08:39:53
回顾 之前分享了一篇文章,介绍我们的ES广告倒排索引的架构与优化,我就不介绍了,建议先去看下这篇文章,再回来看这篇,下面只放下之前的架构图 演进 采用 canal 监听 binlog 变更 原有架构是在代码中写 MQ 消息,然后 index_builder 消费消息,写入到两个索引中。但这种方式有个不足是不能覆盖所有的订单或创意变更,所以倒排索引中的数据有的时候和 DB 中是不一致的。同时代码维护起来也比较麻烦。后面我们就引入了阿里开源的框架 canal ,它可以监听 MySQL 的 binlog 的变更,然后把日志发到 Kafka 中, 这样我们只需要在 index_builder 这个工程中消费 Kafka 的消息就行了,省去了在 dsp_adinfo 中发消息。而且 binlog 的变更可以覆盖所有的变更操作。 项目由物理机迁移到云平台 之前 index_builder 部署在物理机上,且 builder 采用主备部署,通过争抢用 zookeeper 实现的分布式锁来决定谁是主,迁移到云平台后,就去掉了这种对主备部署的方式,因为云平台有自动修复的策略。 注意 我们部署的两个 builder 一个为 m 索引,一个为 f 索引,通过环境变量 dsp_index_name 区分是 m 索引 还是 f 索引。同时因为这两个 builder 都要消费 Kafka 的消息,但我们知道