exynos|腾讯T4架构师用这12张手绘图,轻松带你搞懂微服务架构!太厉害了( 四 )


配置中心
以前 , 开发人员把配置文件放在开发文件里面 , 这样会有很多隐患 。 譬如 , 配置规范不同 , 无法追溯配置人员 。
一旦需要大规模改动配置 , 改动时间会很长 , 无法追溯配置人员 , 从而影响整个产品 , 后果是我们承担不起的 。
因此就有配置中心这个喽!现在的开源中心有百度配置中心 Disconf , Spring Cloud Config , Apollo 。
【exynos|腾讯T4架构师用这12张手绘图,轻松带你搞懂微服务架构!太厉害了】今天重点说说现在应用质量不错的配置中心 , 携程开源的阿波罗(Apollo):

Apollo 的配置中心规模比较大 , 本地应用会有响应的配置中心客户端 , 可以定时同步配置中心里的配置 。 如果配置中心怠机 , 会使用缓存来进行配置 。
通讯方式
关于通讯方式 , 一般市面也就是两种远程调用方式 , 我整理了一个表格:

监控预警
监控预警对于微服务很重要 , 一个可靠的监控预警体系对微服务运行至关重要 。
一般监控分为如下层次:

从基础设施到用户端 , 层层有监控 , 全方位 , 多角度 , 每一个层面都很重要 。
总体来说 , 微服务可分为 5 个监控点:

  • 日志监控
  • Metrics 监控
  • 健康检查
  • 调用链检查
  • 告警系统
①监控架构
下面的图是大部分公司的一种监控架构图 。 每一个服务都有一个 Agent , Agent 收集到关键信息 , 会传到一些 MQ 中 , 为了解耦 。
同时将日志传入 ELK , 将 Metrics 传入 InfluxDB 时间序列库 。 而像 Nagios , 可以定期向 Agent 发起信息检查微服务 。

②调用链监控 APM
很多公司都有调用链监控 , 就譬如阿里有鹰眼监控 , 点评的 Cat , 大部分调用链监控(没错 , 我指的 Zipkin)架构是这样的:

当请求进入 Web 容器的时候 , 会经过创建 Tracer , 连接 Spans(模拟潜在的分布式工作的延迟 , 该模块还包含在系统网络间传递跟踪上下文信息的工具包 , 如通过 HTTP Headers) 。
Spans 有一个上下文 , 其中包含 Tracer 标识符 , 将其放在表示分布式操作的树的正确位置 。
当我们把图中的各种 Span 放到后端的时候 , 我们的服务调用链会动态的生成调用链 。
下面是一些市场上用的比较多的调用链监控对比:

熔断、隔离、限流、降级
面对巨大的突发流量下 , 大型公司一般会采用一系列的熔断(系统自动将服务关闭防止让出现的问题最大化)、隔离(将服务和服务隔离 , 防止一个服务挂了其他服务不能访问)、限流(单位时间内之允许一定数量用户访问)、降级(当整个微服务架构整体的负载超出了预设的上限阈值或即将到来的流量预计将会超过预设的阈值时 , 为了保证重要或基本的服务能正常运行 , 我们可以将一些不重要或不紧急的服务或任务进行服务的延迟使用或暂停使用)措施 。
下面介绍一下 Hystrix 的运行流程:

每一个微服务调用时 , 都会使用 Hystrix 的 Command 方式(上图的左上角那个) , 然后使用 Command 同步的 , 或者是响应式的 , 或者是异步的 , 判断电路是否熔断(顺着图从左往右看) , 如果断路则走降级 Fallback 。
如果这个线闭合着 , 但是线程资源没了 , 队列满了 , 则走限流措施(看图的第 5 步) 。
如果走完了 , 执行成功了 , 则走 run() 方法 , 获取 Response , 但是这个过程如果出错了 , 则继续走降级 Fallback 。
同时 , 看图最上面有一个后缀是 Health 的 , 这是一个计算整个链路是否健康的组件 , 每一步操作都被它记录着 。