微服务01-初识微服务,了解注册中心Eureka与Nacos及二者的区别

本文章来自黑马微服务教程笔记,如有侵权请告知删除

一、关于微服务

分布式架构优势

  • 耦合度低

  • 有利于服务拓展升级

分布式架构要考虑的问题

  • 服务拆分粒度如何

  • 服务集群如何实现远程调用

  • 服务集群地址如何维护

  • 服务健康状态如何感知

微服务:一种经过良好设计的分布式架构方案

  • 单一职责:微服务拆分粒度更小,每个微服务对应唯一的业务能力,做到单一职责避免重复开发
  • 面向服务:微服务对外暴露业务接口
  • 自治:团队独立,技术独立,数据独立,部署独立
  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

微服务结构

  • 注册中心:拉取或注册服务信息

  • 配置中心:拉取配置信息

  • 服务网关:请求路由负载均衡

微服务技术对比

微服务01-初识微服务,了解注册中心Eureka与Nacos及二者的区别_第1张图片

认识SpringCloud

集成了各种微服务组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。

二、服务拆分及远程调用

服务拆分注意事项:

  1. 不同微服务,不要重复开发相同业务
  2. 微服务数据独立,不要访问其他微服务的数据库
  3. 微服务可以将自己的部分业务暴露为接口,供其他微服务调用

远程调用方式分析

  • 基于Rest Template发起的http请求实现远程调用

服务调用关系:

  • 服务提供者:一次业务中,被其它微服务调用的服务。(提供接口给其它微服务)
  • 服务消费者:一次业务中,调用其它微服务的服务。(调用其它微服务提供的接口)

三、Eureka注册中心

  1. 消费者该如何获取服务提供者具体信息?

    • 服务提供者启动时向Eureka注册自己的信息
    • Eureka保存这些信息
    • 消费者根据服务名称向Eureka拉取提供者信息
  2. 如果有多个服务提供者,消费者该如何选择?

    • 服务消费者利用负载均衡算法,从服务列表中挑选一个
  3. 消费者如何感知服务提供者健康状态?

    • 服务提供者会每隔30秒向Eureka Server发送心跳请求,报告健康状态
    • Eureka会更新记录服务列表信息,心跳不正常会被剔除,消费者就可以拉取到最新的信息

Eureka实践

  1. 搭建EurekaServer

    • 引入eureka-server依赖
    • 添加@EnableEurekaServer注解
    • 在application.yml中配置eureka地址
  2. 服务注册

    • 引入eureka-client依赖
    • 在application.yml中配置eureka地址
  3. 服务发现

    • 引入eureka-client依赖
    • 在application.yml中配置eureka地址
    • 给RestTemplate添加@LoadBalanced注解
    • 用服务提供者的服务名称代替IP地址进行远程调用

四、Ribbon负载均衡

微服务01-初识微服务,了解注册中心Eureka与Nacos及二者的区别_第2张图片

  1. Ribbon负载均衡规则

    • 规则接口是IRule

    • 默认实现是ZoneAvoidanceRule,根据zone选择服务列表,然后轮询

  2. 负载均衡自定义方式

    • 代码方式:配置灵活,但修改时需要重新打包发布
    • 配置方式:直观,方便,无需重新打包发布,但是无法做全局配置
  3. 饥饿加载

    • 开启饥饿加载
    • 指定饥饿加载的微服务名称

五、 Nacos注册中心

实践步骤

  1. Nacos服务搭建

​ ①下载安装包

​ ②解压

​ ③在bin目录下运行指令:startup.cmd -m standalone

  1. Nacos服务注册或发现

​ ①引入nacos.discovery依赖

​ ②配置nacos地址spring.cloud.nacos.server-addr

Nacos服务分级模型

  1. Nacos服务分级存储模型

    • 一级是服务,例如userservice

    • 二级是集群,例如杭州或上海

    • 三级是实例,例如杭州机房的某台部署了userservice的服务器

  2. 如何设置实例的集群属性

    • 修改application.yml文件,添加spring.cloud.nacos.discovery.cluster-name属性即可

Nacos集群负载均衡

NacosRule负载均衡策略:

  • 优先选择同集群服务实例列表

  • 本地集群找不到提供者,才去其它集群寻找,并且会报警告

  • 确定了可用实例列表后,再采用随机负载均衡挑选实例

Nacos加权负载均衡

实例的权重控制:

  • Nacos控制台可以设置实例的权重值,0~1之间

  • 同集群内的多个实例,权重越高被访问的频率越高

  • 权重设置为0则完全不会被访问

环境隔离 - namespace

Nacos中服务存储和数据存储的最外层称作namespace,用来做最外层隔离。

  • 每个namespace都有唯一id

  • 服务设置namespace时要写id而不是名称

  • 不同namespace下的服务互相不可见

六、Nacos与Eureka

共同点

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

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

区别

  • Nacos支持服务端主动检测提供者状态:

    临时实例采用心跳模式,非临时实例采用主动检测模式

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

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

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

你可能感兴趣的:(微服务,eureka,微服务,java,springcloud)