首页 > 其他分享 >【小白晋级大师】如何设计一个支持10万人用的ChatGPT对接系统

【小白晋级大师】如何设计一个支持10万人用的ChatGPT对接系统

时间:2023-03-31 21:25:20浏览次数:60  
标签:10 万人用 系统 注册 ChatGPT 交互 服务端 客户端

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

1.前言

之前给大家写了ChatGPT对接企业微信的教程,具体可看知乎链接:
【奶奶看了都会】ChatGPT3.5接入企业微信,可连续对话

文章结尾说了教程只能适用于小规模使用,网上能找到的其他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.具体实现

目前计划按上面的架构设计实现一版系统,代码不会开源,有使用需求的可以联系我

后续还会更新架构中用到的技术点的文章,大家可以点下关注,文章更新时会及时通知到的

标签:10,万人用,系统,注册,ChatGPT,交互,服务端,客户端
From: https://www.cnblogs.com/dnboy/p/17277483.html

相关文章

  • ATHK1001 分析思考
    ATHK1001ANALYTICTHINKING:ASSIGNMENT1,2023Duedate:11:59pmFriday,March31st(Week6).Latepenaltyof5%percalendardayapplies.Onlinesubmission:AllsubmissionsaretobemadeonlineontheATHK1001Canvaswebsite.Submissionswillbechecked......
  • 行业动态 | 第一个支持与 ChatGPT 进行面对面聊天的机器人女友(免费可聊)
    生成式AI急速发展GPT-4的上线、文心一言的发布、加上GPT-4植入Office全家桶,不少人感叹:我们每天醒来都被AI的快速发展所震惊,但是更多人感叹自己没有参与其中。国内可用!今天小A介绍一款新的机器人爱丽丝,这是一个免费的网页程序ChatD-ID——世界上第一个允许用户与数字人进行实时对......
  • 漏洞丨CVE20102883
    作者丨黑蛋一、漏洞描述此漏洞编号CVE-2010-2883,看着是一个很简单的栈溢出漏洞,但是也要看怎么玩了。这个漏洞是AdobeAcrobatReader软件中CoolType.dll在解析字体文件SING表中的uniqueName字段的调用了strcat函数,但是对参数没有做出判断,没有检查uniqueName字段长度,导致了栈溢出......
  • Codeforces Gym 103931F - Forest of Magic(时间轴分块+线段树合并)
    一个巨烦的时间轴分块做法,有点类似于P2137Gty的妹子树先考虑静态的情况。看上去就一脸线段树合并对吧?一次修改的操作对一个点\(x\)贡献可以写成\(k·dep_x+b\)的形式,开两棵线段树合并维护一次项和零次项系数即可。由于静态问题可做,因此考虑时间轴分块。设阈值\(B\),每\(B......
  • chatGPT----链接大全
      OpenAI:https://openai.com/blog/chatgpt/百度文心:https://wenxin.baidu.com/CSDN(调用text-davinci-003模型):https://so.csdn.net/so/chatNewBing:https://www.bing.com/newChatGPT官网:https://chat.openai.comChatGPT注册:https://ata.alibaba-inc.com/articles/253211......
  • windows使用/服务(10)Win11预览版退回正式版方法介绍
    闲的没事把系统win11:21H2正式稳定版本升级到22H2内部测试版,不太习惯而且还是个滚动发行版不稳定,回退到之前版本Win11将预览版返回到正式版的方法1.右击“计算机”选择“属性”,选择“winodws更新”选择“高级选项”。2.然后点击“恢复”,再点击“高级启动”下的“重启”。3.......
  • chatGPT
    NLP(自然语言处理)         ......
  • LeetCode 100 相同的树
    LeetCode|100.相同的树给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。示例1:输入:p=[1,2,3],q=[1,2,3]输出:true示例2:输入:p=[1,2],q=[1,null,2]输出:false示例3:输入:p......
  • PAT Basic 1057. 数零壹
    PATBasic1057.数零壹1.题目描述:给定一串长度不超过 \(10^5\) 的字符串,本题要求你将其中所有英文字母的序号(字母a-z对应序号1-26,不分大小写)相加,得到整数N,然后再分析一下N的二进制表示中有多少0、多少1。例如给定字符串 PAT(Basic),其字母序号之和为:16+1+20+2+1+19......
  • 面向chatgpt运维:根据自定义的日志统计访问用户数
    Craftedby[Genie](https://marketplace.visualstudio.com/items?itemName=genieai.chatgpt-vscode)You如何使用awk统计访问用户数,我的日志格式如下:{"level":"info","ts":"2023/03/3108:58:03","msg":"/api/v1/goods/project&quo......