微服务02_eureka注册中心

微服务02_注册中心

  • 一、认识微服务
    • 分布式架构:
    • 分布式架构要考虑的问题:
    • 微服务的优点:
    • 微服务技术对比
    • 企业需求
    • SpringCloud
    • Cloud和Boot的版本兼容
    • 服务拆分的注意事项
  • 二、服务调用关系
    • 硬编码:服务提供者向消费者提供服务
  • 三、eureka注册中心
    • 1、远程调用的问题
    • 2、 eureka原理
      • 在Eureka架构中,微服务角色有两类:
      • EureKa的作用
    • 3、 搭建EurekaServer
      • 1. 依赖:
      • 2. application
      • 3. yml配置信息:
    • 4、 服务注册【两步:依赖和配置】
      • 第一步:引入依赖
      • 第二步:加入配置
      • 模拟启动两个实例:
      • 在多Module项目中,给IDEA底部选项卡区域添加Services选项卡(转载)
    • 5、 服务发现
      • 第一步:用服务名代替ip和端口
      • 第二步:在客户端的消费者添加负载均衡的注解:
      • 测试:进行访问order,并查看User服务的日志
  • 四、Ribbon负载均衡原理
    • 1、负载均衡的原理
      • 从整体来看流程:
      • 从原码看流程:
    • 2、负载均衡的策略。规则接口是 IRule
      • 如何调整负载均衡的策略。【 将轮巡改为随机】
    • 3、懒加载->改为饥饿加载

一、认识微服务

分布式架构:

微服务02_eureka注册中心_第1张图片

分布式架构要考虑的问题:

服务拆分力度如何?
服务集群地址如何维护?
服务之间如何实现远程调用?
访问健康状态如何感知?

微服务的优点:

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

微服务技术对比

微服务02_eureka注册中心_第2张图片

企业需求

微服务02_eureka注册中心_第3张图片

SpringCloud

微服务02_eureka注册中心_第4张图片

Cloud和Boot的版本兼容

微服务02_eureka注册中心_第5张图片

服务拆分的注意事项

一个单体架构按功能模块进行拆分,从而变成多个服务。

  1. 不同的微服务,不要重复开发相同的服务

微服务的拆分目的是:单一职责。一个服务只做与自己相关的事情。

  1. 每个微服务都有自己数据库,不访问其他微服务的数据库
  2. 微服务可以将将自己的业务暴露为接口,供其他微服务调用。Restful接口

例如订单模块:调用用户功能、支付功能、商品功能

二、服务调用关系

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

• 服务提供者:暴露接口给其它微服务调用
• 服务消费者:调用其它微服务提供的接口
• 提供者与消费者角色其实是相对
• 一个服务可以同时是服务提供者服务消费者

硬编码:服务提供者向消费者提供服务

背景:只是单纯模拟生产者和消费者的情况,由此引出微服务以及注册中心。
order是商品信息,消费者。
user是用户信息,服务提供者
order查询商品信息时,并能将用户信息查询出来:
微服务02_eureka注册中心_第6张图片

微服务02_eureka注册中心_第7张图片

三、eureka注册中心

1、远程调用的问题

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

微服务02_eureka注册中心_第8张图片

2、 eureka原理

在Eureka架构中,微服务角色有两类:

一:EureKaServer:注册中心
二: EureKaClient:客户端
EureKaClient 的客户端分为:Provider服务提供者和consumer服务消费者

EurekaServer:服务端,注册中心
记录服务信息
心跳监控

EurekaClient:客户端

  • Provider:服务提供者
    1.注册自己的信息到服务端EurekaServer
    2.每隔30秒向EurekaServer发送心跳

  • consumer:服务消费者
    根据服务名称从服务端EurekaServer拉取服务列表
    基于服务列表做负载均衡,选中一个微服务后发起远程调用

EureKa的作用

微服务02_eureka注册中心_第9张图片

  • 消费者该如何获取服务提供者具体信息?
    ◆ 服务提供者启动时向eureka注册自己的信息
    ◆ eureka保存这些信息
    ◆ 消费者根据服务名称向eureka拉取提供者信息

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

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

3、 搭建EurekaServer

三步走:
1.引入Eureka-Server依赖。配置服务端
2.添加@EnableEurekaServer注解
3.在application.yml配置Eureka地址。【为了服务注册配置信息】

1. 依赖:


<dependency>
   <groupId>org.springframework.cloudgroupId>
   <artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>

2. application

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class,args);
    }
}

3. yml配置信息:

server:
  port: 10086  #服务的端口
spring:
  application: #服务名称
    name: eurekaserver
eureka:
  client:
    service-url: #eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka
#eureka自己也是微服务,所以启动的时候,也将自己注册到服务

微服务02_eureka注册中心_第10张图片

Instances currently registered with Eureka
注册到 Eureka 的实例。 Eureka会记录每一个服务的所有实例。
application:EUREKASERVER:实例的名字
status:UP (1) - LAPTOP-C3SH54RU:eurekaserver:10086
up代表正常状态,ip(电脑的名称)和端口
所以说,可以根据实例找到ip和端口。根据application找到status

4、 服务注册【两步:依赖和配置】

第一步:引入依赖

 
 <dependency>
     <groupId>org.springframework.cloudgroupId>
     <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
 dependency>

第二步:加入配置

加入的配置:
微服务02_eureka注册中心_第11张图片

所有配置:

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver
  application: #服务名称
    name: orderserver
mybatis:
  type-aliases-package: cn.itcast.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
eureka:
  client:
    service-url: #eureka的地址信息
      defaultZone: http://127.0.0.1:10086/eureka
#所以启动的时候,也将自己注册到服务
 另外一个user服务,就是将下面的服务名称改一下即可。
  application: #服务名称
    name: userserver

微服务02_eureka注册中心_第12张图片

模拟启动两个实例:

ctrl +D
微服务02_eureka注册中心_第13张图片
那么现在就是启动四个服务:就可以看到注册了两个实例。【实例列表】
四个服务:eurek/oreder/和两个userservice
微服务02_eureka注册中心_第14张图片

在多Module项目中,给IDEA底部选项卡区域添加Services选项卡(转载)

微服务02_eureka注册中心_第15张图片

一般一个spring cloud项目中大大小小存在几个十几个module编写具体的微服务项目。此时,如果要调试测需要依次启动各个项目比较麻烦。
idea其实提供了各module的启动管理工具了,可以快速启动和关闭各个服务,也能批量操作,比如一次性全部启动或者关闭

默认第一次打开项目的时候,idea会提示是否增加这个选项卡,如果你没点或者选择了否,则需要手动添加这个选项里卡。

手动添加方法很简单,打开项目目目录的.idea/workspace.xml文件。
微服务02_eureka注册中心_第16张图片

找到RunDashboard节点,添加一个option节点。

<option name="configurationTypes">
	<set> 
	  <option value="SpringBootApplicationConfigurationType" /> 
	set> 
option>

如果没有找到RunDashboard节点,则增加一个RunDashboard节点

<component name="RunDashboard">
  <option name="configurationTypes">
    <set> 
      <option value="SpringBootApplicationConfigurationType" /> 
    set> 
  option>
  <option name="ruleStates">
    <list> 
      <RuleState>
        <option name="name" value="ConfigurationTypeDashboardGroupingRule" /> 
      RuleState>
      <RuleState> 
        <option name="name" value="StatusDashboardGroupingRule" /> 
      RuleState> 
   list> 
  option> 
component>

5、 服务发现

根据服务名获取列表,就不用写ip端口了,直接写服务名称即可

微服务02_eureka注册中心_第17张图片

第一步:用服务名代替ip和端口

微服务02_eureka注册中心_第18张图片

第二步:在客户端的消费者添加负载均衡的注解:

微服务02_eureka注册中心_第19张图片

测试:进行访问order,并查看User服务的日志

微服务02_eureka注册中心_第20张图片

微服务02_eureka注册中心_第21张图片
微服务02_eureka注册中心_第22张图片

四、Ribbon负载均衡原理

1、负载均衡的原理

从整体来看流程:

  1. 发送请求
  2. Ribbon拦截请求,去注册中心拉取服务
  3. 注册中心返回给Ribbon服务列表【例如两个user服务】
  4. Ribbon去做负载均衡。
    微服务02_eureka注册中心_第23张图片

从原码看流程:

微服务02_eureka注册中心_第24张图片


  1. 发送请求

  2. 拦截请求:
    @LoadBalanced注解:当RestTemplate发起的请求,要被将来的Ribbon拦截和处理。
    微服务02_eureka注册中心_第25张图片

  3. 拦截客户端发起的http请求。而RestTemplate就是一个发http请求的客户端。
    微服务02_eureka注册中心_第26张图片

  4. 去注册中心拉取服务,得到服务列表:

  5. 负载均衡:根据负载均衡的规则,选择一个进行返回:
    微服务02_eureka注册中心_第27张图片
    微服务02_eureka注册中心_第28张图片

  6. rule就是规则
    微服务02_eureka注册中心_第29张图片

2、负载均衡的策略。规则接口是 IRule

IRule 决定了负载均衡的策略

微服务02_eureka注册中心_第30张图片
微服务02_eureka注册中心_第31张图片

如何调整负载均衡的策略。【 将轮巡改为随机】

  • 作用范围是:
  • 方式一:全体。order-service访问任何一个服务都会随机
  • 方式二:只针对某个服务而言。只访问User-service会进行随机
  • 微服务02_eureka注册中心_第32张图片
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则

3、懒加载->改为饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。
饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

  1. 开启饥饿加载
  2. 指定饥饿加载的服务名称
ribbon:
	eager-load:
		enabled: true # 开启饥饿加载
		clients: userservice # 指定对userservice这个服务饥饿加载

你可能感兴趣的:(微服务的学习,java,springboot)