Paul Bakker 在 QCon 旧金山 2023 的演讲总结
Paul Bakker,Netflix 的 Java 平台负责人、Java Champion 以及《Java 9 Modularity》的合著者,在 2023 年 QCon 旧金山会议上发表了题为《Netflix 如何真正使用 Java》的演讲。
演讲主要内容
打破误解
Bakker 澄清了一个常见的误解,即“Netflix 完全依赖于 RxJava 微服务、Hystrix、Spring Cloud 和 Chaos Monkeys”。他详细介绍了 Netflix 电影应用程序的原始架构,该应用程序通过电视和其他设备访问,使用 REST 和 gRPC 连接到他们的 Groovy 支持的 API 服务器。
早期架构的局限性
最初的架构采用了 RxJava 和 Hystrix 来实现远程调用、并行计算和容错。然而,这种架构存在一些限制:
- 每个端点需要一个脚本。
- UI 开发者通常不喜欢 Groovy 和 Java。
- 响应式编程难度较大。
GraphQL Federation 的引入
Bakker 介绍了 GraphQL Federation,这是一种允许将多个 GraphQL 服务(称为子图或联邦服务)组合成单一模式或 API 的架构模型。GraphQL 作为 REST 的替代方案,解决了过度获取和获取不足的问题。
Netflix 的 GraphQL 联邦网关连接到域图服务(DGS),取代了原始的 API 服务器,通过 gRPC 与各种服务通信。这种架构带来了以下好处:
- 没有 API 重复。
- UI 开发者无需进行服务器端开发。
- 共享的 GraphQL 模式。
- 无需 Java 客户端库。
Java 在 Netflix 的持续开发
Netflix 继续积极开发 Java 应用。他们支持 Azul Zulu 17(Azul 的 OpenJDK 下游发行版),并积极测试 JDK 21。Netflix 运行着大约 2800 个应用程序,使用了大约 1500 个库。他们的首选构建工具是 Gradle 和 Netflix 开发的 Gradle 插件集合 Nebula,以及 IntelliJ IDEA。
JDK 17 的升级回顾
Netflix 最近从 JDK 8 升级到 JDK 17,带来了显著的性能提升,特别是在 G1 垃圾收集器的改进方面。Netflix 观察到,与 JDK 8 相比,JDK 17 的 CPU 使用率提高了 20%。
未来展望:JDK 21 和虚拟线程
Netflix 正在积极测试 JDK 21,Bakker 认为升级到 JDK 21 将更加容易和快速。Generational ZGC 将更适合 Netflix 的各种工作负载,他们将最终用虚拟线程替换线程池。然而,Bakker 警告说,虚拟线程并不是免费的午餐,简单地将其添加到应用程序中可能会降低性能,尤其是在库对 CPU 要求较高的情况下。
Spring Cloud 的支持
Netflix 还支持 Spring Cloud,通过 Spring Cloud Netflix 子项目为 Spring Boot 应用程序提供 Netflix 开源软件的集成。
总结
Bakker 的演讲详细介绍了 Netflix 如何利用 Java 和 GraphQL 等技术来优化其架构和性能,同时澄清了外界对 Netflix 技术栈的误解。Netflix 在 Java 生态系统中持续创新,积极采用最新的 JDK 版本和虚拟线程等新技术,以提升其应用程序的性能和可维护性。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。