架构师训练营 1 期第 10 周:模块分解 - 总结
在微服务的系统架构下,我们通常是通过一个网关来调用服务的,本文主要对微服务网关的技术架构进行介绍。
基于网关的微服务架构
客户端App通过Http的方式访问网关服务器,由网关服务器处理所有的请求,在网关服务器里,根据不同的请求调用不同的微服务,实现请求的处理,再将响应结果返回客户端,请求和响应一般是以json字符串格式传输的。
网关是服务访问全局唯一的入口,网关可以对不同的微服务框架进行协议转换适配,实现异构的微服务调用
微服务网关通常只是做服务的一些聚合调用或者数据的简单的一些聚合组合处理,业务逻辑处理的代码通常不会出现在网关中
网关的作用
统一接入,所有的客户端请求都进入到网关,在网关层面实现自己的负载均衡,实现高可靠高并发高性能,处理所有的并发请求,在网关层进行统一的优化
安全防护,在网关层面通过防刷控制、黑白名单等机制对网络攻击、各种注入操作等恶意请求进行统一拦截,进行安全防护
协议适配,不同的微服务可以部署在不同的微服务容器里,一个网关可以适配多个微服务框架协议,支持多种异构的微服务调用
流量控制和容错,是高可用中的一种,可以进行一些高并发进行限流、降级、熔断的处理,以保护整个系统正常访问,这些操作可以在网关里去做
微服务网关的角色
用户请求到达网关,网关承担了服务消费者的角色,从服务注册中心去发现服务,然后进行远程调用,由服务提供者完成调用后返回,最后在网关层面进行数据的聚合,返回给应用层
网关管道技术
网关本身没有什么业务,主要职责是做各种校验与拦截,这些职责可以通过管道技术连接起来。
实现管道技术的责任链设计模式,通过配置文件将管道中的多个职责模块构建成一个责任链,然后前后调用就可以了。
异步网关
网关调用微服务,如果是同步的微服务,发起调用请求以后,就要等待微服务的提供者完成服务的调用,返回结果给网关,如果服务的提供者自己还需要调用其他服务,在调用微服务返回之前,它是不可能向网关返回结果的,同步调用在发出请求后要阻塞同步等待处理结果返回,才能继续向下处理,传统的微服务框架和网关架构都是同步的
异步网关是不需要等待的,当它发出请求后,就结束了,它可以再去处理别的用户的请求,这样异步可以实现更高的并发能力,减少网络通讯系统的阻塞,整个处理能力更强大,实现起来也更加灵活
Flower反应式编程框架同时也是一个异步的微服务框架,可以实现异步网关和异步微服务调用,在Flower异步网关架构中,服务之间的调用关系是在注册中心进行流程编排的,因为它不用等待返回结果,所以每个服务也不需要去返回处理结果,在服务内部是不知道自己处理完后,下一个处理交给哪个服务处理的,这些服务的流程是通过在注册中心编排一个流程图,把这些服务编排成一个流程,可以有分支判断、合并聚合流程图的功能,编排完后,服务器网关就提交给服务流程的编排者去请求第一个服务,然后把请求异步的发送给流程中的第一个服务,直接就结束了,在请求里会包含服务流程的id,在第一个服务处理完后,它会根据流程id,以及自己在服务中的位置,去注册中心去检查,下一个异步服务是什么,然后将自己的处理结果异步的发送给自己的下一个服务,这样一路下来,到最后一个服务处理完后,会把它的结果异步的发送回网关服务,网关服务受到最终的结果以后,会进行数据聚合然后响应给用户。这个过程中所有的线程都是不阻塞的,服务的调用不需要进行显式的硬编码,一切都是异步的,编程更加灵活,性能更高效
异步网关的实现
在Servlet3中,可以通过request的startAsync返回context后就可以结束当前线程了,只需要把context传递出去,request和response对象都在context里,网络通讯连接socket都还在保持着,这样在异步的处理过程中,计算出结果后,只需要通过context就可以把结果推回给用户了
传统的同步编程方式,线程如果释放了,对于socket的引用也就释放了,socket通讯就会被关闭,这时就没有办法再向客户端输出数据了,所以需要在容器层面去支持异步请求这种特性,在Servlet3中通过request调用startAsync,实现在当前线程释放后不会关闭网络链接
开放平台网关
前面的网关都是面向自己的客户端应用的,还有一种叫开放平台网关,是给合作者使用的网关API,需要包含一些其他的计费、审计和安全的策略,关注点不同,技术实现方式类似。
API 接口:是开放平台暴露给合作者使用的一组 API,其形 式可以是 RESTful、 WebService、RPC 等各种形式
协议转换:将各种 API 输入转换成内部服务可以识别的形式,并将内部服务的返回 封装成 API 的格式。
安全:除了一般应用需要的身份识别、权限控制等安全手段,开放平台还需要分级的访问带宽限制,保证平台资源被第三方应用公平合理使用,也保护网站内部服务不会被外部应用拖垮。
审计:记录第三方应用的访问情况,并进行监控、计费等。
路由:将开放平台的各种访问路由映射到具体的内部服务。
流程:将一组离散的服务组织成一个上下文相关的新服务, 隐藏服务细节,提供统一接口供开发者调用。
开放授权协议 OAuth2.0
如果你想给第三方开放某些功能,第三方如何去获得授权,然后访问这个功能,需要用到开放授权协议
版权声明: 本文为 InfoQ 作者【piercebn】的原创文章。
原文链接:【http://xie.infoq.cn/article/7c6739ac8f18f2c1e5551382c】。文章转载请联系作者。
评论