50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

Apple 完成了关键生态系统服务到 Swift 的迁移,性能提升了 40%

作者:Matt Foster

  • 2025-06-14
    北京
  • 本文字数:1148 字

    阅读完需:约 4 分钟

大小:574.53K时长:03:16
Apple完成了关键生态系统服务到Swift的迁移,性能提升了40%

苹果公司已将其全球密码监控服务从 Java 迁移到 Swift,实现了吞吐量增加 40%,并显著减少了内存使用量——释放了近 50%之前分配 Kubernetes 的容量。

 

最近的一篇文章中,苹果工程师详细说明了重写如何帮助服务扩展到每天数十亿次请求,同时提高了响应能力和可维护性。团队提到,较低的内存开销、更好的启动时间和简化的并发性是选择 Swift 而不是进一步优化 JVM 的关键原因。

 

Swift 使我们能够编写更小、更简洁、更具表现力的代码库(代码行数减少了近 85%),这些代码库在优先考虑安全性和效率的同时具有高度的可读性。

 

苹果的密码监控服务是更广泛的密码应用生态系统的一部分,负责安全地检查用户保存的凭据是否出现在已知的数据泄露中,而不会向苹果泄露任何私人信息。它每天处理数十亿次请求,使用隐私保护协议进行密码学比较。

 

这种工作负载需要高计算吞吐量、严格的延迟限制和跨区域的弹性伸缩。一天之内的流量波动很大,区域峰值差异高达 50%。为了适应这些波动,系统必须能够快速启动或关闭实例,同时保持低延迟响应。

 

苹果之前的 Java 实现难以满足服务不断增长的性能和可扩展性需求。垃圾收集在负载下导致不可预测的暂停时间,降低了延迟一致性。从 JVM 初始化、类加载和即时编译的启动开销,减缓了系统实时扩展的能力。此外,服务的内存占用量通常每个实例达到数十 GB,降低了基础设施效率并增加了运营成本。

 

Swift 最初是作为苹果平台的客户端语言开发的,后来扩展到服务器端用例。苹果的工程团队选择 Swift,不仅是因为它的生态系统一致性,还因为它能够在计算密集型环境中提供一致的性能。

 

这次重写还使用了Vapor(这是一个流行的 Swift Web 框架)作为基础。还实现了其他自定义包老处理椭圆曲线操作、密码学审计和特定于密码监控领域的中间件。

 

Swift 的确定性内存管理,基于引用计数而不是垃圾回收(GC),消除了由 GC 暂停引起的延迟峰值。事实证明,这种一致性对于大规模低延迟系统至关重要。在调优之后,苹果报告了亚毫秒级的 99.9 百分位延迟和内存使用量的大幅下降:Swift 实例消耗了数百 MB,而 Java 则消耗了数十 GB。

 

启动时间也得到了改善。没有 JVM 初始化开销或 JIT 预热,Swift 服务可以更快地冷启动,支持苹果的全球自动扩展需求。

 

苹果的迁移反映了一个更广泛的趋势:在极端规模的服务中使用面向性能的语言。从高性能的源代码控制解决方案到区块链的编程语言,Meta与 Rust 有着悠久的历史。Netflix引入了 Rend,这是一个用 Go 编写的高性能代理,来接管与 Memcached 交互的基于 Java 的客户端。AWS 在确定性性能和低资源使用提高基础设施效率的服务中越来越多地依赖Rust

 

虽然这并不是 Java 和类似语言衰落的迹象,但有越来越多的证据表明,在性能需求的最高端,一些人发现通用运行时不再满足其需求。

 

原文链接:

https://www.infoq.com/news/2025/06/apple-swift-migration/

2025-06-14 18:007876

评论 1 条评论

发布
用户头像
"Swift 实例消耗了数百 MB,而 Java 则消耗了数十 GB" - 这么夸张?
2025-06-15 09:40 · 北京
回复
没有更多了

SpringMVC源码分析-HandlerAdapter(1)-初始化和简单实现

Brave

源码 springmvc 9月日更

参数校验如何优雅的处理

卢卡多多

参数校验 9月日更

什么是操作型系统

奔向架构师

数据仓库 9月日更

网络攻防学习笔记 Day142

穿过生命散发芬芳

数据中心 9月日更

架构训练营模块三

yphust

产品分析:解决什么问题?

石云升

产品经理 9月日更

linux之lscpu命令

入门小站

Linux

Canvas API 的基本用法

devpoint

html5 canvas 9月日更

那段记忆中的声音:单式评书再现江湖背后的AI技术

脑极体

JavaScript进阶(五)节流

Augus

JavaScript 9月日更

利用 Kotlin 协程提升应用性能

Changing Lin

9月日更

每个开发人员都应该知道的 JavaScript Web API

Regan Yue

JavaScript web api 9月日更

在线将JS/JavaScript-Object转JSON工具

入门小站

工具

【Flutter 专题】41 图解神秘的 SystemChrome

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 9月日更

Python 千猫图,简单技术满足你的收集控

梦想橡皮擦

9月日更

ES知识总结

十二万伏特皮卡丘

模块八作业

秀聪

架构实战营

JVM启动参数学习笔记二

风翱

JVM 9月日更

手撸二叉树之二叉树的锯齿形层序遍历

HelloWorld杰少

9月日更

Opus从入门到精通(七)Opus编码基础之认识声音

轻口味

android 音视频 9月日更

手撸二叉树之从中序与后序遍历序列构造二叉树

HelloWorld杰少

9月日更

穿越时空,跟我一起探索云栖数字谷

阿里巴巴云原生

云栖大会

MLOps RNN 卷积神经网络- 吴恩达Andrew Ng 论文等资料汇总 易筋 ARTS 打卡 Week 66

John(易筋)

ARTS 打卡计划

消息队列:发送消息实现

正向成长

RocketMQ

Vue进阶(幺贰贰):ES6 判断是否为空对象

No Silver Bullet

Vue 9月日更

Prometheus 2.24.0 新特性

耳东@Erdong

release Prometheus 9月日更

消息队列存储消息数据的MySQL表格设计

gawaine

架构师训练

0x00 Go参考

Uasen_

看直播拿证书 | 12 天,0 基础晋级 Serverless 高手

阿里巴巴云原生

阿里云 Serverless 云原生 直播

一个不错的投屏软件

IT蜗壳-Tango

9月日更

给开发新人的信:学会深思熟虑

baiyutang

9月日更

Apple完成了关键生态系统服务到Swift的迁移,性能提升了40%_后端_InfoQ精选文章