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

学习路径

 认识微服务

单体架构特点?

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

分布式架构特点?

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

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

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

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

SpringCloud

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

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

微服务拆分与调用

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

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

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

微服务调用方式

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

在启动类中注入

在业务逻辑层中访问封装

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

服务调用关系

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

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

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

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

 

Eureka注册中心

远程调用的问题

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

Eureka原理

 

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

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

                eureka保存这些信息

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

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

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

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

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

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

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

               

搭建EurekaServer

搭建EurekaServer服务步骤如下:

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

        <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>

     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依赖

<!-- eureka -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

在application.yml中配置eureka地址

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

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

  服务发现

  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负载均衡原理

负载均衡原理

 

负载均衡策略

 

Nacos注册中心

认识和安装Nacos

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

 

  

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

<dependency>
     <groupId>com.alibaba.cloud</groupId>
     <artifactId>spring-cloud-alibaba-dependencies</artifactId>
     <version>2.2.6.RELEASE</version>
     <type>pom</type>
     <scope>import</scope>
</dependency>

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

<!-- nacos客户端依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

  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.启动并测试:

 

Nacos快速入门

Nacos服务搭建

下载安装包

解压

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

Nacos服务注册或发现

引入nacos.discovery依赖

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

Nacos服务分级存储模型

 

 

  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控制台可以看到集群变化:

 

Nacos环境隔离

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

 

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

 

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

 

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

 

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

 

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

 

 

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

  1. Nacos与eureka的共同点

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

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

     2.Nacos与Eureka的区别

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

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

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

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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值