越来越多的读者在和我交流关于Spring Cloud Alibaba的种种事宜,甚至于在一次面试中,一半时间都在聊这个话题。所以,本着对技术钻研的热情,对Spring Cloud Alibaba进行了一番研究。在这里,并不想高谈阔论,也不想预言未来,只是挑选了几个从阿里巴巴中间件团队内脱胎出来的开源组件,对于解决实际业务问题有所裨益。
现在,很明显的一个趋势就是:微服务。这个趋势的底层驱动力就来源于分布式系统的普及,而微服务的各个特性是如今大大小小的企业无法拒绝的诱惑。然后,用上了微服务的架构风格,用Spring Cloud,或者Dubbo搭了一套脚手架,就开始干起来了。
接下来,一众小公司画完了大饼之后,发现自己根本吃不下。这就是典型的落后劳动力与先进生产力的尖锐矛盾。这个时候,返璞归真的想法是不能有了,重构代价太大。
当然,哪里有问题,哪里就有商机。各大XX云厂商经过一系列包装之后,用“云原生(Cloud Native)”的新概念粉墨登场。Spring Cloud Alibaba就是其中之一。这个概念的一个核心价值就是:平滑上云,赋能运维。最明显的业务表象就是,会提供一套Open API,甚至是贴心的提供一个可视化控制台,傻瓜式的那种。
这是一颗耀眼的掌上明珠,迅速引起了我的注意。按照套路,分为两讲。其一讲述NACOS的功能特性,及其使用,再者就是更深入一步,看看大厂的攻城狮们写的代码。
本文所使用的版本是NACOS 1.0.0,由于此版本还是第一个NACOS正式版,NACOS正处在飞速发展阶段,本文的一些内容可能会不适用于以后的版本,请读者自行辨别。
NACOS解决两个核心问题:动态配置管理,服务注册发现。兼容性方面,除了支持自家的Dubbo,还对Spring Cloud,Kubernetes,Istio有所兼容。
简而言之,nacos与eureka的不同之处有三:后台老板、部署方式、功能。nacos是阿里的,eureka是奈飞的;nacos有自己的安装包,需要独立部署,eureka仅作为一个服务组件,引入jar包即可;nacos=eureka+config,它既是注册中心,也是配置中心。
对照以上的全景图,现在的NACOS还有一段距离,但是并不遥远。至此,不说道说道Eureka,都有点过意不去了。我用下来的体验是:NACOS完全可以替代Eureka了。江山代有才人出,这是必然的结果。在“云原生”的大背景之下,NACOS顺利成章的推出了Console,将触角进一步延伸至服务的精细化管理。当然,不排除Eureka也在憋大招。
再说说动态配置的特性。当然,NACOS略胜一筹,可替代Spring Cloud Config了。原先在Git/SVN上托管的配置项,都可以在Console上统一管理了。如果想先睹为快,可以接下着往下读。如果想再多了解一些,可以直接跳过这部分,阅读下一个小节。可以把NACOS理解成是一个中心化的服务,这在阿里系的架构中屡见不鲜。所以,必须得先启动这个服务。
有两个办法:其一是直接clone源码,使用maven打包。第二个办法是直接下载GitHub release出来的压缩包。推荐后者。
方法1:主要运行以下命令:
linux环境下:
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos clean install -U
经过一段时间的构建过程,在./distribution/target目录下有我们想要的压缩包。
方法2:进入https://github.com/alibaba/nacos/releases,找到压缩包,下载。为了演示,我们先用单机模式启动。
Windows环境下:
在bin目录的地址栏输入cmd即可进入bin目录
startup.cmd -m standalone
启动nacos需要正确配置java环境变量,启动后界面如下:
一切就绪的话,访问http://127.0.0.1:8848/nacos/index.html,使用nacos/nacos登录。接下来,随便逛逛。
为了避免在Console中迷失自我,有必要先阐述几个重要的概念。
这张图很重要。表述了namespace、group和service/dataId的包含关系。
NACOS给的最佳实践表明,最外层的namespace是可以用于区分部署环境的,比如test,uat,product等。同时,也有一个商业利用价值:多租户。以namespace为单位,给用户开辟使用空间。其它两个领域模型不用多解释了,见名知意。其目的也非常明显,就是为了能够逻辑上区分两个目标对象。
默认情况下,namespace=public,group=DEFAULT_GROUP。明白了这个数据模型后,可以稍微玩转一下Console了,比如新建若干个namespace:
namespace顺利创建成功后,会在每个一级页面看到由namespace组成的TAB,可以任意切换namespace,对其下的数据进行操作。比如下图的配置列表:
当然,还有众多的领域模型,但是跟这一讲的关系不大了,下一讲深入源码的时候再进行剖析。接下来会创建一个Demo工程,用于构建基于NACOS的config server和discovery server。在进行下一章节之前,强烈建议先创建一个Spring Boot样板工程,可以不做任何配置,不添加任何一段代码。
当然,为了让这一讲的内容更具实战意义,我不会照搬官网的Demo,本文所作的Demo工程也可以从GitHub上克隆得到。请提前准备好,接下来的内容只会挑重点讲解,侧重点不会在如何搭建工程。
我们创建个项目来注册到这个nacos,配置如下;新加入的依赖包第一次没有的话下载需要一些时间,请耐心等待!
4.0.0
com.wlf
spring-cloud-alibaba-provider
0.0.1-SNAPSHOT
jar
org.springframework.boot
spring-boot-starter-parent
2.1.7.RELEASE
org.springframework.cloud
spring-cloud-dependencies
Greenwich.SR2
pom
import
org.springframework.cloud
spring-cloud-alibaba-dependencies
0.9.0.RELEASE
pom
import
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-maven-plugin
配置文件如下:
#端口
#server.port=8282
#应用名
spring.application.name=lxytrans-provider
#注册中心
spring.cloud.nacos.discovery.server-addr=localhost:8848
项目编译OK后启动main方法启动项目,进入nacos主页面找到【服务管理】-【服务列表】,可以看到我们的注册中心已经出现了一个注册过的服务,服务名就是我们配置文件里配置的项目名
我们的main方法还提供了几个RestApi接口,我们也可以试一下
package com.xu.nacos;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@EnableDiscoveryClient
@SpringBootApplication
public class NacosApplication {
public static void main(String[] args) {
SpringApplication.run(NacosApplication.class, args);
}
@Slf4j
@RestController
static class TestController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
@GetMapping("/hey")
public String hey() throws InterruptedException {
Thread.sleep(2000);
return "hey";
}
}
}
浏览器中输入地址 http://localhost:8080//hello 可以成功访问到
这里nacos初步体验就到了这里,后续更多关于nacos技术实战应用我们再及时补充,谢谢观看