Apache Akka là một thư viện nguồn mở được phát triển để 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 (concurrent and distributed application). Ở đây các bạn cần lưu ý rằng Concurrency(đồng thời) và Parallelism(song song) là hai khái niệm khác nhau. Concurrency xử lý nhiều tasks ở các khung thời gian khác nhau(trong cùng một CPU) còn Parallelism xử lý nhiều tasks hoặc các phần của một task trong cùng một thời gian (xử lý mỗi task ở một CPU khác nhau).

Akka được phát triển từ năm 2009, dựa trên Actor Model – một Model do Carl Hewitt đưa ra từ năm 1973. Actor Model chia ứng dụng thành nhiều đơn vị nhỏ gọi là các Actors. Tương tự như Object trong lập trình hướng đối tượng, Actor cũng chứa thông tin về behavior và state của chương trình. Tuy nhiên cách thức giao tiếp giữa các Actors khác với các Objects do chúng không trực tiếp trao đổi với nhau mà trao đổi thông qua các messages.

Behavior của Actor quy định cách mà Actor đó xử lý message còn State của Actor không liên quan tới hệ thống tổng quan nên chúng ta không gặp phải các vấn đề về synchronization, thread locking, state modifying khi sử dụng Actor. Ngoài ra, các Actors được quản lý theo cấu trúc Supervisory Hierarchy, cho phép Parent Actors có thể quản lý và phân bổ nhiệm vụ cho các Child Actors. Do đó đảm bảo tính fault-torelance và scalability của chương trình.

Một số ưu điểm khác của việc sử dụng Akka có thể kể đến là:

– Sử dụng message thay vì method call cho phép sender không bị tạm dừng để đợi return value từ receiver.

– Chúng ta không cần quan tâm đến vấn đề synchronization trong môi trường multi-thread vì các message được xử lý theo thứ tự First In First Out (theo dạng queue).

– Việc quản lý Actor theo dạng Hierarchy giúp thuận tiện trong Error Handling. Các Actor sẽ thông báo về Parent của chúng khi xảy ra lỗi và các Parents sẽ quyết định cách xử lý lỗi cho các Child Actors.

Tháng Một 13, 2019
ITechSeeker