Postgres vs Kafka: Cuộc Tranh Luận Về Hàng Đợi Cơ Sở Dữ Liệu Ngày Càng Nóng

Nhóm Cộng đồng BigGo
Postgres vs Kafka: Cuộc Tranh Luận Về Hàng Đợi Cơ Sở Dữ Liệu Ngày Càng Nóng

Trong thế giới của kỹ thuật dữ liệu, một cuộc cách mạng thầm lặng đang diễn ra. Các nhà phát triển ngày càng đặt câu hỏi liệu họ có thực sự cần các nền tảng streaming phức tạp như Kafka cho nhu cầu nhắn tin của mình hay không, hay liệu PostgreSQL cũ kỹ tốt lành có thể đảm đương công việc đó một cách ổn thỏa. Cuộc tranh luận đã châm ngòi cho những thảo luận sôi nổi khắp các cộng đồng công nghệ, với những lập luận đầy nhiệt huyết từ cả hai phía về hiệu suất, sự đơn giản và công cụ phù hợp cho công việc.

Nghịch Lý Hiệu Suất

Trọng tâm của cuộc tranh cãi nằm ở các so sánh hiệu suất khiến nhiều kỹ sư phải vò đầu bứt tóc. Một bình luận viên chỉ ra sự tương phản rõ rệt: Kết quả họ đạt được với thiết lập 96 vCPU của mình có thể đạt được với Kafka trên một thiết lập chỉ 4 vCPU. Những con số kể một câu chuyện hấp dẫn - trong khi PostgreSQL có thể xử lý hàng nghìn tin nhắn mỗi giây, các giải pháp tương thích với Kafka như Redpanda đã chứng minh khả năng xử lý hàng trăm nghìn tin nhắn mỗi giây trên phần cứng ít mạnh mẽ hơn nhiều.

Một thành viên cộng đồng khác nhấn mạnh khoảng cách hiệu suất này, lưu ý rằng Redpanda có thể làm điều này chỉ với một hoặc hai lõi so với thiết lập PostgreSQL 96 lõi được mô tả. Sự chênh lệch hiệu suất này trở nên đặc biệt liên quan khi xem xét đến chi phí điện toán đám mây, nơi việc sử dụng tài nguyên không hiệu quả có thể nhanh chóng biến thành hóa đơn hàng tháng khổng lồ.

Việc đạt được thông lượng thậm chí còn thấp hơn thế trên 3x c7i.24xlarge — tổng cộng 288 vCPU — là một sự lãng phí đến khó hiểu.

So sánh Hiệu năng: Giải pháp PostgreSQL vs Kafka

Chỉ số PostgreSQL (96 vCPU) Kafka/Redpanda
Tin nhắn/Giây 31k-130k 250k+ (trên laptop)
Phần cứng Yêu cầu 96 vCPU 1-4 vCPU
Chi phí Hàng tháng (ước tính AWS) ~$20,000 USD Thấp hơn đáng kể
Nhóm Consumer Yêu cầu triển khai tùy chỉnh Hỗ trợ sẵn
Độ phức tạp Vận hành Thấp hơn (nếu đã sử dụng PostgreSQL) Cao hơn

Lập Luận Về Sự Đơn Giản

Bất chấp sự khác biệt về hiệu suất, nhiều nhà phát triển ủng hộ các giải pháp dựa trên PostgreSQL dựa trên sự đơn giản trong vận hành. Lập luận tập trung vào việc sử dụng các công cụ mà các nhóm đã hiểu và duy trì. Như một bình luận viên đã nói, trong ứng dụng của bạn, có lẽ bạn đã có sẵn PostgreSQL. Bạn không cần phải thiết lập thêm một thành phần hạ tầng nào để phục vụ trường hợp sử dụng bổ sung của mình, chỉ cần tái sử dụng công cụ bạn đã có.

Cách tiếp cận này tuân theo triết lý bắt đầu một cách đơn giản mà nhiều dự án thành công áp dụng. Các nhóm có thể bắt đầu với các hàng đợi PostgreSQL và chỉ chuyển sang các hệ thống nhắn tin chuyên biệt khi họ đã chứng minh được nhu cầu thông qua các yêu cầu mở rộng quy mô thực tế. Tốc độ phát triển đạt được bằng cách tránh sự phức tạp hạ tầng bổ sung có thể rất đáng kể, đặc biệt là đối với các nhóm nhỏ hơn hoặc các dự án trong giai đoạn đầu.

Tư Duy Công Cụ Phù Hợp

Cuộc thảo luận tiết lộ hai triết lý kỹ thuật tương phản. Một số nhà phát triển ủng hộ việc sử dụng các công cụ chuyên biệt được thiết kế cho các mục đích cụ thể, trong khi những người khác thích tối đa hóa tính hữu dụng của các công nghệ quen thuộc. Một bình luận viên đã nắm bắt được sự lưỡng phân này một cách hoàn hảo: Đưa cho một đứa trẻ một cái búa, và mọi thứ đều trở thành cái đinh so với Những người nhìn vào một nhiệm vụ, sau đó áp dụng một công cụ phù hợp cho nhiệm vụ đó.

Đây không chỉ là về khả năng kỹ thuật - mà còn là về việc hiểu bối cảnh tổ chức, kỹ năng của nhóm và các yêu cầu kinh doanh thực tế. Như một thành viên cộng đồng khác đã lưu ý, Phần mềm là một ngành có lượng tự chủ đáng kinh ngạc, gợi ý rằng các lựa chọn công nghệ thường phản ánh sở thích cá nhân và các cân nhắc nghề nghiệp nhiều như các yêu cầu kỹ thuật.

Thực Tế Về Khả Năng Mở Rộng

Mặc dù PostgreSQL có thể xử lý các khối lượng công việc nhắn tin ở mức độ vừa phải, các bình luận từ các kỹ sư giàu kinh nghiệm làm nổi bật những hạn chế quan trọng. Một mối quan tâm chính là mô hình đồng thời của PostgreSQL: Cách nó khóa các bảng và hàng cùng các cấp độ tuần tự hóa mà nó đảm bảo không phải lúc nào cũng rõ ràng đối với nhiều người và có thể trở thành một nút thắt cổ chai nghiêm trọng cho các khối lượng công việc nhạy cảm về hiệu suất.

Một hạn chế quan trọng khác được đề cập là thiếu chức năng nhóm người tiêu dùng (consumer group) vốn có, điều làm cho Kafka trở nên mạnh mẽ cho việc xử lý phân tán. Như một kỹ sư giải thích, Điều tuyệt vời về các nhóm người tiêu dùng Kafka là nó giúp dễ dàng phân tán tải trên một số phiên bản đang chạy dịch vụ của bạn. Việc sao chép chức năng này trong PostgreSQL đòi hỏi sự phát triển tùy chỉnh đáng kể.

Cái Giá Của Sự Phức Tạp

Cuộc tranh luận không chỉ là về khả năng kỹ thuật - mà còn là về chi phí con người và tổ chức của sự phức tạp. Nhiều bình luận viên đề cập đến hiện tượng thiết kế theo hồ sơ năng lực (resume-driven design), nơi các kỹ sư giới thiệu các công nghệ phức tạp chủ yếu để nâng cao kỹ năng của họ hơn là giải quyết các vấn đề kinh doanh trước mắt. Điều này có thể khiến các nhóm vật lộn với các giải pháp được thiết kế quá mức rất lâu sau khi các kiến trúc sư ban đầu đã chuyển đi nơi khác.

Tuy nhiên, những người khác chỉ ra rằng việc bác bỏ các công nghệ mới như chỉ để xây dựng hồ sơ năng lực sẽ bỏ qua các cân nhắc kỹ thuật hợp pháp. Các yêu cầu dự án có thể phức tạp và mờ đối với những người quan sát bên ngoài, và những gì xuất hiện như là thiết kế quá mức thực ra có thể là sự chuẩn bị thận trọng cho các nhu cầu mở rộng quy mô dự kiến.

Khi nào nên chọn từng giải pháp

Chọn PostgreSQL khi:

  • Bạn đang sử dụng PostgreSQL trong stack công nghệ của mình
  • Lượng message ở mức hàng nghìn, không phải hàng triệu mỗi giây
  • Đội ngũ của bạn có chuyên môn vững về PostgreSQL
  • Bạn coi trọng tính đơn giản trong vận hành hơn là hiệu suất đỉnh cao
  • Bạn đang ở giai đoạn đầu và muốn xác thực sản phẩm trước

Chọn Kafka khi:

  • Bạn cần xử lý hàng trăm nghìn message mỗi giây
  • Bạn yêu cầu chức năng consumer group có sẵn
  • Bạn cần ngữ nghĩa xử lý exactly-once
  • Đội ngũ của bạn có chuyên môn về Kafka hoặc có thể đầu tư thời gian để học
  • Bạn đã xác thực rằng yêu cầu mở rộng quy mô của mình xứng đáng với độ phức tạp đó

Tìm Kiếm Sự Cân Bằng

Những bình luận suy nghĩ thấu đáo nhất đề xuất một lập trường trung dung thực tế. Một số kỹ sư đề xuất bắt đầu với PostgreSQL và chỉ di chuyển sang các hệ thống nhắn tin chuyên biệt khi các yêu cầu hiệu suất cụ thể đòi hỏi. Cách tiếp cận này cho phép các nhóm xác thực sản phẩm của họ và hiểu nhu cầu mở rộng quy mô thực tế trước khi đầu tư vào cơ sở hạ tầng phức tạp.

Như một bình luận viên khôn ngoan đã lưu ý, Quyết định kiến trúc tốt nhất là quyết định vẫn có thể bảo trì được khi người ủng hộ nó rời đi. Điều này nhấn mạnh rằng các lựa chọn công nghệ nên phục vụ cho sức khỏe lâu dài của dự án hơn là các mục tiêu nghề nghiệp ngắn hạn hoặc sự hào hứng về mặt kỹ thuật.

Cuộc tranh luận PostgreSQL vs Kafka cuối cùng quy về việc hiểu các yêu cầu cụ thể của bạn, khả năng của nhóm bạn và khả năng chấp nhận sự phức tạp trong vận hành của tổ chức bạn. Trong khi các công cụ chuyên biệt sẽ luôn hoạt động tốt hơn các cơ sở dữ liệu đa mục đích cho các trường hợp sử dụng dự định của chúng, thì sự đơn giản và quen thuộc của PostgreSQL khiến nó trở thành một lựa chọn hấp dẫn cho nhiều kịch bản thực tế. Chìa khóa là đưa ra các quyết định sáng suốt dựa trên nhu cầu thực tế hơn là chạy theo xu hướng hoặc bám lấy các công cụ quen thuộc một cách thoải mái.

Tham khảo: Kafka is taxi — Till I use Postgres