一种支持热插拔的服务端插件设计思路

本文介绍了服务端插件设计思路,强调其高性能、高可靠和易用性。文章探讨了Go原生、进程隔离、C共享库和WebAssembly等多种插件类型,以及它们的优缺点和适用场景。其中,进程隔离插件通过Unix domain socket通信,实现了良好的隔离性和较高的性能。此外,文章还提到了插件接口的设计,以及如何简化插件的开发和使用。
摘要由CSDN通过智能技术生成

定位

服务端插件是一个逻辑扩展平台,提供了一个快速托管逻辑的能力。

核心特点

  1. 高性能:相对于RPC调用,没有网络的损耗,性能足够强劲。

  2. 高可靠:基于线程隔离,保证互不影响,插件的资源占用或崩溃等问题不直接影响业务。

  3. 部署快:不需要发布审核流程, 插件本身逻辑简短,编译速度快,基于版本管理可以快速回退。

  4. 易用:可以根据业务需求支持不同语言的插件

相比传统的将服务和逻辑写在一起:减少了服务发布和变更;支持更多的语言实现不同的逻辑;支持热插拔;

相比faas函数计算服务:减少了网络传输的损耗,性能更高。

相比于传统SDK插件模式优点在于:

  • 语言无关,核心业务逻辑只需要实现一遍;

  • 业务接入成本低,通常不需要关心升级,某些场景下甚至可以不需要 IPC 用的轻量级 SDK;

  • 可以按自己的节奏推进版本升级,不必慢慢等待业务自己将其升级到最新版本;

  • 发现线上有版本存在问题,可以直接切换至确认没问题的新/旧版本,而不必拉群通知业务升/降级。

适用场景

  • 存在一种需要经常变更的公共逻辑

  • 此逻辑对网络延迟敏感

  • 此逻辑变更时希望业务方无感

比如在电商行业中,商品的优惠计算逻辑。不同的商品需要配置不同的优惠计算逻辑,此优惠逻辑经常随着时间发生变更;优惠计算请求频繁对延迟敏感;在变更优惠计算逻辑的同时不希望影响其它服务(商品、支付、购物车)。

综上可以看到插件模式由于实现成本不低,适用业务范围较窄,在使用的时候应谨慎评估ROI。

实现

  插件类型

  Go 原生插件

  基于 Go 原生的 plugin 机制(https://golang.org/pkg/plugin/),拥有与本地函数调用同样的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值