逻辑层就近接入实现调研

2023-10-15 20:33:37 浏览数 (2)

背景概述

接入层高可用架构设计文章中,我们详细讨论了接入层的故障域并给出了解决方案,并结合一个具体案例,来说明如何实现接入层的高可用建设。

本文我们主要专注逻辑层。在容灾场景下,由于需要跨机房调用,所以很多客户都有一个疑问:我能不能让我的微服务就近访问?

其实有比较多的方案来实现这个功能。

方案概述

逻辑层就近接入,主要是指微服务之间的相互访问,从用户来的流量,经过业务网关路由后,不在本文讨论范围内。

整个业务流程来看,业务流量大概经过两个部分,主要是业务基础设施、业务程序。

业务基础设施层面,主要思路是感知基础设施部署情况,在基础设施寻址层面就做劫持。具体实现是智能DNS,但这种方式有较多的人力投入;如果采用了服务网格后,可以通过服务网格来自动化管理,具体参考:TCM同城双活设计方案-腾讯云开发者社区-腾讯云

业务程序上实现,一般开源框架就包含了这部分的内容,下面我们以dubbo为例分析说明。

应用框架层调研

由于阿里巴巴影响力,国内比较多的互联网公司使用Dubbo作为微服务框架,基于这个开源框架来谈一谈开源产品的就近接入实现。

Dubbo 2.7之前版本,原生不支持就近访问,需进行编码实现,一般有两种方式:Dubbo filter及Java agent。Dubbo2.7及之后版本,原生支持。下面是一些对比及实现思路

对比

Dubbo < 2.7

Dubbo >= 2.7

实现方案

Java agent

filter接口

ConditionRouter

具体实现

AOP编程方式,根据规划的IP规则,过滤invoker list

1、自定义filter 1、 修改@DubboService注解的filter字段,启用filter

路由规则中添加(IP根据实际情况修改):conditions: - host=10.10* => host=10.10* - host=10.20* => host=10.20*

对代码侵入性

上手曲线

较难,需新增组件,并且需修改启动方式,以挂载agent

开发简单,需考虑异区服务的兼容性

无开发成本,且在本区服务异常后,会自动重试异区服务

适用范围

广

基于框架

基于框架

其它的框架,基本也可以按照上面思路,实现就近接入,解决业务延时敏感问题:

1) java agent是基于jvm的,与框架无关,使用范围非常广

2) 接口属于框架的扩展能力,依赖具体框架。

3) 原生支持,也属于框架能力,依赖具体框架的实现。如spring cloud,原生就支持就近接入

我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

0 人点赞