SMACK Stack là tập hợp của năm công cụ BigData gồm Spark, Mesos, Akka, Cassandra và Kafka (tất cả đều là công cụ mã nguồn mở). Thuật ngữ SMACK Stack được ra đời từ năm 2015 khi các nhà lập trình nhóm họp tại một buổi hội thảo trong đó có sự tham gia của Mesosphere (một công ty công nghệ của Mỹ có trụ sở tại San Francisco, chuyên phát triển phần mềm cho các trung tâm dữ liệu dựa trên Apache Mesos) và Mesosphere cũng chính là công ty góp nhiều công sức trong việc quảng bá SMACK stack.

Mục tiêu của SMACK stack là tạo ra một môi trường lý tưởng, cung cấp các tính năng cần thiết cho việc xử lý Big Data (bên cạnh tính năng batch-processsing, SMACK Stack chú trọng nhiều vào khả năng xử lý thông tin trong thời gian thực). Hiện nay, SMACK stack đang được ứng dụng trong nhiều mô hình kiến trúc xử lý dữ liệu lớn, đặc biệt là data streaming processing.

SMACK Stack hoạt động dựa trên năm thành phần chính là:

– Spark: Spark là một công cụ phân tích hợp nhất (unified analytics engine) được phát triển nhằm mục đích phục vụ các bài toán xử lý dữ liệu lớn. Spark được coi là phiên bản tiếp theo của Hadoop nhằm tăng tốc độ xử lý cũng như khác phục một số nhược điểm của Hadoop. Trong SMACK Stack, Spark chính là thành phần được sử dụng để phân tích, xử lý và khai thác dữ liệu thu thập được (các bạn tham khảo thêm về Spark trong loạt tutorials về Apache Spark).

– Mesos: Mesos là một platform để các thành phần khác của SMACK Stack chạy trên đó. Mesos được cài đặt trên các Clusters để quản lý, chia sẻ tài nguyên giữa các nodes và phân bổ công việc cho các tài nguyên này nhằm tận dụng tối đa hiệu suất của từng node trong toàn bộ hệ thống phân tán. Nói một cách khác, chúng ta có thể coi Mesos là một hệ điều hành (Operating System) cho các hệ thống phân tán.

Mesos cluster bao gồm Master nodes và Slave nodes. Master node cung cấp thông tin về nguồn tài nguyên có sẵn trong cluster cho Frameworks và phân bổ công việc cho Slave nodes còn Slave nodes có vai trò thực thi các tasks được giao. Thông thường, Mesos hoạt động theo bốn bước sau:

1. Slave gửi thông tin về nguồn tài nguyên có sẵn của mình về cho Master (ví dụ: Salve 1 có 4 CPU và 16GB RAM có thể sử dụng được)

2. Master gửi thông tin về nguồn tài nguyên mà cluster có thể cung cấp cho Frameworks

3. Scheduler của Framework phản hồi lại Master về các nhiệm vụ cần phải thực thi (ví dụ Task 1 cần 1CPU, 3GB RAM; Task 2 cần 2CPU, 8GB RAM)

4. Master gửi nhiệm vụ cần thực thi cho Slave và Slave sử dụng tài nguyên cần thiết để thực hiện nhiệm vụ đó. Nếu Slave vẫn còn dư tài nguyên thì các Frameworks khác có thể sử dụng tài nguyên này để thực thi nhiệm vụ của mình.

– Akka: Akka là một thư viện nguồn mở được phát triển dựa trên Actor Model nhằm giúp các lập trình viên có thể dễ dàng xây dựng các ứng dụng xử lý đồng thời và phân tán. Trong SMACK Stack, Akka được sử dụng để tạo ra các Actor nhằm thực hiện từng công việc cụ thể và tương tác với nhau thông qua việc truyền nhận messages (các bạn tham khảo thêm về Akka trong loạt tutorials về Apache Akka)

– Cassandra: Cassandra là một cơ sở dữ liệu NoSQL theo kiểu phân tán nhằm quản lý và lưu trữ dữ một số lượng lớn dữ liệu trên nhiều nodes khác nhau (các bạn tham khảo thêm về Cassandra trong loạt tutorials về Apache Cassandra).

– Kafka: Kafka là một nền tảng truyền nhân dữ liệu theo kiểu phân tán, hoạt động theo mô hình Publish – Subscribe trong đó bên Publish dữ liệu gọi là Producer còn bên nhận dữ liệu là Consummer. Trong SMACK Stack, Kafka được sử dụng như một bộ nhớ đệm để lưu trữ tạm thời dữ liệu từ nhiều nguồn khác nhau rồi phân bổ ra các thành phần khác của hệ thống (các bạn tham khảo thêm về Kafka trong loạt tutorials về Apache Kafka).

Lưu ý: các bạn có thể thay thế từng thành phần của SMACK Stack bằng các công cụ có tính năng tương tự. Ví dụ như Apache Spark có thể thay thế bằng Apache Flink hoặc thay thế Mesos bằng Hadoop Yarn,…

Tháng Hai 12, 2019
ITechSeeker