SpringCloud 微服务nacos和eureka

Spring是微服务架构,是一种经过良好架构设计的分布式架构方案。

微服务架构有如下特性

单一:微服务拆分粒度小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发

面向服务:微服务对外暴漏业务接口

自己治理:独立团队,对立技术,独立数据,部署独立

隔离性强:服务调用做好隔离/容错/降级/避免出现级联问题

Eureka注册中心

提供者与消费者,提供者与消费者角色是相对的

服务提供者:一次业务中,被其它微服务调用的服务{提供接口给其它微服务}

服务消费者:一次业务中,调用其它的微服务服务{调用其它微服务提供的接口}

原理分析,服务调用中出现的问题,以及Eureka的作用:

消费者如何获取服务提供的具体信息

①服务提供者启动时向eureka注册自己的信息

②eureka保存这些信息

③消费者根据服务名称向eureka拉取提供者信息

如何有多个服务提供者?服务消费者利用负载均衡算法,从服务列表中挑选一个

消费者如何感知服务提供者健康状态?

①服务提供者会每隔30秒向eurekaServer发送心跳请求,报告健康状态

②eureka会更新记录服务列表信息,心跳不正常会剔除

③消费者可以拉去到更新的信息

Ribbon负载均衡

规则是一个叫IRule的接口来定义的,默认实现是ZoneAvoidanceRule,根据zone选择服务列表

然后进行轮询

加载策略

Ribbon采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长

而饥饿加载则会项目启动时创建,降低第一次访问的耗时,

可以通过配置开启饥饿加载:

ribbon:

eager-Load:

enabled:true # 开启饥饿加载

clients:userservice # 指定xuserservice这个服务饥饿加载

Nacos注册中心

1,在cloud 父工程中添加spring-cloud-alilbaba的管理依赖

2,注释掉原有的eureka的依赖

3,添加nacos的客户端依赖

4,配置文件,查看nacos控制台,默认的账户密码均为nacos

5,如果连接云服务器需要在配置安全组中配置放开8848端口。

spring:

application:

name: userservice # 服务名称

profile:

active: dev #开发环境,这里是dev

cloud

nacos:

server-addr: localhost:8848 # Nacos地址

config:

file-extension: yaml #文件后缀名

nacos配置自动刷新

修改nacos中的配置后,微服务中无需重启即可让配置生效,

也就是配置热更新。

一种是@Value注入的变量所在类上添加注解@RefreshScope

另一种是@ConfigurationProperties 注解代替@Value注解

Nacos集群搭建

  • 搭建数据库,初始化数据库表结构

nacos-mysql.sql是mysql数据库初始化脚本。

schema.sql是Derby 数据库初始化脚本。

Nacos默认数据存储在内嵌数据库Derby中,不属于生产可用的数据库。

官方推荐的最佳实践是使用带有主从的高可用数据库集群,这里我们以单点的数据库为例来讲解。

创建一个数据库,名为nacos,导入nacos中自带的mysql.sql

  • 配置Nacos

进入nacos的conf目录,修改配置文件cluster.conf.example,重命名为cluster.conf:

然后添加内容:

127.0.0.1:8845

127.0.0.1.8846

127.0.0.1.8847

然后修改application.properties文件,添加数据库配置

启动nacos
nginx反向代理
  • upstream nacos-cluster {

    server 127.0.0.1:8841;

    server 127.0.0.1:8842;

    server 127.0.0.1:8843;

    }

    server {

    listen 80;

    server_name localhost;

    location /nacos {

    proxy_pass http://nacos-cluster;

    }

    }

    服务配置文件中设置spring:

    cloud:

    nacos:

    server-addr: localhost:80 # Nacos地址

    Nacos与eureka的共同点

    都支持服务注册和服务拉取

    都支持服务提供者心跳方式做健康检测

    Nacos与Eureka的区别

    1.Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式

    2.临时实例心跳不正常会被剔除,非临时实例则不会被剔除

    3.Nacos支持服务列表变更的消息推送模式,服务列表更新更及时

    4.Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

相关推荐
code_slave(码畜)1 小时前
微服务架构落地:分库分表实战(下) —— 分布式主键、跨分片查询与分页聚合防坑
数据库·spring boot·分布式·spring cloud·微服务·架构·分库分表
萧瑟余晖2 小时前
Spring Cloud综合实战与架构选型详解
spring·spring cloud·架构
萧瑟余晖4 小时前
Spring Cloud Alibaba生态整合详解
spring·spring cloud·面试
每天一道题5 小时前
Kafka 为什么会重复消费?从 Producer ACK、Offset 到消息可靠性
后端·微服务
一级新生5 小时前
Dify 日常使用手册(小白版)
人工智能·docker·云原生·eureka·dify·ai工具
xixiaoyunya1 天前
Docker 常用命令与实战:从入门到部署一个简单应用
docker·容器·eureka
萧瑟余晖1 天前
Spring Cloud分布式事务与链路追踪详解
分布式·spring·spring cloud
ん贤1 天前
温习微服务基础知识
微服务·云原生·架构
pirateeee1 天前
在ubuntu中通过 docker 搭建 yocto 开发环境
ubuntu·docker·eureka
zzu123zsw1 天前
业务拆分后的治理深水区:解构企业级微服务六大核心设计模式与高可用落真实践
微服务·设计模式·架构·高可用·微服务架构设计