常见的微服务架构:
1. dubbo:
zookeeper +dubbo + SpringMVC/SpringBoot
配套 通信方式:rpc
注册中心:zookeeper / redis
2.SpringCloud
:
全家桶+
轻松嵌入第三方组件
(Netflix)
配套 通信方式:http restful
注册中心:eruka
配置中心:config
断 路 器:hystrix
网关:zuul
分布式追踪系统:sleuth + zipkin
3.SpringCloud Alibaba
1.什么是Nacos?
nacos是
spring cloud alibaba
生态中非常重要的一个组件,它有两个作用:
- 注册与发现中心;
- 配置中心
nacos有注册中心的作用,我们常见的配置中心还有zk和eureka
微服务 CAP 原则:1 、 C(consistency): 一致性,同一时刻的同一请求的实例返回结果相同,属于强一致性性,也就是说,在集群环境中,对外提供的服务信息是完全一致的,但是在效率上面可能会有一定的损耗;2 、 A(availability): 可用性,所有实例的读写请求在一定的时间内可以得到正确的响应,它是弱一致性,可能在极短的时间内,不同实例获取到的信息是不一致的,但是服务可用并且最终数据是一致的;3 、 P(Partition tolerance): 分区容错性,在网络异常的情况下,仍旧能够提供正常的响应,这是在微服务系统中必须要保证的;
nacos在启动时,默认是
AP
模式,可以通过指令将
nacos
变为
CP
模式,在我们经常使用的微服务中,我们是选择使用AP
模式的,此时的所有实例都属于临时实例。临时实例和持久实例最显著的区别就是在健康检查发现服务有问题时,持久实例被标注为不健康,而临时实例会直接剔除。
2.nacos基本使用
nacos大体分为两部分:
nacos
服务端和
nacos
客户端,首先是
nacos
服务端 ,这一部分是不需要做任何改动,直接启动服务即可。
下载:
启动:
方式一:
默认以集群的方式启动
方式二:windows命令启动 (后缀standalone指的是以单例的方式进行启动)
.\startup.cmd -m standalone
访问:http://localhost:8848/nacos
开启后默认账号密码均为nacos,即可访问服务
3.创建nacos客户端
idea 创建springboot项目,引入jar包。
<spring-cloud-alibaba-version>2.1.3.RELEASE</spring-cloud-alibaba-version>
<!--引入nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${spring-cloud-alibaba-version}</version>
</dependency>
启动类添加注解
// nacos使用的注解
@EnableDiscoveryClient
application.yml
配置
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #服务地址(默认端口号为8848)
application:
name: cloud-user-provider #服务名
注意:版本对应问题
4.nacos集群配置
Nacos集群默认最小要有三个节点,而且三个节点的配置中心的数据都需要存储在
MySQL
数据库中。
在mysql
中创建数据库
nacos
,并在
nacos
的
conf
目录下找到
nacos-mysql.sql
文件导入数据库
修改
application.properties
文件,打开数据库连接并修改连接信息
在
conf
目录下,修改文件名
cluster.conf.example
为
cluster.conf
IP(
可使用
ipconfig
查看自己的
IP
地址
)+
端口号
注意:端口号不要连续,如
8081
,
8082
,
8083
。连续端口会报错
启动(三个):
启动后在集群管理即可查看:
5.nacos负载均衡
nacos实现负载均衡是通过内置的 Ribbon 实现的。默认的负载均衡策略是使用的 Ribbon 中的默认策略 —轮询(我的端口号为3333)。
负载均衡实现前提,服务名相同
server:
port: 8881
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:3333 #服务地址(默认端口号为8848)
application:
name: cloud-user-provider #服务名
dubbo:
application:
name: cloud-user-provider
scan:
base-packages: com.hz.service.impl #扫包
protocol:
# 协议名称
name: dubbo
port: -1
#注册中心
registry:
#注册中心地址列表,同一集群内的多个地址用逗号分隔
address: nacos://127.0.0.1:3333
6.nacos配置中心
nacos同
spring-cloud-config
一样,可以作为一个配置中心,统一的来管理配置,可以配置多套环境, 各个微服务可以按需到nacos
配置中心拉取相关配置,
且支持动态刷新
@RefreshScope
新建配置:
idea新建项目,引 jar 包,
<!--为了测试使用spring注解引入-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>${spring-cloud-alibaba-version}</version>
</dependency>
<!--nacos配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${spring-cloud-alibaba-version}</version>
</dependency>
创建bootstrap.yml
application.yml
中添加
注意:使用nacos 作为配置中心时,需要创建一个 bootstrap.yaml 和 application.yaml 两个配置文件,bootstrap.yaml 的优先级 高于 application.yaml ,加载时实现加载 bootstrap.yaml 中的相关配置