#144 - So sánh hiệu năng Kafka vs Kinesis
Những bài viết hay
Building Netflix’s Distributed Tracing Infrastructure — netflixtechblog.com
Ở số #137, ban biên tập đã giới thiệu sơ qua Edgar - một công cụ được phát triển bởi các kỹ sư tại NETFLIX để giúp cho các thành viên on-call giải quyết các vấn đề một cách nhanh chóng và dễ dàng hơn. Ở số này chúng ta cùng tìm hiểu xem các kỹ sư NETFLIX thiết kế cơ sở hạ tâng cho Edgar như thế nào.
Cơ sở hạ tầng của Edgar được chia thành 3 phần:
Tracer library: có 2 open source nổi tiếng về distributed tracing là Open-Tracing và Open-Zipkin, team quyết định chọn Open-Zipkin vì nó dễ tích hợp với hệ thống hiện tại ở NETFLIX.
Stream processing: chúng ta không thể trace tất cả các requests trong hệ thống vì tốn chi phí lưu trữ và ảnh hưởng tới hiệu năng. Thông thường chúng ta sử dụng phương pháp chọn ngẫu nhiên. Tuy nhiên, với hướng tiếp cận này ta lại không đảm bảo các tập dữ liệu được chọn ngẫu nhiên chứa thông tin ta cần. Do đó, các kỹ sư chọn hướng tiếp cận hybrid sử dụng zipkin-secondary-sampling. Mantis cũng được sử dụng để vận chuyển và xử lý một lượng lớn dữ liệu cho tracing.
Storage: ban đầu team sử dụng ElasticSearch để lưu trữ data tuy nhiên sau đó bị vấn đề tốc độ đọc ghi dữ liệu. Vấn đề được giải quyết sau khi migrate Cassandra. Để tối ưu hoá việc lưu trữ, team tiến hành một số biện pháp như sử dụng Elastic Block Store (EBS) thay cho SSD để giảm chi phí, sử dụng kỹ thuật nén tốt hơn để giảm kích thước dữ liệu hay chỉ lưu trữ các dữ liệu liên quan.
Kinesis vs. Kafka. What is better from latency/throughput — medium.com
Lựa chọn một Message Queue tốt với hiệu năng cao luôn có ý nghĩa rất quan trọng. Không chỉ giúp các service hoạt động hiệu quả, mà còn giúp giảm latency và scale dễ dàng hệ thống dễ dàng hơn.
Một trong những Message Queue phổ biến là Apache Kafka. Apache Kafka là một nền tảng truyền giữ liệu phân tán (distributed streaming platform) được phát triển ban đầu bởi LinkIn và sau đó trở thành dự án Apache mã nguồn mở từ năm 2011. Về cơ bản Kafka là hệ thống message pub/sub phân tán mà có khả năng scale rất tốt. Message của Kafka được lưu trên đĩa cứng, đồng thời được replicate trong cluster giúp phòng tránh mất dữ liệu.
Amazon Kinesis là dịch vụ trả phí của Amazon giúp bạn xây dựng được một ứng dụng có khả năng phân tích và xử lý luồng dữ liệu (stream data) theo thời gian thực (realtime). Amazon Kinesis có khả năng thu nhận, lưu trữ đến hàng terabytes dữ liệu trong một giờ.Kinesis cung cấp một kênh để dữ liệu được truyền đến các application xử lý một cách dễ dàng tin cậy. Tuy nhiên nó cũng có khả năng lưu trữ khi phía xử lý dữ liệu của bạn bị down và không thể xử lý dữ liệu.
Cả Kafka và Kinesis đều có khả năng để phục vụ những mục đích tương đồng. Qua bài viết này, tác giả cung cấp phương pháp so sánh hiệu năng giữa Kafka và Kinesis, bao gồm Write Latency, Read Latency, Total Latency, Write Throughput, Read Throughput ở những cài đặt và scale khác nhau. Qua đó bạn có thể biết được giữa một giải pháp open source và một dịch vụ đám mây mất phí, hệ thống nào có hiệu năng cao hơn.
Tuy nhiên, dù Kafka hay Kinesis có "chiến thắng", bài viết chỉ mang tính chất tham khảo khi so sánh hiệu năng ở những khía cạnh nhất định. Việc chọn lựa một giải pháp còn dựa vào nhiều yếu tố khác. Ví dụ như, việc triển khai một hệ thống open source như Kafka khiến bạn phải tự duy trì, tối ưu hoá hệ thống, đòi hỏi nhiều kiến thức và kinh nghiệm với Kafka. Trong khi, những giải pháp cloud như Amazon Kinesis sẽ giúp bạn giảm thiểu những công việc này và có được những support từ AWS.
9 Programmer Life Lessons You Must Experience Yourself to Truly Understand — medium.com
Trong lập trình có nhiều bài học được đúc kết từ kinh nghiệm, sau đây là chín bài học cuộc sống của một lập trình viên mà bạn phải tự trải nghiệm để thực sự thấu hiểu
Không tồn tại component có giá rẻ nhất, nhanh nhất và đáng tin cậy nhất.
Voodoo programming: không quan trọng bạn tự viết code hay sử dụng lại của người khác (Stack Overflow), điều quan trọng là đảm bảo bạn hiểu code trước khi dùng.
Code không bao giờ nói dối, nhưng comments thì đôi khi. Lúc viết code, đôi khi bạn viết thêm comments để chú thích thêm. Tuy nhiên nó thường bị bỏ qua khi bạn thay đổi code. Do đó, nếu có thể, đừng sử dụng comments thay vào đó viết code thật dễ hiểu.
Nên tránh sử dụng Regular Expression trừ khi bạn không còn cách nào khác.
Phần mềm thường được phát triển bởi một vòng lặp trong đó các chức năng được xây dựng dần dần, và người dùng cuối nên được tham gia vào quá trình phát triển càng sớm càng tốt.
Bạn chỉ có thể chọn 2 trong 3 yếu tố rẻ, nhanh và đáng tin cậy
Có hai điều khó khăn trong lập trình là
0. Đặt tên
1. Vô hiệu hoá cache (Cache invalidation)
Con người chúng ta đếm từ 1 nhưng máy tính bắt đầu từ 0
Cố gắng bắt (catch) càng nhiều lỗi càng tốt - đặc biệt khi phần mềm của bạn đang đáp ứng các chức năng quan trọng
Viết nhiều dòng code hơn người khác không có nghĩa là bạn làm việc hiệu quả hơn người khác.
Góc Distributed System
Jepsen.io là một tổ chức đánh giá độc lập cung cấp các dịch vụ về phân tích những rủi ro tiềm tàng trong các hệ thống phân tán như distributed database, queues, consensus systems, etc. Họ cung cấp mã nguồn mở chương trình kiểm thử hệ thống ở repo này: https://github.com/jepsen-io/jepsen . Họ thực hiện rất nhiều vụ phân tích các hệ thống phổ biến như Cassandra, CockroachDB, ElasticSearch, ETCD, PostgreSQL, etc. Một số kĩ thuật Jepsen sử dụng bao gồm:
Black-box system testing: Jepsen xây dựng hệ thống độc lập với chương trình đã biên dịch để không bị ảnh hưởng bởi những yếu tố từ phía chương trình đang được kiểm định.
Testing under failure modes: một số kịch bản lỗi hệ thống thông dụng được sử dụng như: faulty networks, unsynchronized clock, partial failure.
Generative testing: Jepsen sử dụng rất nhiều hành động ngẫu nhiên tương tác vào hệ thống nhằm phát hiện những lỗi tiềm ẩn.
Danh sách các bài phân tích của Jepsen được công bố rộng rãi ở website này: https://jepsen.io/analyses. Các bài phân tích có chiều sâu và hàm lượng nghiên cứu cao. Các bạn có thể đọc bài phân tích cụ thể cho từng chương trình theo đường link trên.
Code & Tools
Quotes
Truth can only be found in one place: the code.
- Robert C. Martin