日期:
来源:程序猿DD收集编辑:
出品 | OSC开源社区(ID:oschina2013)
由于一个开源库的错误,我们在 ChatGPT 中出现了一个重大问题,现在已经发布了一个修复程序,我们刚刚完成了验证。 一小部分用户能够看到其他用户的对话历史的标题。
技术细节
OpenAI 使用 Redis 在他们的服务器中缓存用户信息,所以 ChatGPT 不需要为每个请求检查数据库。 OpenAI 使用 Redis Cluster 将这一负载分布到多个 Redis 实例上。 OpenAI 使用 redis-py 库,以便让用了 Asyncio 的 Python 服务器与 Redis 对接。 该库在服务器和集群之间维护一个共享的连接池,并在完成后回收连接以用于另一个请求。 当使用 Asyncio 时,redis-py 的请求和响应表现为两个队列:调用者将请求推送到传入队列,并从传出队列中弹出响应,然后将连接返回到池中。 如果在请求被推送到传入队列之后,但在响应从传出队列中弹出之前,请求被取消,我们就会看到错误:连接因此被破坏,下一个为不相关的请求出列的响应可以接收连接中留下的数据。 在大多数情况下,这会导致一个无法恢复的服务器错误,而用户将不得不重新尝试他们的请求。 但在某些情况下,损坏的数据恰好与请求者所期望的数据类型相匹配,因此从缓存中返回的数据看起来是有效的,即使这些数据属于另一个用户。 在太平洋时间 3 月 20 日星期一凌晨 1 点,OpenAI 无意中给他们的服务器引入了一个变化,导致 Redis 请求取消的情况激增。这在一定程度上引发了每个连接返回错误数据的可能性。 这个错误只出现在 Redis Cluster 的 Asyncio redis-py 客户端,现在已经被修复。
推荐阅读
你好,我是程序猿DD,10年开发老司机、阿里云MVP、腾讯云TVP、出过书创过业、国企4年互联网6年。从普通开发到架构师、再到合伙人。一路过来,给我最深的感受就是一定要不断学习并关注前沿。只要你能坚持下来,多思考、少抱怨、勤动手,就很容易实现弯道超车!所以,不要问我现在干什么是否来得及。如果你看好一个事情,一定是坚持了才能看到希望,而不是看到希望才去坚持。相信我,只要坚持下来,你一定比现在更好!如果你还没什么方向,可以先关注我,这里会经常分享一些前沿资讯,帮你积累弯道超车的资本。