【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

5 天内用户数破亿、增速碾压 ChatGPT,Twitter 劲敌 Threads 是如何构建的?

  • 2023-07-11
    北京
  • 本文字数:3012 字

    阅读完需:约 10 分钟

5天内用户数破亿、增速碾压ChatGPT,Twitter劲敌Threads是如何构建的?

小扎和马斯克的“格斗”,从八角笼中来到了社交平台上。


当地时间 7 月 5 日,Meta 旗下的 Instagram 正式发布 Threads,与 Twitter 展开直接竞争。据介绍,Threads 的定位是“用文本分享动态和加入公共对话”。应用上线后,Meta 公司首席执行官马克·扎克伯格“实时”公布 Threads 最新成绩:4 小时,注册用户 500 万;7 小时,注册用户 1000 万;24 小时,注册用户 3000 万;48 小时,注册用户 7000 万。

 

北京时间 7 月 10 日 15 点左右,据数据追踪网站 Quiver Quantitative 披露,Threads 的登录用户数已经突破 1 亿人。扎克伯格表示,这主要是自然需求,Threads 甚至还没有开展很多推广活动。这远远超出了预期。

 

而此时,距离 Threads 在美洲地区首发上线连 5 天整都没到。Threads 的注册用户增速也打破了此前 ChatGPT 留下的记录,后者用了 2 个月实现注册用户数破亿。此外,Threads 用户的活跃度也很高,据报道,过去几天 Threads 上的帖子数量已经达到 9500 多万条,点赞数 1.9 亿次。

 

投资银行 Evercore ISI 表示,虽然现在还处于早期阶段,但预计 Threads 可以为 Meta 带来可观的现金。Threads 有望在未来两年内覆盖近 2 亿的日活跃用户,并产生约 80 亿美元的年收入。

 

那么,这样一款现象级应用程序是如何构建的?

Threads 是如何构建的?

 

近日,国外工具分析平台 Emerge Tools 率先对 Threads App 进行了拆解分析,分别揭晓了 Android 版 Threads 以及 iOS 版 Threads 是如何构建的。

 

Emerge Tools 表示,Meta 投入大量资源对应用做移动性能优化。通过测试和分析,可以看到 Meta 的移动应用优化确实做得不错。Meta 采取的不少模式虽非典型的最佳实践,但凭借着强大的基础设施和工程能力,Meta 仍然在这场“以终为始”的性能大战中占据了主动。

拆解 Android、iOS 版 Threads 

 

Android 版 Threads 方面,跟其他 Meta 应用一样,Threads 也提供通用 APK 文件。虽然业界认为 AAB 才是最佳实践,但 Meta 还是选择了高度优化过的通用 APK——把资源、自定义打包共享库和 Redex 结合了起来。

 

Threads 还发布了调试代码。Threads 提供 com.instagram.debug.devoptions.sandboxselector 和 com.instagram..debug.quickexperiment 等调试包。

 

此外,Threads 在应用的某些部分使用了 React Native,- InstagramBundle.js.hbc.spk.xz 可能是 Hermes 字节码(js.hbc)的压缩版本。

 

其中有个很大的.spo 文件,看起来像是不同本机库的编译版本。其中附带一个元数据文件:

arm64-v8a/librtc.so 11336240 bda527a307edd868700fccfab15481f403d3f39363289d5d6a717579f284bed7arm64-v8a/libgojni.so 11330024 616915938eb1face6aa3392aedab8bddce280f2b84423377ac65896a6b3faad7arm64-v8a/libarfxgraphicsmerged.so 9710600 afb00aa881a63b20371e447dbbad61fefcf4df2c23c922a9e44e2171d7a649ad...
复制代码

 

Emerge Tools 猜测这个.spo 文件是所有本机库的合并版本,第二个条目是 offset/size,第三个条目则是 checksum。

 

UI 方面,根据 @richz(Threads 工程师)的帖子,Threads 主要用 Jetpack Compose 来构建自己的 UI。跟整个 dex 大小相比,dex 的组装部分相对较小(约 130 KB),所以也许能更高效地使用 Compose 并/或共享 Instagram 代码、控制实际代码量。



Threads 的 iOS 版有两点比较突出:

 

  1. Thredas 有 0 个动态库,而 Facebook 应用却大量使用动态框架。

  2. Threads 的插件体量几乎逼近人们的认知极限。其中 BarcelonaShareExtension 达到 81 MB。相比之下,最大的 Instagram 插件- InstagramNotificationExtension 也仅为 23.5 MB,InstagramShareExtension 则为 5.6 MB。

后端采用 Cinder,基于 Python 3.10 构建

 

此外,据 CPython 核心开发者 Łukasz Langa 透露,Threads 的后端使用了 Cinder,这是基于 Python 3.10 构建的高性能版本,其中包含 JIT、延迟加载模块、预编译静态模块,而且针对 Python 3.10 做出了一系列有趣的调整。



据了解,Cinder 是 Meta 内部打造的、强调高性能的 CPython 3.10 生产版本。其中包含多种性能优化,例如字节码内联缓存、协和即时评估、每次一个方法 JIT,以及使用类型注释在 JIT 中实现类型专用字节码、从而提高性能的实验性字节码编译器。

 

Cinder 目前已经在支持 Instagram,而且正越来越多被用在 Meta 公司的各类 Python 应用程序当中。Meta 表示,公开发布 Cinder 是为了推动将部分工作负载回流至 CPython 的讨论,同时努力减少 CPython 开发者在性能优化方面浪费的时间。

 

但 Cinder 本身尚不完善,也不是 CPython 的替代品,Meta 发布项目代码的唯一理由,就是想帮助 CPython 在速度方面更上一层楼。虽然 Meta 自己确实在生产环境中运行 Cinder,但无法为其他开发者提供生产层级的技术支持。只能保证 Cinder 在 Meta 自己的生产工作负载中稳定且快速,但不保证其在其他外部工作负载或用例中具有良好的稳定性、正确性或性能。

 

据介绍,Instagram 拥有非常庞大的 Python 代码库,所以由引用计数复制所带来的开销也极为沉重。为此,Cinder 开发出名为“不朽实例”(Immortal Instance)的解决方案,能够从引用计数中清退对象。此功能通过定义 Py_IMMORTAL_INSTANCES 进行控制,并在 Cinder 中默认启用。这对生产流程是一个巨大的胜利(节约开销约 5%),但也会令直接代码的运行速度变慢。由于引用计数操作会频繁发生,所以启用此功能前必须检查对象是否确实参与了引用计数。

Threads 的启动时间如何?

 

Emerge Tools 用 ETTrace 来查看 Threads 的实际启动时间。



使用 ETTrace 为 Threads 的启动过程生成火焰图。

 

Emerge Tools 表示,由于 Meta 公开的 build 混淆,能从栈中追踪到的信息不多。但仍然可以看到,其中存在大量 pre-main 时间(在追踪期间约为 50 毫秒)。

 

还有一个会在应用启动时初始化的 WKWebView,它的速度也相当慢。这意味着整个登录体验并非本机、而是在显示 webview,或者是出于追踪的目的而将登录放在了后台。

Threads 未来会“去 Instagram 化”吗?

 

分析发现,Threads 在 Android 和 iOS 两大平台上都照搬了不少 Instagram 代码,比如 InstagramBundle.js.hbc.spk.xz 等等。

 

其中,Android 版 Threads 与 Instagram 间的/assets/dsp 也是相同的。考虑到 Threads 与 Instagram 高度集成,二者共享代码也完全在情理之中。

 

此外,iOS 版 Threads 的 BarcelonaShareExtension 与 Instagram 的 FBSharedFramework 之间拥有很多相同元素。一些值得注意的相同元素:

 

  • FilterAsset.bundle;

  • ig_signals_cupid_better_recall_v1.mlmodelc 与 ig_signals_cupid_v2.mlmodelc;

  • 资产目录几乎完全相同。

 

作为一款新产品,Threads 的发布显然有些仓促。Threads 在 Android 和 iOS 两大平台上和 Instagram 共享大量代码,明显是为了加快开发速度。Threads 团队希望快速行动,在一切可能的位置直接使用 Instagram 那边的现成代码。在未来的发展中,Threads 会不会逐步“去 Instagram 化”值得关注。

 

目前,Threads 还缺少了一些关键功能,比如没有翻译按钮、不能搜索内容(只能搜索用户)、没有话题标签功能、没有编辑按钮(发布帖子后无法进行编辑)、不能私信等。Meta 产品副总裁 Connor Hayes 也承认,有一些功能没能赶上这次发布,它们会在日后更新时推出。

 

参考链接:

https://twitter.com/llanga/status/1676846870520291329

https://news.ycombinator.com/item?id=36612835

https://www.emergetools.com/deep-dives/threads

2023-07-11 13:494484

评论

发布
暂无评论
发现更多内容

如何保持积极

Ian哥

28天写作

Soul 源码阅读 01|数据同步

哼干嘛

Java Soul网关

DDD分层架构最佳实践

Barry的异想世界

Spring Boot DDD 架构设计 领域驱动设计DDD

架构师week9 作业

Geek_xq

盘点12个Python数据可视化库,通吃任何领域

博文视点Broadview

甲方日常 88

句子

工作 随笔杂谈 日常

Git学习【1】 -- 基本常用命令

秦怀杂货店

git GitHub

soul数据同步(一)概述及websocket同步策略

xzy

Soul网关 soul

HDFS杂谈:DFSAdmin Report解读

罗小龙

hadoop hdfs 28天写作 dfsadmin

创业统一战线 Jan 21, 2021

王泰

28天写作

存币生息钱包APP系统开发|存币生息钱包软件开发

系统开发

架构师week9 总结

Geek_xq

Go中的SSRF攻防战

Gopher指北

安全 Go 语言

如何成为分享高手(下)

熊斌

演讲 经验分享 成长笔记 28天写作

SpringCloud 从入门到精通14---OpenFeign服务调用

Felix

JavaScript对象

hao-kuai

JavaScript 继承 原型 原型链

响应号召,开始14天的居家隔离 | 视频号 28 天 (14)

赵新龙

28天写作

竟然输给了一款软件「幻想小说 13/28」

道伟

28天写作

苹果的董事长是谁?别去搜了,看这。

Justin

28天写作 冷知识

Python实用代码-无限级分类树状结构生成算法

穿甲兵

Python 算法

项目管理变更之交付目标的变化

L3C老司机

CWE 4.3:强化你的数据自我保护能力

华为云开发者联盟

网络安全 安全 数据保护 cwe gdpr

Soul 学习笔记---使用 zookeeper 实现数据同步(六)

fightingting

Soul网关

合约交易软件系统APP开发案例

系统开发

老龄化不可避免,灰犀牛是否可以成为黑天鹅?

JiangX

政策 28天写作 双循环 人口结构

远程探视正在取代亲自探视

anyRTC开发者

ios android 音视频 WebRTC 直播

突破存储瓶颈,打通高性能计算的“最后一公里“

浪潮云

高性能 存储

存在即合理

lidaobing

比特币 28天写作

Mybatis【13】-- Mybatis动态Sql标签的使用

秦怀杂货店

sql mybatis

【小菜学网络】交换机与MAC地址学习

fasionchan

网络编程 网络协议 TCP/IP 交换机

JavaScript函数

hao-kuai

JavaScript 闭包 Function 箭头函数

5天内用户数破亿、增速碾压ChatGPT,Twitter劲敌Threads是如何构建的?_编程语言_凌敏_InfoQ精选文章