Podcast: Theo đuổi hiệu suất Java tối ưu - Từ One Billion Row Challenge đến Hardwood AI-Native
Gunnar Morling, chuyên gia kỹ thuật tại Confluent và Java Champion, chia sẻ hành trình xây dựng ứng dụng hiệu suất cao bằng Java. Bài viết đi sâu vào bài học từ thử thách One Billion Row Challenge, lợi ích của việc nâng cấp lên JDK 17, và dự án Hardwood - một trình phân tích Parquet mới được phát triển theo hướng AI-native với tối thiểu phụ thuộc.

Gunnar Morling, một kỹ thuật gia tại Confluent và là Java Champion nổi tiếng, đã có buổi chia sẻ sâu sắc về kinh nghiệm xây dựng các ứng dụng hiệu suất cao bằng Java, đặc biệt là trong lĩnh vực dữ liệu. Trong podcast gần đây với InfoQ, ông đã bàn về những bài học từ thử thách One Billion Row Challenge (1BRC), sự tiến bộ của các phiên bản Java hiện đại, và giới thiệu dự án mới mang tên Hardwood - một trình phân tích cú pháp Apache Parquet được xây dựng theo hướng AI-native.
Java Performance
Tác động của One Billion Row Challenge và sự trỗi dậy của JDK 17
Thử thách One Billion Row Challenge (1BRC) do Gunnar Morling khởi xướng đã tạo ra một làn sóng mạnh mẽ trong cộng đồng Java, chứng minh rằng ngôn ngữ này hoàn toàn có thể đạt được hiệu suất cực cao. Dù đã trôi qua hai năm, dự án này vẫn thu hút sự quan tâm và nhiều đóng góp từ cộng đồng.
Một trong những điểm nhấn quan trọng mà Gunnar nhấn mạnh là sự tiến bộ của nền tảng Java. Hiện nay, JDK 17 được xem là nền tảng cơ bản mới (baseline), thay thế cho JDK 8 vốn từng phổ biến bậc nhất. Việc nâng cấp lên các phiên bản Java hiện đại mang lại lợi ích hiệu suất "ngay lập tức" mà không cần thay đổi mã nguồn.
Các tính năng như Compact Object Headers giúp giảm kích thước bộ nhớ của từng đối tượng trên Heap, trong khi các thuật toán thu gom rác (Garbage Collection) đồng thời mới như ZGC đã được cải thiện đáng kể. Điều này cho phép các nhà phát triển tối ưu hóa ứng dụng chỉ bằng việc nâng cấp phiên bản Java runtime.
Durable Execution: Quy trình công việc bền vững bằng mã thuần túy
Gunnar cũng giới thiệu khái niệm "Durable Execution" (Thực thi bền vững) thông qua dự án thử nghiệm Persistasaurus của ông. Vấn đề mà các ứng dụng doanh nghiệp thường gặp phải là quản lý các quy trình công việc (workflow) dài hạn và phức tạp trải dài trên nhiều hệ thống.
Thay vì sử dụng các engine quy trình phức tạp, Persistasaurus cho phép định nghĩa các quy trình này dưới dạng mã Java thuần túy từ đầu đến cuối. Engine sẽ chịu trách nhiệm lưu trữ trạng thái của từng bước (ví dụ: sử dụng SQLite) và đảm bảo tính khả phục (recoverability). Nếu quy trình bị lỗi ở bước thứ 3, engine sẽ biết để khôi phục và tiếp tục từ bước thứ 4 thay vì chạy lại từ đầu. Điều này giúp đơn giản hóa việc triển khai các quy trình dài mà không cần cơ sở hạ tầng quá phức tạp.
Hardwood: Trình phân tích Parquet nhanh và không phụ thuộc
Dự án nổi bật nhất trong buổi chia sẻ là Hardwood. Apache Parquet là định dạng file dạng cột (columnar) phổ biến trong các lake dữ liệu (data lakes), nhưng các trình phân tích Java hiện tại thường đi kèm một lượng lớn phụ thuộc (dependency), kéo theo cả stack Hadoop khổng lồ.
Hardwood được ra đời với hai mục tiêu chính:
- Zero-dependency (Không phụ thuộc): Loại bỏ rủi ro tấn công chuỗi cung ứng và xung đột classpath.
- Hiệu suất cao: Tận dụng tối đa tài nguyên CPU hiện có.
Để đạt được hiệu suất cao, Hardwood sử dụng kỹ thuật song song hóa cấp độ trang (page-level parallelisation). Thay vì chỉ song song hóa theo cột (có thể không tận dụng hết nhiều CPU nếu dataset có ít cột), Hardwood chia nhỏ dữ liệu thành các trang và phân phối chúng cho các worker thread. Điều này kết hợp với cơ chế cân bằng thích ứng (adaptive balancing) để đảm bảo tất cả các lõi CPU đều được sử dụng tối đa.
Dự án cũng tận dụng Virtual Threads (Luồng ảo) của Java để xử lý concurrency một cách nhẹ nhàng và linh hoạt.
Phát triển theo hướng AI-Native: Cơ hội và Thách thức
Điểm thú vị là Hardwood là một dự án "AI-native". Gunnar sử dụng công cụ Claude Code rộng rãi trong quá trình phát triển. Tuy nhiên, ông nhấn mạnh rằng việc này không có nghĩa là "giao phó hoàn toàn cho AI".
Cách tiếp cận của ông rất kỷ luật:
- Luôn bắt đầu bằng một tài liệu thiết kế (design document).
- Yêu cầu AI tuân thủ các nguyên tắc như API công khai tối thiểu, tránh trùng lặp mã.
- Sử dụng bộ kiểm thử (test suite) khổng lồ của cộng đồng Parquet để đối chiếu kết quả và sửa lỗi.
AI đóng vai trò là một "bộ tăng năng suất khổng lồ", giúp xử lý các tác vụ lặp lại và sửa lỗi nhanh chóng. Tuy nhiên, sự giám sát của con người vẫn là yếu tố then chốt để đảm bảo chất lượng code, tính dễ bảo trì và ngăn chặn các sự cố (regressions), đặc biệt là về mặt hiệu suất.
Gunnar Morling kết luận rằng trong tương lai, AI sẽ thay đổi cách chúng ta viết code, nhưng các nhà phát triển có kinh nghiệm sẽ biết cách dẫn dắt AI để tạo ra những sản phẩm chất lượng thay vì bị thay thế hoàn toàn.


