来源:mikechen的互联网架构
微服务是架构的必备技能,微服务主要涉及:服务的发现、注册、路由、熔断、降级、分布式配置等,下面我全面的来详解微服务
注册中心
注册系统中所有服务的地方,所有的服务都会注册在这里,如下图所示:

关系调用说明:
服务生产者启动时,向服务注册中心注册自己提供的服务;
服务消费者启动时,在服务注册中心订阅自己所需要的服务;
消费者从提供者中调用服务;
服务注册
首先服务注册与发现是来自于微服务架构的产物。
服务注册指的是将自身服务信息注册到注册中心,服务信息包括:服务所在主机IP、服务的端口号Port、暴露服务协议等信息。
如下图所示:

Service B 把自己注册到注册中心,这就叫 服务注册。
当下用于服务注册的工具非常多ZooKeeper,Consul,Etcd, 还有Netflix家的Eureka 等等。
不论使用那种工具,服务注册一定是要确保高可用的,否则重则的是所有的服务都没法调用,轻则新的服务不能上线。
服务发现
服务发现即通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务。
如下图所示:

ServiceA去注册中心获取服务实例的信息,这就是服务发现。
负载均衡
当多个服务提供者时,可以根据负载均衡算法,比如:如简单轮询、随机连接等,自动地选择需要调用的服务地址。
例如:Spring Cloud 微服务架构中的Ribbon,客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,在客户端就进行负载均衡算法分配。
如下图所示:

总共有七种负载均衡策略可供选择,可以根据自己的业务场景进行选择:
轮询RoundRobinRule:这也是Ribbon默认的策略;
随机RandomRule;
响应时间权重ResponseTimeWeightedRule:为每个服务设置权重,响应时间越短,权重越大;
最少并发数策略BestAvailableRule;
重试策略RetryRule;
可用性敏感策略AvailabilityFilteringRule;
区域性敏感策略ZoneAvoidanceRule;
服务熔断
服务熔断其实可以理解为类似于电表的保险丝,一旦某个时刻电压过载,那么保险丝就熔断了。
服务熔断的实现,大体流程如下图所示:

对于熔断机制的实现,设计了三种状态:
1.熔断关闭状态(Closed)
服务没有故障时,熔断器所处的状态,对调用方的调用不做任何限制。
2.熔断开启状态(Open)
在固定时间窗口内,比如:默认10秒,接口调用出错比率达到一个阈值,会进入熔断开启状态,进入熔断状态后,后续对该服务接口的调用不再经过网络。
3.半熔断状态(Half-Open)
在进入熔断开启状态一段时间之后,比如:Hystrix默认5秒,熔断器会进入半熔断状态。
服务网关
服务网关也称为API网关,是服务调用的唯一入口。
例如,在微服务架构中,Zuul是Spring Cloud中的微服务网关,是为微服务架构中的服务提供了统一的访问入口。

Gateway服务网关主要功能,如下图所示:

例如包含上图中的Gateway功能:
服务路由;
安全认证;
流量控制;
日志监控;
熔断保护等功能。
服务跟踪
随着微服务架构的流行,服务按照不同的维度进行拆分,在复杂的微服务架构系统中,会形成一个复杂的分布式服务调用链路,如下图所示:

面对复杂的调用链路就带来一系列问题:
如何快速发现问题?
如何判断故障影响范围?
如何梳理服务依赖以及依赖的合理性?
如何分析链路性能问题以及实时容量规划?
而链路追踪的出现正是为了解决这种问题,它可以在复杂的服务调用中定位问题。
例如:Spring Cloud Sleuth链路追踪 是 Spring Cloud的链路追踪组件,实现了分布式跟踪解决方案。
分布式配置中心
将本地化的配置信息,比如:properties、yml等配置信息,注册到配置中心,实现程序包在开发、测试、生产环境的无差别性方便程序迁移。