初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第1张图片

学习路径

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第2张图片 认识微服务

单体架构特点?

        简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统

分布式架构特点?

        松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝

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

        优点:拆分粒度更小、服务更独立、耦合度更低

        缺点:架构非常复杂,运维、监控、部署难度提高

SpringCloud

SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud。

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

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第3张图片

微服务拆分与调用

单一职责:不同微服务,不要重复开发相同业务

数据独立:不要访问其它微服务的数据库

面向服务:将自己的业务暴露为接口,供其它微服务调用

微服务调用方式

基于RestTemplate发起的http请求实现远程调用

在启动类中注入

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第4张图片

在业务逻辑层中访问封装

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第5张图片

http请求做远程调用是与语言无关的调用,只要知道对方的ip、端口、接口路径、请求参数即可。

服务调用关系

        服务提供者:暴露接口给其它微服务调用

        服务消费者:调用其它微服务提供的接口

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

        一个服务可以同时是服务提供者和服务消费者

 

Eureka注册中心

远程调用的问题

  1. 服务消费者该如何获取服务提供者的地址信息?
  2. 如果有多个服务提供者,消费者该如何选择?
  3. 消费者如何得知服务提供者的健康状态?

Eureka原理

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第6张图片 

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

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

                eureka保存这些信息

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

      2.如果有多个服务提供者,消费者该如何选择?

                服务消费者利用负载均衡算法,从服务列表中挑选一个

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

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

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

                消费者就可以拉取到最新的信息

               初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第7张图片

搭建EurekaServer

搭建EurekaServer服务步骤如下:

  1. 创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖

        
              org.springframework.cloud
              spring-cloud-starter-netflix-eureka-server
    

     2. 编写启动类,添加@EnableEurekaServer注解

     3.添加application.yml文件,编写下面的配置:

server:
  port: 10086  # 自定义端口号
spring:
  application:
    name: eurekaserver  # 项目名称
eureka:
  client:
    service-url: # eureka地址信息
      defaultZone: http://127.0.0.1:10086/eureka/

服务注册

引入eureka-client依赖


        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        

在application.yml中配置eureka地址

eureka:
  client:
    service-url: # eureka地址信息
      defaultZone: http://127.0.0.1:10086/eureka/

无论是消费者还是提供者,引入eureka-client依赖、知道eureka地址后,都可以完成服务注册

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第8张图片

  服务发现

  1. 引入eureka-client依赖
  2. 在application.yml中配置eureka地址
String url = "http://userserver/user/" + order.getUserId();
  1. 给RestTemplate添加@LoadBalanced注解

 

/**
     * 创建RestTemplate并注入spring容器
     * */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
  1. 用服务提供者的服务名称远程调用

 

Ribbon负载均衡原理

负载均衡原理

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第9张图片

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第10张图片 

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第11张图片

负载均衡策略

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第12张图片

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第13张图片 

Nacos注册中心

认识和安装Nacos

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第14张图片

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第15张图片 

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第16张图片  

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


     com.alibaba.cloud
     spring-cloud-alibaba-dependencies
     2.2.6.RELEASE
     pom
     import

  1. 注释掉order-service和user-service中原有的eureka依赖。
  2. 添加nacos的客户端依赖:



    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery

  1. 修改user-service&order-service中的application.yml文件,注释eureka地址,添加nacos地址:
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    username: BLS
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderserver
  cloud:
    nacos:
      server-addr: localhost:8848

2.启动并测试:

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第17张图片

 

Nacos快速入门

Nacos服务搭建

下载安装包

解压

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

Nacos服务注册或发现

引入nacos.discovery依赖

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

Nacos服务分级存储模型

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第18张图片

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第19张图片 

 

  1. 修改application.yml,添加如下内容:
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
    username: BLS
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  application:
      name: userserver  # 项目名称
  cloud:
    nacos:
      server-addr: localhost:8848  # nacos配置地址
      discovery:
        cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州

  1. 在Nacos控制台可以看到集群变化:
  2. 初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第20张图片

 

Nacos环境隔离

  1. Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第21张图片

 

2.在Nacos控制台可以创建namespace,用来隔离不同环境

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第22张图片

 

3.然后填写一个新的命名空间信息:

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第23张图片

 

4.保存后会在控制台看到这个命名空间的id:

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第24张图片

 

5.修改order-service的application.yml,添加namespace:

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第25张图片

 

6.重启order-service后,再来查看控制台:

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第26张图片 

 

7.此时访问order-service,因为namespace不同,会导致找不到userservice,控制台会报错:

初识SpringCloud微服务—Eureka、Ribbon负载均衡、Nacos_第27张图片

  1. Nacos与eureka的共同点

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

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

     2.Nacos与Eureka的区别

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

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

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

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

 

你可能感兴趣的:(spring,cloud,eureka,负载均衡)