# 微服务

# 服务发现

服务注册表:是服务发现组件的核心,它用来记录各个微服务的信息,例如微服务 的名称,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();
    }
}
1
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 {
}
1
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

上次更新时间: 12/2/2019, 5:38:34 PM