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

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对接系统的更多相关文章

  1. (转)转一份在 51testing 上的讨论——如何测试一个门户网站是否可以支持10万用户同时在线?

    转自:http://www.cnblogs.com/jackei/archive/2006/11/16/561846.html 这个帖子的内容比较典型,大家有兴趣可以也思考一下. 先是楼主提出问题: ...

  2. 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈 绝对值?相对值

    小结: 1. 常数时间内检索到最小元素 2.存储 存储绝对值?相对值 存储差异 3. java-ide-debug 最小栈 - 力扣(LeetCode)https://leetcode-cn.com/ ...

  3. [转]优化IIS7.5支持10万个同时请求的配置方法

    通过对IIS7的配置进行优化,调整IIS7应用池的队列长度,请求数限制,TCPIP连接数等方面,从而使WEB服务器的性能得以提升,保证WEB访问的访问流畅 通过对IIS7的配置进行优化,调整IIS7应 ...

  4. IIS服务器能支持10万并发

    服务器能支持10万并发由于一个项目的访问量越来越大,从原来的几百个,增加到现在50多万个每天,所以阿里的服务器也扛不住了,于是就想办法,查了N多资料,总结了以下方法,才解决这问题,每天一共访问量50多 ...

  5. Windows系统服务器IIS7.5 Asp.net支持10万请求的设置方法

    问题现象 ECS Windows系统服务器基于IIS搭建的网站由于IIS默认的配置,服务器最多只能处理5000个同时请求,访问量大时很容易导致报错: Error Summary:  HTTP Erro ...

  6. 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求

    原文:http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error Sum ...

  7. [转]让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求

    本文转自:http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error S ...

  8. 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求(转载)

    转自:http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error Sum ...

  9. 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万个同时请求

    具体设置如下: 1. 调整IIS 7应用程序池队列长度 由原来的默认1000改为65535. IIS Manager > ApplicationPools > Advanced Setti ...

  10. 让Windows Server 2008 + IIS 7+ ASP.NET 支持10万并发请求(转)

    转自:http://www.cnblogs.com/dudu/archive/2009/11/10/1600062.html 今天下午17点左右,博客园博客站点出现这样的错误信息: Error Sum ...

随机推荐

  1. Liunx安装eclipse-mosquitto之docker容器

    1.docker拉取 docker pull eclipse-mosquitto 2.查看镜像 docker images 3.建立配置目录 mkdir -p /mnt/mosquitto/confi ...

  2. Java学习笔记2-1

    2.对象容器(1)   今天学习一下Java里面的一些容器的基本功能,今天先来Arraylist. 一.Arraylist   容器类主要是为了存放一些按某些方式排列的对象,arraylist是一种容 ...

  3. Web _Servlet(url-pattern)的配置与优先级

    url-pattern的配置方式有三种: 1.完全路径匹配:以  '/'  开始 例: /ServletDemo1  , /aaa/ServletDemo2 , /aa/bb/ServletDemo3 ...

  4. [Leetcode 787]中转K站内最便宜机票

    题目 n个城市,想求从src到dist的最廉价机票 有中转站数K的限制,即如果k=5,中转10次机票1000,中转5次机票2000,最后返回2000 There are n cities connec ...

  5. JSqlParser解析SQL时SUM包裹IF出错

    SQL SELECT SUM(IF(1=1,1,0)) AS `result` FROM sys_user 这种会报错的. 错误信息 Caused by: net.sf.jsqlparser.JSQL ...

  6. org.xml.sax.SAXNotRecognizedException: SAX feature 'http://apache.org/xml/features/allow-java-encodings' not recognized.

    tomcat启动服务后,解析xml等文件会报错org.xml.sax.SAXNotRecognizedException: SAX feature 'http://apache.org/xml/fea ...

  7. Centos7安装nodejs(npm)

    执行命令: 设置yum安装源> curl --silent --location https://rpm.nodesource.com/setup_14.x | sudo bash (14是大的 ...

  8. 微信小程序中注册页面设计

    .wxml <text>姓名</text> <input placeholder="请输入姓名" bindinput="getname&qu ...

  9. 7. 基础增删改 - 使用Portal Webapi进行会员信息的增删改

    我们可以通过使用Portal Web API在Portal页面中跨所有Microsoft Dataverse表执行创建.更新和删除操作,下面我们就一起来看一下如何通过使用AJAX函数来进行操作. AJ ...

  10. MySql数据库的两大引擎InnoDB和MyIsam的区别

    事务方面 InnoDB支持事务,MyISAM不支持事务.MySql的默认存储引擎为InnoDB 外键方面 InnoDB支持外键,MyISAM不支持,对一个包含外键的InnoDB表转为MYISAM会失败 ...