微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路

本文由微信开发团队工程师“ kellyliang”原创发表于“微信后台团队”公众号,收录时有修订和改动。

1、引言

随着直播和类直播场景在微信内的增长,这些业务对临时消息(在线状态时的实时消息)通道的需求日益增长,直播聊天室组件应运而生。直播聊天室组件是一个基于房间的临时消息信道,主要提供消息收发、在线状态统计等功能。

本文将回顾微信直播聊天室单房间海量用户同时在线的消息组件技术设计和架构演进,希望能为你的直播聊天互动中的实时聊天消息架构设计带来启发

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_1.jpg

本文已同步发布于“即时通讯技术圈”公众号,欢迎关注。公众号上的链接是:点此进入

2、相关文章

  • 《腾讯QQ1.4亿在线用户的技术挑战和架构演进之路PPT》
  • 《移动端IM中大规模群消息的推送如何保证效率、实时性?》
  • 《现代IM系统中聊天消息的同步和存储方案探讨》
  • 《以微博类应用场景为例,总结海量社交系统的架构设计步骤》
  • 《一套高可用、易伸缩、高并发的IM群聊、单聊架构方案设计实践》
  • 《阿里技术分享:电商IM消息平台,在群聊、直播场景下的技术实践》
  • 《一个WebSocket实时聊天室Demo:基于node.js+socket.io [附件下载]》

3、1500万在线的挑战

视频号直播上线后,在产品上提出了直播后台需要有单房间支撑1500w在线的技术能力。接到这个项目的时候,自然而然就让人联想到了一个非常有趣的命题:能不能做到把13亿人拉个群?

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_2-0.png
本文将深入浅出地介绍聊天室组件在演进过程的思考,对这个命题做进一步对探索,尝试提出更接近命题答案的方案。

4、直播聊天室1.0架构


微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_2.png

如上图所示,可以看到直播聊天室1.0架构还比较原始和直接,没有太多复杂的技术应用。

这套架构诞生于2017年,主要服务于微信电竞直播间,核心是实现高性能、高实时、高可扩展的消息收发架构。

5、消息扩散方案选型:读扩散


微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_3.png

微信中标准的群消息使用的是写扩散机制,而直播聊天室跟微信标准群聊有着巨大的差异。

而且,对于同一人而言,同一时间只能关注一个聊天室,决定了直播聊天室中的消息扩散方案应该使用读扩散的机制。

6、longpolling(长轮询)机制


微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_4.png

为了让用户需要实时同步到新消息,我们采用的是longpolling模式

很多人会疑惑为什么不用websocket,原因有3个:

  • 1)websocket主要考虑推模式,而推模式则有可能丢,做到不丢还是有需要拉模式来兜底;
  • 2)推模式下,需要精准维护每个时刻的在线列表,难度很大;
  • 3) longpolling本质是一个短连,客户端实现更简单。

7、无状态cache的设计

很明显,单纯的读扩散,会造成巨大读盘的压力。按照国际惯例,这里理所应当地增加了一个cache,也就是上面架构图中的recvsvr。

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_5.png

普通的cache都是有状态的、可穿透的,对经常会出现突发流量的聊天室不是特别友好。而通过异步线程任务,恰好可以解决这两个点。

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_6.png

① 实时通知:发送消息时,在写入列表后,向recvsvr集群发送通知。

② 异步拉取:recvsvr机器收到通知后,触发异步线程拉取。

③ 兜底轮询:当recvsvr机器上接收到某个聊天室的请求时,触发该聊天室的轮询,保证1s内至少访问一次消息列表,避免通知失效导致无法更cache,同时做到机器启动时数据的自动恢复:
微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_7.png

④ 无锁读取:通过读写表分离和原子切换,做到消息的无锁读取:
微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_8.png

⑤ sect化部署:群数量增多时,扩sect可以把群分摊到新的sect上。

无状态消息cache的设计,不仅极大地提高了系统的性能,而且帮助聊天室建立了一个高扩展性消息收发架构。

8、技术痛点

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_9.png

尽管做到了高性能的消息收发,1.0版本却并不能实现单房间1500w同时在线的目标。

通过对整个架构和逻辑进一步的分析,我们发现4个阻碍我们前进的痛点:

  • 1)大直播间里,消息信道不保证所有消息都下发,连麦成功信令丢失会使得连麦功能不可用,大礼物打赏动画信令丢失会带来客诉;
  • 2)一个房间的在线列表,是由recvsvr把最近有收取该房间的消息的user聚合到同一台statsvr得到的,有单点瓶颈,单机失败会导致部分房间在线数跳变、在线列表和打赏排行榜不可用等;
  • 3)没有提供历史在线人数统计功能;
  • 4)裸的longpolling机制在消息一直有更新的情况下,无法控制请求量。

9、直播聊天室2.0架构


微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_10.png

从上面分析的痛点,我们得出了聊天室2.0需要解决的问题:

  • 1)解决丢重要信令问题,保证热点访问下功能的可靠性;
  • 2)解决在线统计的单点瓶颈,保证热点访问下在线统计模块的可扩展性;
  • 3)实现一个高效准确的历史在线统计,保证大数据量下统计的高性能和准确性;
  • 4)灵活把控流量,进一步提升隔离和容灾能力,保证热点访问下系统的可用性。

10、优先级消息列表


微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_11.png

丢信令的本质原因:recvsvr只保留最近2000条消息,大直播间里,有些消息客户端还没来的及收就被cache淘汰了。

在聊天室1.0版本,我们已经证实了写扩散不可行,因此这里也不可能通过写扩散解决。

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_12.png

另外一个比较直观的方案:是将重要的系统信令写到另外一个列表里面,recvsvr同时读取两个消息表。带来的消耗是recvsvr对kv层增加将近一倍的访问量。于是,我们思考有没有更优的方案。

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_13.png

回到1.0版本的一个方案细节:我们可以看到大部分情况下,当新消息到来的时候,recvsvr它都是能及时感知到的,因此recvsvr一次拉取到的消息条数并不会很多,因此这一步骤上不会丢消息。

所以我们是可以把消息表这个操作收归到recvsvr里面的:
微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_14.png

① 打优先级标记 :依然只写一张消息表,给重要的信令打上优先级标记。(目的:节省RPC消耗

② cache内分表:recvsvr拉到消息后分开普通消息列表和重要消息列表;(目的:最小化改动

③ 优先收取:收取时分normal seq和important seq,先收重要消息表,再收取普通消息表。(目的:优先下发

通过一个简单的优化,我们以最小的改造代价,提供到了一条可靠的重要消息信道,做到了连麦和大礼物动画的零丢失。

11、分布式在线统计

11.1 写共享内存,主从互备


微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_15.png

参考微信设备在线模块,我们可以有这个一个方案:

  • ① 分sect,一个直播间选一个sect;
  • ② 按roomid选一台机作为master, 读写该机器的共享内存;
  • ③ master把这个roomid的数据同步到sect内其它机器,master挂了的情况可以选其它机器进行读写。

上述方案的优缺点:

  • 1)优点:解决了换机跳变问题。
  • 2)缺点:主备同步方案复杂;读写master,大直播间下依然有单机热点问题。

结论:用分布式存储作为数据的中心节点

11.2 写tablekv
微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_16.png

如上图所示:

  • ① 用tablekv的一个表来存在线列表,每行记录用户id和活跃时间;
  • ② 定期更新用户的心跳时间,维护在线。

上述方案的优缺点:

  • 优点:解决了换机跳变问题,数据做到了分布式;
  • 缺点:1500w在线10s心跳一次 => 9000w/min,穿透写单表有并发和性能问题;离线不会实时从磁盘删数据,历史活跃人数远大于当前在线,造成数据冗余。

逐点击破,单key是可以通过拆key来解决的,数据冗余可以通过key-val存储做全量替换解决,而穿透问题其实可以参考recvsvr的实现方式。

因此,我们得到一个比较好的方案:拆key + 读写分离 + 异步聚合落盘

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_17.png

① 分布统计 :

  • (1) 每台机负责部分在线统计;
  • (2) 每台机内按uin哈希再分多shard打散数据;
  • (3) 每个shard对应kv的一个key;

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_18.png

② 组合数据:让每台机都拉取所有key的数据,组合出一个完整的在线列表:
微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_19.png

③ 异步聚合更新:心跳只更新内存,异步任务清理离线用户,并把列表序列化到一个key的val。

④ 异步拉取:由异步任务来执行②的拉取和组合数据。

⑤ 原子切换:完整的在线列表做双指针,利用原子操作无锁切换,做到无锁查询。

由此,我们提高了心跳更新和在线查询的性能,做到了在线统计模块的分布式部署和可平行扩展。

12、基于hyperloglog的历史在线统计

12.1 需求

历史在线统计,是要曾经看过该直播的用户数uv,在产品上的体验就是视频号直播的“xxx人看过”。

在分布式在线统计的章节,我们已经谈到了,用tablekv来记录成员列表是不太可行的。

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_20.png

另外一个想法:是利用bloomfilter做数据压缩和去重统计,额外去维护一个count做累加。

那么这里有两点:

  • 一是bloomfilter和count之间要考虑一致性问题;
  • 二是bloomfilter准确率跟压缩率相关,较好的准确率还是需要比较大的数据量。

于是我们调研了业界的一些uv统计方案,最终找到了redis的hyperloglog,它以极小的空间复杂度就能做到64位整形级别的基数估算。

12.2 hyperloglog是什么?

hyperLogLog 是一种概率数据结构,它使用概率算法来统计集合的近似基数,算法的最本源则是伯努利过程。

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_21.png

伯努利过程:设一个硬币反面为0,正面为1,抛一枚硬币直到结果为1为止。

如果做n次伯努利实验,记录每次伯努利过程需要抛硬币的次数为Ki,则可以估算:n=2^Kmax

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_22.png

hyperloglog对Kmax的计算进行了分桶和调和平均值优化,使得在准确率比裸的伯努利估算要高。

优化的主要内容:

  • ① 将要统计的数据hash成一个64位整形;
  • ② 用低14位来寻找桶的位置;
  • ③ 剩下的高位里寻找第一个1出现的位置,作为上述伯努利过程的Ki;
  • ④ 对桶的值进行更新 Rj = max(Rj, Ki);
  • ⑤ 估算时,对各个桶的值算调和平均值DV来替代上述的Kmax。

从上述算法的描述来看:hyperloglog无非就是存了m个桶的数值(m=10000+),本来空间复杂度也不高了。再通过一些位压缩,hyperloglog把整个数据结构优化到了最大空间复杂度为12K。

12.3 tablekv+hyperloglog双管齐下

由于hyperloglog产生的毕竟是近似值,基数较少的时候误差会更明显,所以我们可以用tablekv来补全历史在线数较小时的体验。

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_23.png

  • ① 历史在线数较小时,双写tablekv + hyperloglog,以tablekv selectcount为准;
  • ② 历史在线数较大时,只写hyperloglog,以hyperloglog估算值为准;
  • ③ 在线统计模块定期把在线列表merge到hyperloglog避免丢数据。

最终我们达到的效果是:历史在线不超过1w时完全准确,超过1w时准确率大于95%

13、流量隔离vipsect


微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_24.png

大家都知道:大直播间会带来爆发式的请求量,我们不能让大直播间引起的失败影响占大多数的小直播间。

另外:大直播间影响力大,也要去保证它的良好体验,那需要用比小直播间更多的机器去支撑。

而且:聊天室对kv层的请求数,跟机器数成正比,小直播间在多机器下会造成大量不必要的消耗。

对于这种情况:我们参考了微信支付应对大商户和小商户的方法,流量隔离,在聊天室的里设立vip sect。

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_25.png

如上图所示:

  • ① 对可预测的大直播提前加白,直接走vip sect;
  • ② 其它直播直走普通sect;
  • ③ 大小直播策略分级,大直播在线列表才拆key。

虽然还有些依赖运营,但是通过这种方式,我们切走大部分的大直播流量,也降低了整个系统对kv层的压力。

那么:为什么不做自动切vip sect ?

这是一个future work,目前有了一些初步方案,还需要去验证切换过程带来影响,进一步细化策略,也欢迎大家提出宝贵建议。

14、自动柔性下的流量把控


微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_26.png

在longpolling(长轮询)的机制下(见本文第6节),直播间一直有消息的话,100w的在线每分钟至少会产生6kw/min的请求,而1500w更是高达9亿/min。logicsvr是cpu密集型的服务,按30w/min的性能来算,至少需要3000台。

所以这个地方必须要有一些柔性措施把控请求量,寻找一个体验和成本的平衡点。

而这个措施一定不能通过logicsvr拒绝请求来实现,原因是longpolling机制下,客户端接收到回包以后是会马上发起一次新请求的。logicsvr拒绝越快,请求量就会越大,越容易造成滚雪球。

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_27.png

图片回到longpolling机制,我们可以发现,正常运行下,recvsvr没有新消息时,是可以让请求挂在proxy层hold住,等待连接超时或者longpolling notify的。

所以,我们可以利用这个特性,柔性让请求或者回包在proxy hold一段时间,来降低请求频率。

微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_28.png

如上图所示:

  • ① 根据不同的在线数设定收取间隔;
  • ② 客户端上下文里增加字段,记录上一次成功收取的时间;
  • ③ 成功收取后的一个时间间隔内,请求hold在proxy层;
  • ④ 根据不同的在线数丢弃longpolling notify。

根据400w在线的压测效果:开启自适应大招时触发8~10s档位,请求量比没有大招的预期值降低58%,有效地控制了大直播间对logicsvr的压力。

15、成果展示

1)支撑多个业务稳定运行:
微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_29.jpg

2) 压测1500w同时在线:
微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路_30.jpg

16、参考文献

[1] https://zhuanlan.zhihu.com/p/77289303
[2] https://www.jianshu.com/p/4748af30d194

17、小结与展望

我们通过抽象问题、精准分析、合理设计完成了liveroom2.0的迭代,从性能、可靠性、可扩展性、容灾等方面达到支撑单房间1500w同时在线甚至更高在线的标准。

在未来我们将继续优化,比如实现大房间自动从普通sect切换到vip sect,比如针对房间内个人的重要消息通道,使聊天室的功能和架构更加强大。

附录:微信、QQ团队分享的其它技术资料

微信朋友圈千亿访问量背后的技术挑战和实践总结
微信团队分享:微信移动端的全文检索多音字问题解决方案
微信团队分享:iOS版微信的高性能通用key-value组件技术实践
微信团队分享:iOS版微信是如何防止特殊字符导致的炸群、APP崩溃的?
微信团队原创分享:iOS版微信的内存监控系统技术实践
iOS后台唤醒实战:微信收款到账语音提醒技术总结
微信团队分享:视频图像的超分辨率技术原理和应用场景
微信团队分享:微信每日亿次实时音视频聊天背后的技术解密
微信团队分享:微信Android版小视频编码填过的那些坑
微信手机端的本地数据全文检索优化之路
企业微信客户端中组织架构数据的同步更新方案优化实战
微信团队披露:微信界面卡死超级bug“15。。。。”的来龙去脉
QQ 18年:解密8亿月活的QQ后台服务接口隔离技术
月活8.89亿的超级IM微信是如何进行Android端兼容测试的
一篇文章get微信开源移动端数据库组件WCDB的一切!
微信客户端团队负责人技术访谈:如何着手客户端性能监控和优化
微信后台基于时间序的海量数据冷热分级架构设计实践
微信团队原创分享:Android版微信的臃肿之困与模块化实践之路
微信后台团队:微信后台异步消息队列的优化升级实践分享
微信团队原创分享:微信客户端SQLite数据库损坏修复实践
微信Mars:微信内部正在使用的网络层封装库,即将开源
如约而至:微信自用的移动端IM网络层跨平台组件库Mars已正式开源
开源libco库:单机千万连接、支撑微信8亿用户的后台框架基石 [源码下载]
微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解
微信团队原创分享:Android版微信后台保活实战分享(进程保活篇)
微信团队原创分享:Android版微信后台保活实战分享(网络保活篇)
Android版微信从300KB到30MB的技术演进(PPT讲稿) [附件下载]
微信团队原创分享:Android版微信从300KB到30MB的技术演进
微信技术总监谈架构:微信之道——大道至简(演讲全文)
微信技术总监谈架构:微信之道——大道至简(PPT讲稿) [附件下载]
如何解读《微信技术总监谈架构:微信之道——大道至简》
微信海量用户背后的后台系统存储架构(视频+PPT) [附件下载]
微信异步化改造实践:8亿月活、单机千万连接背后的后台解决方案
微信朋友圈海量技术之道PPT [附件下载]
微信对网络影响的技术试验及分析(论文全文)
一份微信后台技术架构的总结性笔记
架构之道:3个程序员成就微信朋友圈日均10亿发布量[有视频]
快速裂变:见证微信强大后台架构从0到1的演进历程(一)
快速裂变:见证微信强大后台架构从0到1的演进历程(二)
微信团队原创分享:Android内存泄漏监控和优化技巧总结
全面总结iOS版微信升级iOS9遇到的各种“坑”
微信团队原创资源混淆工具:让你的APK立减1M
微信团队原创Android资源混淆工具:AndResGuard [有源码]
Android版微信安装包“减肥”实战记录
iOS版微信安装包“减肥”实战记录
移动端IM实践:iOS版微信界面卡顿监测方案
微信“红包照片”背后的技术难题
移动端IM实践:iOS版微信小视频功能技术方案实录
移动端IM实践:Android版微信如何大幅提升交互性能(一)
移动端IM实践:Android版微信如何大幅提升交互性能(二)
移动端IM实践:实现Android版微信的智能心跳机制
移动端IM实践:WhatsApp、Line、微信的心跳策略分析
移动端IM实践:谷歌消息推送服务(GCM)研究(来自微信)
移动端IM实践:iOS版微信的多设备字体适配方案探讨
IPv6技术详解:基本概念、应用现状、技术实践(上篇)
IPv6技术详解:基本概念、应用现状、技术实践(下篇)
微信多媒体团队访谈:音视频开发的学习、微信的音视频技术和挑战等
腾讯技术分享:微信小程序音视频技术背后的故事
微信多媒体团队梁俊斌访谈:聊一聊我所了解的音视频技术
腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践
手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)
微信技术分享:微信的海量IM聊天消息序列号生成实践(算法原理篇)
微信技术分享:微信的海量IM聊天消息序列号生成实践(容灾方案篇)
微信团队分享:Kotlin渐被认可,Android版微信的技术尝鲜之旅
社交软件红包技术解密(二):解密微信摇一摇红包从0到1的技术演进
社交软件红包技术解密(三):微信摇一摇红包雨背后的技术细节
社交软件红包技术解密(四):微信红包系统是如何应对高并发的
社交软件红包技术解密(五):微信红包系统是如何实现高可用性的
社交软件红包技术解密(六):微信红包系统的存储层架构演进实践
社交软件红包技术解密(十一):解密微信红包随机算法(含代码实现)
微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结
IM“扫一扫”功能很好做?看看微信“扫一扫识物”的完整技术实现
微信团队分享:微信支付代码重构带来的移动端软件架构上的思考
IM开发宝典:史上最全,微信各种功能参数和逻辑规则资料汇总
微信团队分享:微信直播聊天室单房间1500万在线的消息架构演进之路
>> 更多同类文章 ……

本文已同步发布于“即时通讯技术圈”公众号。

▲ 本文在公众号上的链接是:点此进入。同步发布链接是:http://www.52im.net/thread-3376-1-1.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22872.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有哪些值得关注的AIGC细分方向?

(以下内容,来自咱们社群“AI产品经理大本营” 1月12日的团员内部讨论;本文不求大而全,但会有一些大家“没听说过的一手信息input”)‍‍‍‍ 【参与团员】 A:某司 负责 AIGC B:某司 负责 医疗AI…

音视频技术开发周刊 | 282

每周一期,纵览音视频技术领域的干货。 新闻投稿:contributelivevideostack.com。 畅谈音视频未来无限可能,2022音视频技术大会北京站 最新日程公布 2023年3月31日-4月1日,LiveVideoStackCon 2022音视频技术大会北京站,…

chatgpt赋能Python-python_cdo

Python-CDO: 数据处理的超棒工具 Python-CDO是一种极为实用的工具,用于在Python中使用CDO(Climate Data Operators)命令。CDO是一个功能强大的工具,用于处理气候和气象大型数据集,如Satellite and Reanalysis数据。而…

时间序列分析——基于R | 第2章 时间序列的预处理习题代码

时间序列分析——基于R | 第2章 时间序列的预处理习题 1.考虑序列{1,2,3,4,5,…,20} 1.1判断该序列是否平稳 x <- seq(1,20);x ## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 1.2样本自相关系数 max_lag <- 6 acf_x <- acf(x, lag.max max_l…

Google 人机验证(reCaptcha)无法显示解决方案

Google 人机验证无法显示解决方案 第一步 安装插件Chrome/Edge 电脑版Firefox 电脑版 第二步 配置插件原理参考文章 前言&#xff1a;为了防止机器人攻击&#xff0c;国外很多网站都使用了 Google reCaptcha 验证码。reCaptcha 对于国外用户非常的友好&#xff0c;但是… 对于国…

解决谷歌人机验证(Captcha)显示问题

文章目录 前言一、Header Editor 下载、安装与配置1. 插件下载2. 插件安装3. 插件配置 前言 由于谷歌服务在国内不可用&#xff0c;所以正常访问时某些网址时&#xff0c;经常会出现需要人机验证的问题&#xff0c;影响正常使用。在不使用科学上网的情况下&#xff0c;我们可以…

利用Python解决掉谷歌人机验证,全自动识别真的牛啊

一、接触前感受 第一次带我领略yolov5风骚的是这个视频&#xff1a;【亦】警惕AI外挂&#xff01;我写了一个枪枪爆头的视觉AI&#xff0c;又亲手“杀死”了它。 这样一来&#xff0c;我对人工智能打游戏产生了浓厚的兴趣&#xff0c;于是在B站查找人工智能基础&#xff0c;随便…

【开源项目】ChatGPT智能聊天系统后台管理解析

ChatGPT是likeshop近期新研发出来的一款AI智能聊天对话的产品&#xff0c;此系统是基于likeadmin-PHP开发的智能对话系统&#xff0c;ChatGPT是一种基于人工智能技术的聊天机器人&#xff0c;它可以与用户进行自然语言对话&#xff0c;提供各种服务和答案。ChatGPT的核心技术是…

checkra1n越狱工具下载地址

https://checkra.in/releases/ 虚拟机 checkra1n -26和-31错误 不支持虚拟机,需要在黑苹果&#xff0c;Ra1nUSB&#xff0c;Linux下越狱 AMD的黑苹果&#xff0c;错误&#xff0d;31&#xff0c; AMD的CPU使用checkra1n越狱黑苹果会报错-31 适用系统iOS13-13.3.1基本都是…

RabbitMQ快速实战以及核心概念详解

RabbitMQ快速实战以及核心概念详解 一、MQ介绍 1、什么是MQ&#xff1f;为什么要用MQ&#xff1f; ChatGPT中对于消息队列的介绍是这样的&#xff1a; 什么是消息队列 消息队列是一种在应用程序之间传递消息的技术。它提供了一种异步通信模式&#xff0c;允许应用程序在不同…

闰秒终于要取消了!一文详解其来源及影响

导读 | 第27届国际计量大会宣布最迟不晚于2035年取消引入闰秒&#xff0c;这一消息引起轰动。上一次闰秒产生&#xff0c;对Reddit、Mozilla、FourSquare等都产生了一定的问题&#xff0c;其中Reddit宕机时间超过1个半小时&#xff01;本栏目特邀腾讯后台开发工程师陶松桥&…

GPT-5暂时来不了 OpenAI悄然布局移动端

OpenAI彻底用GPT-4带火自然语言大模型后&#xff0c;互联网科技行业的大头、小头都在推出自家的大模型或产品。一时间&#xff0c;生成式AI竞速赛上演&#xff0c;“吃瓜群众”也等着看谁能跑赢OpenAI。 坊间预测&#xff0c;干掉GPT-4的还得是GPT-5。结果&#xff0c;OpenAI的…

悄然招募移动端工程师 OpenAI矛头调向移动端

2022年底&#xff0c;人工智能程序ChatGPT爆火&#xff0c;上线短短两月&#xff0c;就获1亿月度活跃用户&#xff0c;成为历史上增长最快的面向消费者的应用。随后全球的科技巨头都热火朝天地入局自然语言大模型赛道。不过推出ChatGPT的人工智能巨头OpenAI目前并不打算训练GPT…

马斯克宣布打造 ChatGPT 竞品!OpenAI CEO 给他泼了一盆冷水,GPT-5 或将大变

无脑增加 模型规模 已经落伍 当你在 ChatGPT 或者新 bing 里输入一个问题&#xff0c;AI 会调用它的云端大脑&#xff0c;思索一番&#xff0c;生成一段较为合理的回答。 而在 OpenAI 开发 GPT 时&#xff0c;也反复提到了参数正变得庞大&#xff0c;模型的规模也在逐代变得复…

死磕数据库系列(二十六):MySQL 高可用之单主、双主模型组复制配置实践

点关注公众号&#xff0c;回复“1024”获取2TB学习资源&#xff01; 前面我们学习&#xff1a;MySQL 高可用之组复制&#xff08;MGR&#xff09;技术的相关原理知识&#xff0c;今天我将详细的为大家介绍 MySQL 高可用技术组复制的单主、双主两种模型下的原理及配置相关知识&a…

chatgpt赋能python:Python中三角函数的使用

Python中三角函数的使用 介绍 Python是一种非常流行的编程语言&#xff0c;因为它非常易于学习和使用。Python中有很多实用的库和模块&#xff0c;可以帮助开发人员更轻松地完成各种任务。其中包括Python的数学库&#xff0c;其中包括三角函数。 三角函数是最基本的数学函数…

断网了,还能ping通 127.0.0.1 吗?[localhost与127.0.0.1区别]

1.应用场景 主要用于学习了解localhost 与 127.0.0.1的区别&#xff0c; 本质. 以及计算机关于本机地址是如何工作的。 为什么要有这个地址。 2.学习/操作 1.文档阅读 断网了&#xff0c;还能ping通 127.0.0.1 吗&#xff1f; 开发环境- 配置虚拟主机域名/hosts文件 2.整理输…

反调试与反反调试

参考文本 (190条消息) C 反反调试&#xff08;NtQueryInformationProcess&#xff09;_(-: LYSM :-)的博客-CSDN博客 Windows 平台反调试相关的技术方法总结—part 2 - 先知社区 C/C MinHook 库的使用技巧 - lyshark - 博客园 (cnblogs.com) (177条消息) C 反反调试&#x…

哈工大2023春计算机系统大作业:程序人生-Hello‘s P2P

摘要&#xff1a;以hello.c程序为例&#xff0c;文章探究了从C语言代码文件到进程回收这一过程。基于Linux操作系统&#xff0c;运用gcc&#xff0c;edb等工具&#xff0c;详细介绍了程序编译的流程&#xff0c;分析了运行可执行文件时系统的进程管理与存储管理原理与机制&…

Transformer模型的基础演算

作者 | Quentin Anthony、Stella Biderman、Hailey Schoelkopf OneFlow编译 翻译 | 贾川、徐佳渝、杨婷 1 引言 Transformer语言模型的许多基本重要信息可以通过简单计算得出。不幸的是&#xff0c;这些计算公式在自然语言处理&#xff08;NLP&#xff09;社区中并不广为人知。…