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



传统的团队 , 都是面向过程化的 , 产品想完了去找策划 , 策划完了找开发 , 接着顺着一步一步找 。
我们做技术都是为了产品的 , 一旦过程出来了什么问题 , 回溯寻找问题会非常耗时 。

使用了微服务架构体系 , 团队组织方式需要转变成跨职能团队 , 即每个团队都有产品专家 , 策划专家 , 开发专家 , 运维专家 , 他们使用 API 方式发布他们的功能 , 而平台使用他们的功能发布产品 。


微服务技术架构体系下面我分享一下大部分公司都使用的微服务技术架构体系:

服务发现
主流的服务发现 , 分为三种:

第一种 , 开发人员开发了程序以后 , 会找运维配一个域名 , 服务的话通过 DNS 就能找到我们对应的服务 。
缺点是 , 由于服务没有负载均衡功能 , 对负载均衡服务 , 可能会有相当大的性能问题 。

第二种 , 是目前普遍的做法 。 可以参考 Zuul 网关 , 每一个服务都通过服务端内置的功能注册到注册中心 , 服务消费者不断轮询注册中心发现对应的服务 , 使用内置负载均衡调用服务 。
缺点是 , 对多语言环境不是很好 , 你需要单独给消费者的客户端开发服务发现和负载均衡功能 。 当然了 , 这个方法通常都是用在 Spring Cloud 上的 。

第三种 , 是将客户端和负载均衡放在同一个主机 , 而不是同一个进程内 。
这种方法相对第一种第二种方法来说 , 改善了他们的缺点 , 但是会极大增加运维成本 。
网关
微服务的网关是什么?我们可以联系生活实际想一下 。 每一个大的公司 , 都会有一偏属于自己的建筑区 , 而这建筑区内 , 都有不少的门卫 。 如果有外来人员进入公司 , 会先和门卫打好招呼 , 才能进去 。
将生活实际联系到微服务上 , 就不难理解网关的意思了:

网关的作用如下:

  • 反向路由:很多时候 , 公司不想让外部人员看到我们公司的内部 , 就需要网关来进行反向路由 。 即将外部请求转换成内部具体服务调用 。
  • 安全认证:网络中会有很多恶意访问 , 譬如爬虫 , 譬如黑客攻击 , 网关维护安全功能 。
  • 限流熔断:当请求很多服务不堪重负 , 会让我们的服务自动关闭 , 导致不能用服务 。 限流熔断可以有效的避免这类问题 。
  • 日志监控:所有的外面的请求都会经过网关 , 这样我们就可以使用网关来记录日志信息 。
  • 灰度发布 , 蓝绿部署 。 是指能够平滑过渡的一种发布方式 。 在其上可以进行 A/B testing 。 即让一部分用户继续用产品特性 A , 一部分用户开始用产品特性 B , 如果用户对 B 没有什么反对意见 , 那么逐步扩大范围 , 把所有用户都迁移到 B 上面来 。
开源网关 Zuul 架构:

Zuul 网关核心其实是一个 Servlet , 所有请求都会经过 Zuul Servlet 传到 ZuulFilter Runner , 然后分发到三种过滤器 。
先说说架构图左半部分 , 分别是使用 Groovy 实现的前置路由过滤器 , 路由过滤器 , 后置路由过滤器 。
一般请求都会先经过前置路由过滤器处理 , 一般的自定义 Java 封装逻辑也会在这里实现 。
路由过滤器 , 实现的是找到对应的微服务进行调用 。 调用完了 , 响应回来 , 会经过后置路由过滤器 , 通过后置路由过滤器我们可以封装日志审计的处理 。
可以说 Zuul 网关最大的特色就是它的三层过滤器 。 架构图右半部分 , 是 Zuul 网关设计的自定义过滤器加载机制 。
网关内部会有生产者消费者模型 , 自动的将过滤器脚本发布到 Zuul 网关读取加载运行 。