1、不单一职责:同微服务,不要重复开发相同业务
2、数据分离:微服务数据治理,不要访问其他微服务的数据库
3、接口暴露:微服务可以将自己的业务暴露为借口,供其他微服务调用

服务调用关系:

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

1、Eureka

问题引出

  • 服务消费者如何动态获得服务提供者的地址信息
  • 如果有多个服务提供者,消费者该如何选择
  • 消费者如何知道提供者的健康状态

解决

1、

  • 服务提供者启动时向eureka注册自己的信息
  • eureka保存这些信息
  • 消费者根据服务名称向eureka拉去提供者信息

2、

  • 负载均衡

3、

  • 维持心跳
  • 即使更新

步骤

1、搭建EurekaServe

  • 引入Eureka-server依赖
  • 引入@EnableEurekaServer注解
  • 在application.yml中配置eureka地址

2、服务注册

  • 引入eureka-client依赖
  • 在application.yml中配置eureka地址

3、服务发现

  • 引入Eureka-client 依赖
  • 在application.yml中配置eureka地址
  • 在Restemplate中添加@LoadBalanced注解
  • 用服务提供者的服务名称远程调用

2、Ribbon负载均衡

image.png

负载均衡策略

1、代码方式:
在oreder-service中的OrederApplication类中,定义一个新的Rule:

  1. @Bean
  2. public IRule randomRule(){
  3. return new RandomRule();
  4. }

Oreder访问任何服务都依赖于此

2、配置文件

  1. userservice:
  2. ribbon:

饥饿加载

Ribbo默认采用的是懒加载,第一次访问会创建LoadBalancedClient,请求会很长。 而饥饿加载会在启动时创建,降低第一次访问时间

  1. ribbon:
  2. eager-load:
  3. enable: true
  4. clients: #集合
  5. -

image.png
image.png

image.png

image.png

image.png