乐趣区

关于后端:小白晋级大师如何设计一个支持10万人用的ChatGPT对接系统

不停地书写,方能不失在人海茫茫。

1. 前言

之前给大家写了 ChatGPT 对接企业微信的教程,具体可看知乎链接:https://zhuanlan.zhihu.com/p/611555021

文章结尾说了教程只能实用于小规模应用,网上能找到的其余 ChatGPT 对接钉钉、飞书、自定义网页等等教程,原理都是一样的,写个直达程序,在 ChatGPT 和你用的交互工具之间直达一遍。是个简略的单体零碎,逻辑看下图

这种单体零碎设计简略,很快就能开发实现并利用。毛病就是性能瓶颈限度在单台服务器上,无奈反对高并发场景,举例说明,当初有 10 万人要用这个零碎,零碎会间接解体。

2. 分布式 ChatGPT 对接零碎

基于此,咱们须要设计一个分布式系统,整体架构看下图

2.1 交互层

交互层就不多说了,就是用户间接应用 ChatGPT 的工具,能够是企业微信、钉钉、网页等等。这些工具都有对应的官网文档,简略说就是输出和输入接口

2.2 客户端层

  • 负责接管交互层传入的文本信息,转发给服务端;
  • 同时接管服务端的响应信息,回传给交互工具;
  • 缓存对话上下文,反对间断对话

这里的构想是客户端有多个申请入口,比方每个公司都有本人的企业微信,给每个公司调配指定 IP 的客户端。

这样做的益处是流量入口不会繁多,不须要再做一层负载平衡流量散发。链路图可参考上面:

2.3 注册核心

注册核心的作用:

  • 服务注册:服务端启动后,将本人的信息注册到注册核心,包含 IP、端口、服务接口等。
  • 服务发现:客户端通过注册核心获取路由表,查问服务端的 IP 和端口,从而调用服务
  • 负载平衡:均衡流量,将客户端申请服务端的流量按特定散发策略,调配到不同的服务器上
  • 服务健康检查:保护注册核心和服务端的心跳查看,在某个实例故障时能从注册核心上移除,防止服务调用失败

简略地说,有了注册核心后,可通过给服务端程度扩容晋升零碎的并发能力,能反对更多人应用零碎。

2.4 服务端

服务端作用:

  • 接管客户端传入的信息,包含:对话上下文、GPT key
  • 和 ChatGPT API 交互,接管 API 回传的信息文本,并回传给客户端
  • 服务降级,反对手动降级,在 ChatGPT 不可用时,能降级到 ChatGLM、文心一言等等对话大模型,保障对话性能依然可用。

2.5 数据存储层

次要作用:

  • 存储对话上下文数据
  • 反对数据设置过期工夫,到期主动删除
  • 要求读取数据和写入数据响应工夫短

3. 技术选型

零碎整体架构设计完后,具体用哪种语言去实现就依据本人善于的了,这里说说我用的

  • RPC 框架:Dubbo
  • 编程语言和框架:Java8、SpringBoot
  • 存储中间件:Redis
  • 注册核心:Nacos
  • 链路追踪和服务监控:Skywalking(可选)
  • 代码托管和自动化部署:阿里云 - 云效

4. 具体实现

目前打算按下面的架构设计实现一版零碎,有应用需要的能够分割我

后续还会更新架构中用到的技术点的文章,欢送大家继续关注

退出移动版