写点什么

电商云 BEP 网关详解

  • 2020-03-11
  • 本文字数:2608 字

    阅读完需:约 9 分钟

电商云 BEP 网关详解

一、背景

1.1 什么是电商云?

电商云是在有赞 SAAS 产品的基础上提供的一整套定制解决方案,提供了完善的 APP 运行时托管,强大的前端可视化定制能力以及后端业务流程编排定制能力。

1.2 什么是 BEP?

BEP 全称是 Bussiness Extension Point(业务扩展点),业务扩展点是由有赞(内部)核心域系统定义的扩展点 API,这些扩展点 API 由电商云(外部)定制域 APP 根据自己的定制需求实现,从技术来讲类似 SPI(Service Provider Interface),有赞(内部)核心域系统会将这些业务扩展点编排起来提供强大的运行时可定制能力。

1.3 什么是 BEP 网关?

BEP 网关的核心作用是将有赞(内部)核心域系统发起的业务扩展点请求路由到电商云(外部)定制域 APP。

二、BEP 网关设计难点

2.1 如何适配两种完全不同的服务治理解决方案?

BEP 网关设计难点是有赞(内部)核心域跟电商云(外部)定制域采用完全不同的服务治理解决方案,有赞(内部)核心域服务治理方案已经成型,基于 Dubbo 定制实现,而电商云(外部)定制域服务治理方案是全新选型的,以 Kubernetes 容器调度平台为基础来实现。

2.2 部署上如何实现网络隔离?

有赞(内部)核心域跟电商云(外部)定制域是两个需要严格网络隔离的域,BEP 网关处于两个域的中心,需要在部署上考虑如何实现网络隔离。

三、BEP 网关选型

3.1 BEP 网关跟 API Gateway 的异同

API Gateway 的架构一般如下:


3.1.1 API 开放性的差异

API Gateway 一般是从外部到内部,完成请求的鉴权、路由、协议适配等,而 BEP 网关是从内部到外部。API Gateway 提供的 API 从开放性上可以分为 PRIVATE/PUBLIC/PARTNER,而 BEP 网关提供的扩展点 API 从开放性上只有 PUBLIC,因此 BEP 网关的鉴权是非常轻的,不需要独立的身份认证和鉴权体系。

3.1.2 API 请求协议的差异

API Gateway 的请求协议一般是 HTTP+JSON,而 BEP 网关为了尽量保留有赞(内部)核心域系统的使用习惯,采用是 Dubbo Rpc。

3.1.3 Backend 请求协议的多样性

API Gateway 跟 BEP 网关的 Backend 请求协议都是多样性的,电商云(外部)定制域目前只提供了 Java 语言的 APP 运行时,但是未来一定会引入更多的开发语言,要求 BEP 网关能够支持协议适配转换。

3.2 技术选型

综上所述,BEP 网关不适合直接选用业内现成的 API Gateway 方案,比如 Zuul、Spring Cloud Gateway,我们选择了基于内部定制 Dubbo 版本的基础上进行自研。

3.3 部署架构

3.3.1 两种完全不同的服务治理解决方案适配

BEP 网关 Backend 路由转发采用类似 Service Mesh 的技术架构,Sidecar 对 BEP 网关屏蔽了电商云(外部)定制域的服务治理细节,从而降低了 BEP 网关的实现成本,BEP 网关只需要感知有赞(内部)核心域的服务治理方案,不需要感知电商云(外部)定制域服务治理方案(而是交给 Edge Sidecar 来感知),这样就能保证两种完全不同的服务治理解决方案之间的松耦合,各自可以独立的进行迭代。

3.3.2 网络隔离

电商云(外部)定制域采用公网 LVS 接入 Edge Sidecar,BEP 网关跟 Sidecar 同机部署,BEP 网关转发请求时,直接将请求转发给 Sidecar 暴露的本机端口,而 Sidecar 跟公网 LVS 保持长连接,并且通过 TLS 进行加密和鉴权(特别注意,虽然是通过公网访问 LVS,但是因为两个域都在云厂商的同一个可用区,所以访问延迟和稳定性是有保障的)。

3.4 详细设计

3.4.1 SDK

SDK 完成 BEP 调用核心公共逻辑的封装,在有赞(内部)核心域,身份主体标识一般是店铺,而电商云(外部)定制域 APP 的身份主体标识是 APP,SDK 需要判断店铺所有者是否授权 APP 进行能力定制,并且查询已授权的 APP 有没有订阅相关扩展点的实现,通过将这些关键的核心逻辑前置在 SDK,可以保证对标准店铺(没有进行能力定制的店铺)的访问性能基本不受影响。

3.4.2 请求接入

BEP 网关通过一个通用的 Dubbo Provider 接入所有的扩展点调用请求,新增扩展点 BEP 网关无需重启,通过元数据缓存模块异步管理扩展点元数据。

3.4.3 协议转换

BEP 网关的接入协议是默认的 Dubbo Rpc 协议,该协议有一个非常大的问题是报文的可扩展区域不在头部而在尾部,要想解析可扩展区域需要对整个报文做完整的解析,这对于 Sidecar 的性能和对协议细节的侵入性是一个巨大的挑战,因此我们选择把 Dubbo Rpc 协议封装成 HTTP2 协议,通过 HTTP2 协议强大的头部可扩展能力实现路由控制等服务治理能力。


3.4.4 路由转发

BEP 网关的路由转发逻辑比较简单,只需要将请求转发给 Sidecar 暴露的本机接口即可,不需要直接路由到目的地址和端口,但是特别注意,BEP 网关需要在协议转换时将目的路由信息附加到报文头部可扩展区域,如上图所示,放到 HEADERS frame,Edge Sidecar 会解析报文头部可扩展区域获得目的路由信息,然后进行真正的路由转发。

3.4.5 健壮的隔离保护机制

电商云(外部)定制域 APP 是由外部开发者开发的,稳定性无法保证,为了避免将有赞(内部)核心域系统拖垮,BEP 网关实现了超时控制和熔断保护。

3.5 未来规划

3.5.1 支持多语言 APP

目前电商云(外部)定制域提供的 APP 运行时环境只支持 Java 语言,BEP 网关也只支持路由到 Java 语言 APP,未来随着更多开发者进来,需要 BEP 网关对请求做协议转换适配以支持多语言 APP。

3.5.2 完善通用网关能力

BEP 网关未来会继续完善限流、日志、监控等通用网关能力,会尽量利用有赞内部或者业内开源的成熟的组件和产品。

四、电商云(外部)定制域服务治理

电商云(外部)定制域采用 Kubernetes 容器编排调度平台,服务治理采用基于 Istio 的 Service Mesh 架构上进行定制。


4.1 Kubernetes 实现多租户隔离

电商云(外部)定制域是一个非常典型的多租户场景,不同的 APP 会根据自己的需求实现业务扩展点,电商云(外部)定制域基于 Kubernetes 成熟的多租户技术实现租户隔离。

4.2 Tether 取代 Envoy

有赞内部应用非常成熟的 Tether 中间件取代了 Envoy,由 Tether 跟 Istio 的控制平面进行交互,完成服务发现和路由控制,应用框架只需要将请求转交给部署在同一个 Pod 里的 Tether 即可。

4.3 Edge Sidecar

Edge Sidecar 是两个隔离的服务治理域之间互相调用的一个关键,我们惊喜的发现,蚂蚁金服开源的 SOFA Mesh 从设计上也采用了 Edge Sidecar 作为东西向服务间通讯的一个特殊桥梁。

五、总结

BEP 网关不但是有赞(内部)核心域访问电商云(外部)定制域的核心网关,同时也引入了全新的电商云(外部)定制域服务治理方案,这些宝贵的实践经验也将给有赞(内部)核心域服务治理带来新的演进方向。


2020-03-11 22:19999

评论

发布
暂无评论
发现更多内容

【AI思维空间】ChatGPT纵横编程世界,点亮智慧火花 | 京东云技术团队

京东科技开发者

人工智能 京东云 ChatGPT 企业号 5 月 PK 榜

生态伙伴 | 硬创大赛新起航!携手华强科创广场,助力硬科技创业者

华秋电子

EhViewer软件2023最新白色版中文语言

ehviewer

EhViewer

GitHub爆赞!阿里P9纯手打十亿级高并发系统手册,真的太香了!

做梦都在改BUG

Java 系统设计 高并发 亿级并发

使用 Python 和 mitmproxy 实现基于队列的路径管理

IT蜗壳-Tango

央国企数字化转型 6 大挑战如何应对?中国信通院 IOMM 方法论提 6 点参考对策

信通院IOMM数字化转型团队

数字化转型 IOMM 央国企数字化转型

赋能企业数智转型新动力,迈向票据等分化新时代

用友BIP

TOB行业头条专访伙伴云CEO戴志康:GPT带来的AIGC热潮,改造了低代码?

联营汇聚

JMeter笔记6 | JMeter录制(配置代理)

测试 Jmeter 性能测试 自动化测试 接口测试

刷Github时发现了一本阿里大神的算法笔记!标星70.5K

做梦都在改BUG

Java 数据结构 算法 LeetCode

MobLink 创建应用

MobTech袤博科技

SpringBoot 使用 Sa-Token 完成注解鉴权功能

做梦都在改BUG

Java spring Sa-Token

Midjourney|文心一格prompt教程[基础篇]:注册使用教程、风格设置、参数介绍、隐私模式等

汀丶人工智能

人工智能 深度学习 ChatGPT MidJourney prompt learning

LP流动性质押挖矿系统软件开发

Congge420

消息推送平台有没有保证数据不丢?

做梦都在改BUG

Python从零到壹丨详解图像锐化Roberts、Prewitt算子实现边缘检测

华为云开发者联盟

人工智能 华为云 图像 华为云开发者联盟 企业号 5 月 PK 榜

一种通用的业务监控触发方案设计 | 京东云技术团队

京东科技开发者

京东云 业务监控 企业号 5 月 PK 榜

限速神器RateLimiter源码解析 | 京东云技术团队

京东科技开发者

限流算法 京东云 企业号 5 月 PK 榜

从前后端的角度分析options预检请求

华为云开发者联盟

前端 开发 华为云 华为云开发者联盟 企业号 5 月 PK 榜

机器学习服务语音合成,解锁智能养娃新趋势

HarmonyOS SDK

HMS Core

首个支持RWA交易的订单簿DEX-PoseiSwap,即将开启IEO

鳄鱼视界

本周精彩!关于 Linux 内核宕机和超融合 Kata 虚拟化容器技术介绍 | 第 77-78 期

OpenAnolis小助手

开源 云原生 系统运维 龙蜥大讲堂 浪潮

硬科技,创未来!第十五届深创赛福田预选赛-华秋第九届硬创大赛正式启幕

华秋电子

高效联调,可靠发布!华为云推出CodeArts Release发布管理服务

华为云开发者联盟

云计算 开发工具 华为云 华为云开发者联盟 企业号 5 月 PK 榜

基于Sentinel自研组件的系统限流、降级、负载保护最佳实践探索 | 京东云技术团队

京东科技开发者

开源 京东云 企业号 5 月 PK 榜

包管理工具:pnpm | 京东云技术团队

京东科技开发者

京东云 pnpm 企业号 5 月 PK 榜

元宇宙链游系统软件开发

Congge420

FEELM在英国发布全新升级一次性解决方案,思摩尔打造增长新引擎

科技热闻

开箱即用!AI模型库全新发布,一站式在线开发部署!

飞桨PaddlePaddle

模型 飞桨

Java开发实践:合理使用线程池及线程变量

阿里技术

Java 线程池

电商云 BEP 网关详解_文化 & 方法_有赞技术_InfoQ精选文章