文章目录
Spring Cloud Alibaba Nacos
1. Spring Cloud Alibaba简介
SpringCloud Netflix进入维护模式,意味着不再开发新的组件,这就出现了SpringCloud Alibaba这个替代品,SpringCloud Alibaba能实现以下功能,也可以参考SpringCloud Alibaba官网:
功能 | 具体说明 |
---|---|
服务限流与降级 | 默认支持Servlet、Feign、RestTemplate、Dubbo和RocketMQ限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级Metrics监控。 |
服务注册与发现 | 适配SpringCloud服务注册与发现标准,默认集成了Ribbon的支持。 |
分布式配置管理 | 支持分布式系统中的外部化配置,配置更改时自动刷新。 |
消息驱动能力 | 基于SpringCloud Stream为微服务应用构建消息驱动鞥能力。 |
阿里云对象存储 | 阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。 |
分布式任务调度 | 提供秒级、精准、高可靠、高可用的定时(基于Cron表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有Worker上执行。 |
使用SpringCloud Alibaba需要在POM文件中引入其依赖:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2. Nacos作为服务注册中心
1. Nacos简介
“Nacos”,前四个字母分别问Naming和Configuration的前两个字母,最后的s为Service,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台,说白了就是注册中心+配置中心的组合,等价于SpringCloud之前的Eureka+Config+Bus,所以Nacos可以替代Eureka做服务中心,可以替代Config做配置中心。
2. Nacos安装与运行
在Nacos官网下载地址中下载Nacos,在安装Nacos前需要本地Java8和Maven的环境已经准备好,然后下载其压缩包:
解压该压缩文件后直接运行在bin目录下的startup.cmd启动Nacos:
然后访问 http://localhost:8848/nacos/ 进入Nacos,其默认的账号密码都是nacos,登录成功后即可看到如下界面:
在之前学习服务注册中心的时候讲过CAP理论,即
C | A | P |
---|---|---|
Consistency | Available | Partition tolerance |
强一致性 | 可用性 | 分区容错性 |
CAP原则又称CAP定理,指的是在一个分布式系统中,一致性、可用性、分区容错性。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。在分布式架构中,P永远要求被保证,所以当前的分布式架构只有AP和CP两种。Nacos属于AP模型,再次对比这些服务注册中心:
服务注册与发现框架 | CAP模型 | 控制台管理 | 社区活跃度 |
---|---|---|---|
Eureka | AP | 支持 | 低(2.x版本历史问题) |
Zookeeper | CP | 不支持 | 中 |
Consul | CP | 支持 | 高 |
Nacos | AP(事实上也可以支持CP) | 支持 | 高 |
据说Nacos在阿里巴巴内部有超过10万的实例运行,已经过了类似双十一等各种大型流量的考验。。。
3. Nacos作为服务注册中心
1. 基于Nacos的服务提供者
新建Module:cloudalibaba-provider-payment9002作为服务提供方微服务。当然为了实现Nacos的负载均衡,使nacos-payment-provider服务集群化,我们同事也仿照9002搭建一个9003微服务。
然后在工程的父POM中引入依赖1. Spring Cloud Alibaba简介中引入的依赖的前提下,在该模块的POM引入依赖Nacos服务注册发现的依赖:
<!--SpringCloud ailibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
然后添加其配置文件application.yml:
server:
port: 9002
spring:
application:
name: nacos-payment-provider # 微服务名称
cloud:
nacos:
discovery:
server-addr: localh