# 微服务
# 服务发现
服务注册表:是服务发现组件的核心,它用来记录各个微服务的信息,例如微服务 的名称,IP,端口等。服务注册表提供查询API和管理API,查询API用于查询可用 的微服务实例,管理API用于服务注册和注销
服务注册与服务发现:服务注册是指微服务在启动时,将自己的信息注册到服务发现 组件上的过程。服务发现是指查询可用微服务列表与其网络地址的机制
服务检查:服务发现组件使用一定机制定时检测已注册的服务,如发现某实例长时间 无法访问,就会从服务注册表中移除该实例
发现组件:Eureka,Consul和Zookeeper
# Eureka
Eureka Server提供服务发现的能力,各个微服务启动时,会向Eureka Server注册自己的 信息(例如IP,端口,微服务名称等),Eureka Server会存储这些信息。
Eureka Client是一个Java客户端,用于简化与Eureka Server的交互。 微服务启动后,会周期性(默认30s)地向Eureka Server发送心跳以续约自己的“租期”
如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90s)
# 负载均衡ribbon
当Ribbon和Eureka配合使用时,会自动将虚拟主机名映射成微服务的网络地址。
不能将restTemplate.getForObject(...)与loadBalancerClient.choose(...)写在同一个方法中 两者之间会冲突。因为此时代码中的rest-Template实际上是一个Rib
bon客户端,本身已经包含了“choose”行为
虚拟主机名/
请求均匀分布到两个用户微服务节点上,说明已经实现了负载均衡
# 自定义
/**
* 注:该类不应该在主应用程序上下文的@ComponentScan中
*/
@Configuration
public class RibbonConfiguration {
@Bean
public IRule ribbonRule() {
//负载均衡规则,改为随机
return new RandomRule();
}
}
2
3
4
5
6
7
8
9
10
11
12
/**
* 使用RibbonClient,为特定name的Ribbon Client自定义配置
* 使用@RibbonClient的configuration属性,指定Ribbon的配置类
*/
@Configuration
@RibbonClient(name = "user", configuration = RibbonConfiguration.class)
public class TestConfiguration {
}
2
3
4
5
6
7
8
注意:RibbonConfiguration类不能包含在主应用程序上下文的@ComponentScan中,否则该类中的配置信息就会被 所有的@RibbonClient共享。 如果只想自定义某一个Ribbon客户端的配置,必须防止@Configuration注解的类所在的包与@ComponentScan扫描的重叠
# Feign实现声明试REST调用
# Hystrix容错处理
雪崩效应:“基础服务故障”导致“级联故障”的现象 如何处理: 1.网络请求设置超时 2.使用断路器模式
# Turbine
# Zuul微服务网关
为什么要使用微服务网关?会遇到一些问题 1.客户端会请求不同的微服务,增加了客户端的复杂性 2.存在跨域请求,在一定场景下处理相对复杂 3.认证复杂,每个服务都需要独立认证 4.难以重构,随着项目的迭代,可能需要重新规划微服务 5.某些微服务可能使用了防火墙、浏览器不友好的协议
微服务网关是介于客户端和服务端之间的中间层,所有的外部请求都会先经过微服务网关
zuul功能: 身份证与安全 审查与监控 动态路由 压力测试 负载均衡 静态响应处理 多区域弹性
# sidecar
← 分布式索引引擎架构原理 Lambda表达式 →