Nacos

Nacos

作用:

实现分布式服务注册与发现/分布式配置中心

官方文档:

https://nacos.io/zh-cn/docs/quick-start.html

Nacos下载:

链接:https://pan.baidu.com/s/1rQjQ9NWDTdGSydyIQC8eTQ
提取码:9vc0

  • 也可以去官方文档查看版本下载,使用入门也可参考官方文档
整合SpringCloud:

Maven依赖:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
    </parent>
    <dependencies>
        <!--  springboot 整合web组件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>0.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-openfeign</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>
    </dependencies>
服务注册,加载nacos配置文件:

bootstrap.yml:

  • 需要注意服务名称不能用下划线_
spring:
  application:
    ###服务的名称
    name: meitemayikt-nacos
  cloud:
    nacos:
      discovery:
        ###nacos注册地址
        server-addr: 127.0.0.1:8848
        enabled: true
      config:
        ###配置中心连接地址
        server-addr: 127.0.0.1:8848
        ###分组
        group: DEFAULT_GROUP
        ###类型
        file-extension: properties
#后缀
#  profiles:
#    active: prd
#server:
#  port: 8090
服务调用发现(openFeign):

定义接口MemberServiceFeign:

//value值为注册的服务名称
@FeignClient("meitemayikt-nacos")
public interface MemberServiceFeign {

    /**
     * 提供我们发布的接口
     *
     * @param userId
     * @return
     */
    @GetMapping("/getUser")
    String getUser(@RequestParam("userId") Integer userId);
}

启动类开启注解:@EnableFeignClients
注入直接使用:

@Autowired
    private MemberServiceFeign memberServiceFeign;
实时更新nacos配置信息启动类添加注解:@RefreshScope
Nacos持久化至本地数据库,集群搭建:

Nacos文件config目录下文件的作用:

  • cluster.conf:集群ip配置
  • nacos-mysql.sql:nacos生成本地数据库sql语句
  • application.properties:nacos配置文件(修改端口,数据库连接等)
    数据库连接配置:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=admin

本地生成nacosConfig数据库,修改相应配置文件即可实现效果

Linux系统启动nacos默认为集群模式,windows默认为单体模式。

windows集群模式启动:   .\startup.cmd -m cluster
linux单体模式启动:   .\startup.cmd –m standalone

使用Nginx对nacos做集群

nginx下载:
链接:https://pan.baidu.com/s/101fhfHjHBF_zzs4V237Enw
提取码:gpf5

修改nginx.conf
http {
    include       mime.types;
    default_type  application/octet-stream;
    upstream mayiktnacosadds {
        server 127.0.0.1:8848;
        server 127.0.0.1:8849;
        server 127.0.0.1:8850;
        }
    server {
        listen       80;
        server_name  nacos.mayikt.com;
        location /nacos/ {
           proxy_pass http://mayiktnacosadds/nacos/;
        }
}

Nacos对比Zookeeper、Eureka区别:

Eureka:AP偏向于服务可用性
Zookeeper:CP偏向于服务强一致性
Nacos:默认AP,也可修改为CP

$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP

相同点、不同点、中心化思想
三者都可以实现分布式注册中心框架
不同点:
Zookeeper采用CP保证数据的一致性的问题,原理采用(ZAP原子广播协议),当我们ZK领导者因为某种情况下部分节点出现了故障,会自动重新实现选举新的领导角色,整个选举的过程中为了保证数据一致性的问题,客户端暂时无法使用我们的Zookeeper,那么这以为着
整个微服务无法实现通讯。
Eureka采用AP设计思想实现分布式注册中心,完全去中心化、每个节点都是相等,采用你中有我、我中有你相互注册设计思想, 只要最后有一台Eure

分布式系统一致性算法

Zookeeper基于ZAP协议实现保证每个节点数据同步的问题,中心化思想集群模式。
分为领导和跟随者角色。
Eureka基于AP模式实现注册中心,去中心化的思想、每个节点都是对等的,采用你中有我,我中有你的形式实现注册中心。

常见分布式一致性算法:
1.ZAP协议(底层就是基于Paxos实现),核心底层基于2PC两阶段提交协议实现。
2.Nacos中集群保证一致性算法采ratf协议模式,采用心跳机制实现选举的。

Ratf整个底层实现原理:

在Raft协议中分为的角色
1.状态:分为三种 跟随者、竞选者、领导
2.大多数: >n/2+1
3.任期:每次选举一个新的领导角色 任期都会增加。

默认情况下选举的过程:
1.默认的情况下每个节点都是为跟随者角色
2.每个节点随机生成一个选举的超时时间 大概分为100-300ms,在这个超时时间内必须要等待。
3.超时时间过后,当前节点的状态由跟随者变为竞选者角色,会给其他的节点发出选举的投票的通知,只要该竞选者有超过半数以上即可选为领导角色。
核心的设计原理其实就是靠的 谁超时时间最短谁就有非常大的概率为领导角色。

故障的重新实现选举:
1.如果我们跟随者节点不能够及时的收到领导角色消息,那么这时候跟随者就会将当前自己的状态由跟随者变为竞选者角色,会给其他的节点发出选举的投票的通知,只要该竞选者有超过半数以上即可选为领导角色。

疑问:
是否可能会产生两个同时的竞选者呢,同时实现拉票呢?
注意当我们的集群节点总数,如果是奇数情况下 就算遇到了该问题也不用担心。
当我们的节点是为偶数的情况下,可能会存在该问题,如果两个竞选者获取的票数相等的情况下,开始重置竞选的超时时间,一直到谁的票数最多谁就为领导。

如何实现日志的复制
1.所有的写的请求都是统一的交给我们的领导角色完成,写入该对应的日志,标记该日志为被提交状态。
2.为了提交该日志,领导角色就会将该日志以心跳的形式发送给其他的跟随者节点,只要超过跟随者节点写入该日志,则直接通知其他的跟随者节点同步该数据,这个过程称做为日志复制的过程。

以上内容来自梅特教育-蚂蚁课堂。改编

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值