10 微服务的API网关原理
微服务引入网关也屏蔽内部服务实现细节,对外部提供统一的入口,如下图所示。
网关主要职责:反向路由(通过网关反向找到的内部的具体服务,反向代理)、安全认证、限流熔断(突发流量限流熔断)、日志监控。
11 Netflix Zuul 网关架构
前置路由过滤器:在请求被路由之前调用,比如:请求身份验,选择微服务实例,日志埋点等
路由过滤器:负责转发到具体的微服务。
后置路由过滤:目标服务调用后,将会转到后置路由过滤器,比如:统计、审计等。
错误过滤器:调用过程中产生错误,对错误统一处理。
12 Netflix 路由服务发现体系
13 微服务配置中心原理
为什么要引入配置中心,主要原因:
● 在单块应用只需要管理一套配置(放在应用配置文件中);而拆分为微服务后,配置都散落在各个应用中,维护成本较高
● 配置没有统一标准,格式不统一,而且没有审计功能;
● 修改周期比较长,可能需要发布
● 而且因为微服务治理的需要,有些配置还需要能够动态的改变,已达到动态扩容、切流量等目的
配置中心简单的原理图如下:
Apollo配置中心的架构如下:
14 微服务两种典型的通信方式(RPC和REST)
15 微服务框架和治理
一个国家人多了需要政府来管理,微服多了同样也需要管理和治理能力,一个好的微服务体系需要关注如下 治理环节:
16 微服务监控系统分层和监控架构
体系化分层监控,端到端全方位监控体系:
17 微服务调用链监控如何选型
微服务是复杂的分布式系统,如果没有一套好的调用链系统,服务间依赖出了问题就会很难定位,目前在各大主流的互联网公司都有配套调用链监控系统。调用链最早是谷歌提出2010年提出的,发表在<<Dapper, a Large-Scale Distributed Systems Tracing Infrastructure>>论文上。如下图所示,有个web 前端调用Service1 和cache,调用链有个span概念,span主要有spanId和traceId,root span 比较特殊启动时候除了会生成spanId 和traceId,其它的span只会生成spanId会记录其parent spanId。
开源界常用的调用链工具,具体如下:
18 微服务限流熔断
分布式微服务系统依赖服务错综复杂,如果不做好限流熔断措施,可能导致客户体验下降,严重情况可能会出现整个雪崩。为了提升系统稳定性常见做法:熔断(设置超时时间、快速失败)、隔离、限流(保护好自己)、降级。Netflix Hystrix 断路器原理如下图所示。
19 Docker容器部署技术&持续交付流水
容器技术区别于传统交付技术的最显著的特性:
● 环境一致性问题,传统使用war或者jar包去部署,可能会因为依赖问题在A机器是好的在B机器就不行了
● 镜像部署,只需要在每个机器部署docker运行实例,只管运行标准容器镜像(有操作系统、应用程序、应用程序依赖的包等),并不关心镜像是java写的服务还是python服务。
基于镜像治理和多环境的持续交付流⽔水线
20 容器集群调度和基于容器的发布体系
有了容器技术的交付手段,单独容器的能力是比较有限的,希望能够有一种容器资源的调度平台能够统一的管控容器资源,开源的技术有Mesos和Kubernetes等。下图给是资源调度框架 Mesos 架构,master(使用zk做高可用)负责管理slave机器,slave可以运行容器物理机和虚拟机,Framework负责具体调度。
参考文献
[1] 极客时间-微服务架构核心20讲