1

Gần đây tôi đã làm việc một chút với  Storm của Twitter và điều đó khiến tôi tự hỏi, làm thế nào nó so sánh với một khung xử lý dữ liệu đồng thời, hiệu suất cao khác,  Akka .

AKKA VÀ STORM LÀ GÌ?

Hãy bắt đầu với một mô tả ngắn về cả hai hệ thống. Storm  là một hệ thống tính toán phân tán, thời gian thực. Trên một cụm Storm, bạn thực hiện  cấu trúc liên kết , mà quá trình dòng  tuples  (dữ liệu). Mỗi cấu trúc liên kết là một biểu đồ bao gồm các  vòi  (tạo ra các bộ dữ liệu) và  bu lông  (làm biến đổi các bộ dữ liệu). Storm đảm nhiệm việc liên lạc cụm, chuyển đổi dự phòng và phân phối các cấu trúc liên kết qua các nút cụm.

Akka  là một bộ công cụ để xây dựng các ứng dụng phân tán, đồng thời, chịu lỗi. Trong một ứng dụng Akka, cấu trúc cơ bản là một  diễn viên ; các tác nhân xử lý  các thông điệp  không đồng bộ và mỗi phiên bản của tác nhân được đảm bảo được chạy bằng cách sử dụng tối đa một luồng tại một thời điểm, làm cho đồng thời dễ dàng hơn nhiều. Các diễn viên cũng có thể được triển khai từ xa.  Sắp có một  mô-đun phân cụm , sẽ xử lý tự động chuyển đổi dự phòng và phân phối các tác nhân trên các nút cụm.

Cả hai hệ thống có quy mô rất tốt và có thể xử lý lượng lớn dữ liệu. Nhưng khi nào nên sử dụng cái này và khi nào nên sử dụng cái kia?

Có  một  bài viết blog hay khác về chủ đề này, nhưng tôi muốn đưa ra so sánh xa hơn một chút: hãy xem cách các cấu trúc cơ bản trong Storm so với các cấu trúc cơ bản trong Akka.

SO SÁNH CÁC CƠ BẢN

Thứ nhất, đơn vị dữ liệu cơ bản trong Storm là một  tuple . Một tuple có thể có bất kỳ số lượng phần tử nào và mỗi phần tử tuple có thể là bất kỳ đối tượng nào, miễn là có một bộ nối tiếp cho nó. Trong Akka, đơn vị cơ bản là một thông điệp , có thể là bất kỳ đối tượng nào, nhưng nó cũng phải được tuần tự hóa (để gửi nó cho các tác nhân từ xa). Vì vậy, ở đây các khái niệm gần như tương đương.

Chúng ta hãy xem đơn vị tính toán cơ bản. Trong Storm, chúng ta có  các thành phầnbu lông  và mầm . Một bu lông có thể là bất kỳ đoạn mã nào, xử lý tùy ý trên các bộ dữ liệu đến. Nó cũng có thể lưu trữ một số dữ liệu có thể thay đổi, ví dụ để tích lũy kết quả. Hơn nữa, bu lông chạy trong một  luồng duy nhất , vì vậy trừ khi bạn bắt đầu các luồng bổ sung trong bu lông, bạn không phải lo lắng về việc truy cập đồng thời vào dữ liệu của bu lông. Điều này rất giống với một diễn viên, phải không? Do đó, một tia sét / mầm tương ứng với một diễn viên Akka. Làm thế nào để hai so sánh chi tiết?

Diễn viên có thể nhận được tin nhắn tùy ý; bu lông có thể nhận các bộ dữ liệu tùy ý. Cả hai dự kiến ​​sẽ thực hiện một số xử lý dựa trên dữ liệu nhận được.

Cả hai đều có trạng thái nội bộ, là riêng tư và được bảo vệ khỏi truy cập luồng đồng thời.

HÀNH ĐỘNG & BOLTS: KHÁC BIỆT

Một sự khác biệt quan trọng là cách các diễn viên và bu lông giao tiếp. Một diễn viên có thể gửi tin nhắn cho bất kỳ diễn viên nào khác, miễn là nó có  ActorRef (và nếu không, một diễn viên có thể được tra cứu theo tên). Nó cũng có thể gửi lại một  trả lời  cho người gửi tin nhắn đang được xử lý. Bão, mặt khác là  một chiều . Bạn không thể gửi lại tin nhắn; bạn cũng không thể gửi tin nhắn đến các bu lông tùy ý. Bạn cũng có thể gửi một tuple đến một kênh (luồng) được đặt tên, điều này sẽ khiến cho tuple (tin nhắn) được phát cho tất cả người nghe, được xác định trong cấu trúc liên kết. (Bu lông cũng  ack  tin nhắn, cũng là một hình thức giao tiếp, cho các nhà môi giới.)

Trong Storm, nhiều bản sao mã của bu lông / mầm có thể được chạy song song (tùy thuộc vào cài đặt song song ). Vì vậy, điều này tương ứng với một tập hợp các diễn viên (có khả năng ở xa), với một  diễn viên cân bằng tải  trước mặt họ; một khái niệm nổi tiếng từ định tuyến của Akka  . Có một số lựa chọn về cách các bộ dữ liệu được định tuyến đến các trường hợp trong Storm (băm ngẫu nhiên, nhất quán trên một trường) và điều này gần tương ứng với các tùy chọn bộ định tuyến khác nhau trong Akka (băm tròn, băm nhất quán trên tin nhắn).

Ngoài ra còn có một sự khác biệt về trọng lượng của một người khác và một diễn viên. Ở Akka, việc có rất nhiều diễn viên  (lên tới hàng triệu người) là điều bình thường  . Trong Storm, số lượng bu lông dự kiến ​​nhỏ hơn đáng kể; trong mọi trường hợp, đây không phải là nhược điểm của Storm, mà là quyết định thiết kế. Ngoài ra, các diễn viên Akka thường  chia sẻ các luồng , trong khi mỗi trường hợp bu lông có xu hướng có một  luồng chuyên dụng .

CÁC TÍNH NĂNG KHÁC

Storm cũng có một tính năng quan trọng không được triển khai trong Akka ngoài luồng:  gửi tin nhắn được đảm bảo . Storm theo dõi toàn bộ cây tuple có nguồn gốc từ bất kỳ bộ dữ liệu nào được tạo ra bởi một mầm cây. Nếu tất cả các bộ dữ liệu không được thừa nhận, bộ dữ liệu sẽ được phát lại.

Ngoài ra, việc quản lý cụm của Storm tiên tiến hơn (tự động chuyển đổi dự phòng, tự động cân bằng công nhân trên toàn cụm; dựa trên  Zookeeper ); tuy nhiên mô-đun phân cụm Akka sắp tới sẽ giải quyết điều đó.

Cuối cùng, bố cục của giao tiếp trong Storm - cấu trúc liên kết - là tĩnh và được xác định trước. Ở Akka, các kiểu giao tiếp có thể thay đổi theo thời gian và có thể hoàn toàn năng động; diễn viên có thể gửi tin nhắn cho bất kỳ diễn viên nào khác, hoặc thậm chí có thể gửi địa chỉ (ActorRefs).

Vì vậy, về tổng thể, Storm thực hiện một phạm vi sử dụng cụ thể rất tốt, trong khi Akka là một bộ công cụ đa năng. Có thể xây dựng một hệ thống giống như Bão trên đỉnh Akka, nhưng không phải là cách khác (ít nhất là nó sẽ rất khó).

|