Nét đẹp của Kafka trong hệ thống Microservices

Nét đẹp của Kafka trong hệ thống Microservices

Một cái Tết nữa sắp đến, mình dành chút thời gian để nhìn lại những kiến thức đã tích lũy, may mắn khi được tiếp cận, làm việc với hệ thống microservices và được các tiền bối đi trước chỉ dạy rất nhiều, vì thế mình mong muốn ghi chú lại một trong những công nghệ được sử dụng rất phổ biến trong các hệ thống Microservices hiện nay chính là Kafka.

Trong khuôn khổ bài viết, mình sẽ không nói về các khái niệm mà xin chia sẻ các bước ứng dụng Pattern pub — sub của kafka để xây dựng tính năng push email khi user submit một đơn hàng thành công.

1_2rJgdAihx9tm1NE2_K_YLA.png

Mình chia làm 2 services ở đây gồm: order và noti với vai trò chính lần lượt như sau:

  • order-service (order): quản lý các đơn hàng của user
  • noti-service (noti): push các notification như email, sms đến user

Khi user thanh toán đơn hàng thành công, order sẽ đẩy (pub) một mess (nội dung mess bạn có thể define) vào Kafka và tiếp tục xử lý các request khác từ user. Việc gửi mail xác nhận sẽ được noti lấy (sub) mess từ Kafka và gửi đi. Việc chia nhỏ các services làm nổi bật ưu thế như dễ mở rộng, dễ maintain của microservices, chẳng may noti gãy thì cũng không ảnh hưởng đến tính năng mua hàng của user. Không dừng lại ở noti, bạn hoàn toàn có thể phát triển thêm các services mới như reward, shipment, …

1_tUL4Y9rcKML4vKn-f6KHKg.png

1. Producer

Mình sử dụng package kafkajs để setup producer ở order-service và consumer ở noti-service.

sau khi ghi nhận đơn hàng thành công của user, orderInfo sẽ được đẩy vào Kafka qua function sendMessage đã được define như trên.

2. Consumer

noti-service sẽ lấy mess đã được đẩy vào kafka trước đó từ order-service, build email và gửi đến cho user thông tin đơn hàng đã được xác nhận.

Vậy là xong, cuối cùng mình test thử full flow từ mua hàng thành công -> send email và nhận được kết quả. Tadaaaaa.

1_Jp26vBQ0PnmjrJdxf2cBLA.png

Đến đây hy vọng phần kiến thức nhỏ của mình về kafka có thể chia sẻ với mọi người về cách ứng dụng thực tế vào trong microservices. Mình xin để link full source code của project ở đây nha.

Bài viết chắc chắn còn nhiều thiếu sót, mình hi vọng được mọi người đóng góp và chia sẻ để mình có thể học hỏi và cải thiện. Xin chân thành cảm ơn mọi người đã dành thời gian đọc bài viết của mình.

Nếu mọi người thấy bài viết thú vị thì cho mình xin 1 subscribe hoặc 1 star github nhé. Mến chúc mọi người năm mới những điều tốt đẹp nhất.

3. Nguồn tham khảo: