微服务全链路解析

1、序言:

        一提到微服务,大家马上想到微服务定义、微服务架构风格、各种微服务框架,如SpringCloud、Dubbo,ServiceMesh等。

        本文从另一个角度,即服务全链路访问路径的角度,详细描述微服务架构中,从客户端发起请求到服务端接收、处理请求,并返回处理结果给客户端的整个访问路径,及相关应用服务器内部的线程处理模型、服务的线程处理模型等。了解服务的完整处理过程,洞悉服务由哪些线程处理,这些线程处于什么状态,有助于服务的全链路监控、优化、错误排查等。

        最近,笔者有幸参与了某银行的一个采用微服务架构风格的项目,实践了一下微服务架构。此次就以这个项目为基本例子,部分内容稍作修改。

        对于本文存在不适、错误的地方,希望各位及时地指出,我将积极的采纳和修改。

2、整体逻辑部署架构

        本项目整体逻辑部署方案如下:

        上图红色连线描述了从浏览器调用一个服务的全链路访问路径,忽略掉运营商的网络设备、数据中心的网络设置的各种路由,只关注应用相关的处理部分,则主要涉及以下几个部分:

        1、域名解析;

        2、流量路由网关:

        在异地多活部署方案中使用,实现根据不同的路由策略对访问流量进行路由,此处可以忽略;

        3、API网关:

        通过API网关,接入公共渠道,在网关上实现通讯协议解析,安全认证,流量控制,数据转换,协议转换等功能。API网关自主研发,基于Netty4实现,此次只关注Netty的线程模型。

        4、应用服务器:

        为了便于说明问题,描述开发环境采用的Tomcat的线程模型。对于其它应用服务器,读者自行查阅相关资料。

        5、服务内部处理:

        由于部分组件内部采用了Java自身的ThreadPoolExecutor,所以此次描述了Java线程池内部结构。

        在此,再次强调一下,本文只是我对于微服务架构设计过程中,对于一个服务请求处理过程中,所涉及到的线程进行一个剖析,以便自己可以快速的监控服务、发现问题、解决问题,所以本文描述的内容以线程模型为主。

3、域名解析

        域名解析过程如下图所示:


        1、在浏览器中输入服务访问地址,如http://www.xxx.com/app/getUsers.json,域名为www.xxx.com,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。

        2、如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。

        3、如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。

        4、如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。

        5、如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(http://xxx.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找http://xxx.com域服务器,重复上面的动作,进行查询,直至找到www .xxx.com主机。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任性之闲来无事

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值