zoukankan      html  css  js  c++  java
  • Nacos v0.7.0:对接CMDB,实现基于标签的服务发现能力

    13_54_50__11_21_2018
    Nacos近期发布了0.7.0版本,该版本支持对接第三方CMDB获取CMDB数据、使用Selector机制来配置服务的路由类型、支持单机模式使用MySQL数据库、上线Node.js客户端,并修复了一些bug。

    -> “阿里巴巴中间件”微信公众号后台发送 “Nacos”,了解更多项目信息。

    对接CMDB实现就近访问

    image.png | center | 752x554

    在服务进行多机房或者多地域部署时,跨地域的服务访问往往延迟较高,一个城市内的机房间的典型网络延迟在1ms左右,而跨城市的网络延迟,例如上海到北京大概为30ms。此时自然而然的一个想法就是能不能让服务消费者和服务提供者进行同地域访问。

    Nacos定义了一个SPI接口,里面包含了与第三方CMDB约定的一些方法。用户依照约定实现了相应的SPI接口后,将实现打成jar包放置到Nacos安装目录下,重启Nacos即可让Nacos与CMDB的数据打通。

    CMDB插件开发流程

    参考 https://github.com/nacos-group/nacos-examples,这里已经给出了一个示例plugin实现。
    具体步骤如下:

    1. 新建一个maven工程,引入依赖nacos-api:

              <dependency>
                  <groupId>com.alibaba.nacos</groupId>
                  <artifactId>nacos-api</artifactId>
                  <version>0.7.0</version>
              </dependency>
    2. 引入打包插件:

                  <plugin>
                      <groupId>org.apache.maven.plugins</groupId>
                      <artifactId>maven-assembly-plugin</artifactId>
                      <configuration>
                          <descriptorRefs>
                              <descriptorRef>jar-with-dependencies</descriptorRef>
                          </descriptorRefs>
                      </configuration>
                  </plugin>
    3. 定义实现类,继承com.alibaba.nacos.api.cmdb.CmdbService,并实现相关方法。

    image.png | center | 724x144

    1. 在src/main/resource/目录下新建目录:META-INF/services

    image.png | center | 724x183

    1. 在src/main/resources/META-INF/services目录下新建文件com.alibaba.nacos.api.cmdb.CmdbService,并在文件里将第三步中创建的实现类全名写入该文件:

    image.png | left | 719x136

    1. 代码自测完成后,执行命令进行打包:

      mvn package assembly:single -Dmaven.test.skip=true
    2. 将target目录下的包含依赖的jar包上传到nacos CMDB插件目录:

      {nacos.home}/plugins/cmdb
    3. 在nacos的application.properties里打开加载插件开关:

      nacos.cmdb.loadDataAtStart=true
    4. 重启nacos Server,即可加载到您实现的nacos-cmdb插件获取您的CMDB数据。

    配置服务路由类型

    在控制台上,对服务进行编辑,使用同机房优先策略:

    image.png | center | 752x615

    这样配置后,所有访问该服务的消费者,都会实现同机房优先策略。

    支持单机模式使用MySQL数据库

    在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:

    安装数据库,版本要求:5.6.5+

    初始化mysql数据库,数据库初始化文件:nacos-mysql.sql

    修改application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。

    spring.datasource.platform=mysql
    
    db.num=2
    db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
    db.url.1=jdbc:mysql://11.163.152.9:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
    db.user=nacos_devtest
    db.password=youdontknow

    再以单机模式启动nacos

    sh startup.sh -m standalone

    nacos所有写嵌入式数据库的数据都写到了mysql

    支持Node.js客户端

    在 Java 版本客户端推出之后,我们一直思考多语言版本,在对多语言的调研中,Node.js 的呼声是最高的,不少 Node.js 开发者都期盼着有原生的 Node.js 客户端可以使用。
    如今我们推出了第一版客户端,完成了常见的增删改查功能,借由此,向多语言化迈出了第一步。

    以nacos-config为例,下面是一个简单的接入说明,具体接入可以参考:https://github.com/nacos-group/nacos-sdk-nodejs

    import {NacosConfigClient} from 'nacos';   // ts
    const NacosConfigClient = require('nacos').NacosConfigClient; // js
    
    // 下面的代码是寻址模式
    const configClient = new NacosConfigClient({
      endpoint: 'acm.aliyun.com', // acm 控制台查看
      namespace: '***************', // acm 控制台查看
      accessKey: '***************', // acm 控制台查看
      secretKey: '***************', // acm 控制台查看
      requestTimeout: 6000, // 请求超时时间,默认6s
    });
    
    // 下面的代码是直连模式
    const configClient = new NacosConfigClient({
      serverAddr: '127.0.0.1:8848', // 对端的 ip 和端口,其他参数同寻址模式
    });
    
    // 主动拉取配置
    const content= await configClient.getConfig('test', 'DEFAULT_GROUP');
    console.log('getConfig = ',content);

    蓬勃发展的 Nacos 社区

    DISS is cheap, show me your hand
    比吐槽更重要的是搭把手,参与社区一起发展Nacos

    • 作为用户关注和加入 Nacos 社区

    Nacos 社区正在蓬勃发展,截止到发文为止,Nacos 短短几个月已经有5个微信群,其中4个已满员,1个QQ群,1个钉钉群,关注 Nacos 的社区人数已经近3000人,在 Nacos 群里跟 “道(基)友” 切磋技术,交流经验,招聘交友,抢抢红包...不亦乐乎。

    要加入 Nacos 微信社区,你可以通过扫下面的__“超哥”__的微信二维码,让__“超哥”__ 帮你拉入 “Nacos社区微信交流群”

    Screen Shot 2018-06-27 at 13.39.09.png | left

    • 作为代码贡献者加入 Nacos 社区

    从Nacos用户发展而成贡献者顺理成章,而Nacos开发团队也确实在日趋壮大,从开始的只有4个代码contributor发展到目前的24个,随着__阿里巴巴__其他团队成员如 @小马哥 等人,__虎牙直播__的 @张波 @周健 团队等人,nacos-docker-k8s 贡献者 @张龙__,前端的主要贡献者饿了么 __@王彦民__,Spring Cloud中文社区创立者 __@许进 等的陆续加入,相信未来Nacos社区的力量未来会越来越强大。

    而社区也正在计划在合适的时机上,将在Nacos官网 nacos.io 中添加团队介绍页,将大家正式公布于众,欢迎大家加入Nacos社区,贡献社区。用Apache的话说,__“社区高于代码”!__

    屏幕快照 2018-11-20 17.04.45.png | left

    新人时刻 - "什么是Nacos?"

    还不知道什么是Nacos? 没关系,在github上star一下跟程序猿兄弟打个招呼吧!!

    Nacos 是阿里巴巴于7月份新开源的项目,Nacos的主要愿景是期望通过提供易用的 动态服务发现服务配置管理服务共享与管理 的基础设施,帮助用户在云原生时代更好的构建、交付、管理自己的微服务平台。

    Screen Shot 2018-07-24 at 19.27.28.png | left

    github项目地址在 这里

    更多与 Nacos 相关的开源项目信息

  • 相关阅读:
    【SQL】在含有GROUP BY的SELECT语句中如何显示COUNT()为0的结果
    【SQL】SQL分页查询总结
    开篇
    Android Native Crash 排查思路
    jmeter+ant+jenkins接口自动化测试框架
    为何推荐使用线程池而不是显式创建线程原因之一—至少让线程有范围和限制
    quartz 中的线程池
    select in 查询结果无顺序及解决办法
    Druid 数据库连接池如何根据url加载Driver
    java 线程池参数
  • 原文地址:https://www.cnblogs.com/zhaowei121/p/10190978.html
Copyright © 2011-2022 走看看