Nội dung bài viết
Video học lập trình mỗi ngày
Sau khi nhiều người dùng phàn nàn rằng họ cảm thấy hệ thống đặt hàng quá chậm trên hệ thống vì những lý do đã đưa ở bài viết trước, thì Sếp gọi anh lập trình viên vào và hỏi. Này anh, hệ thống chúng ta có sự chậm trễ và có thể chúng ta tuột mất cơ hội vươn lên mạnh mẽ trong thời gian tới. Anh có suy nghĩ gì cho việc này? Nhưng bạn ơi, bạn phải quay lại bài viết trước để hiểu vấn đề và vì sao lại có phần này.
Bài viết trước: Hệ thống chậm, tôi chuẩn bị thất nghiệm thế nào?
Tôi cho anh 1 tuần nữa, nếu không chúng tôi sẽ tìm kiếm một lập trình khác về quản lý đội ngũ. Hy vọng sẽ làm việc với anh lâu hơn và nếu thành công sẽ có cổ phần cho anh tại công ty này.
Đương nhiên là anh ấy không bỏ cuộc và sau đó anh liền xâu chuỗi lại quy trình tạo đơn hàng của Giám Đốc sản phẩm kinh doanh đã giới thiệu ở trong bài viết "Tôi chuẩn bị thất nghiệp thế nào?". Quả là bài toán không đơn giản.
Hệ thống chậm, lập trình viên giải quyết thế nào?
Quả thật nếu để như vậy thì hệ thống đặt hàng quá chậm, nhưng anh ấy nhận thấy rằng quá trình trên thực sự có thể được thực hiện lập trình theo kiểu không đồng bộ. Hay còn gọi là lập trình không đồng bộ. Nghĩa là Sau khi bạn đặt hàng và thanh toán thành công, tôi có thể xác minh phiếu giảm giá và tăng hoặc giảm điểm cùng một lúc và đồng thời hệ thống cũng có thể gửi Email tại thời điểm đó mà không trễ hơn chút nào. Chính vì suy nghĩ đó bắt tay vào công việc.
Và quy trình nó là thế này, hiệu quả hơn quy trình đặt hàng trước kia. Nhớ xem lại bài trước kia, để hiểu rõ hơn.
Nhưng chúng tôi không thể triển khai quy trình này một cách thủ công và chắc chắn có một công nghệ gì đó sẽ giúp chúng tôi mà đến giờ vẫn chưa biết. Tiếp tục tìm... Bạn ơi đừng lo lắng, đã có một công nghệ từ lâu nhưng vẫn có nhiều bạn vẫn chưa thực sự hiểu về diều này. Đó là Tin nhắn hàng đợi hay còn gọi là message queue.
Message Queue là gì?
Đừng vội hiểu ý nghĩa của nó là gì? Chúng ta hãy xem nếu sử dụng message queue thì nó giúp chúng ta giải quyết được bài toán trên như thế nào? Hãy cùng xem mô hình tiếp theo khi chúng tôi thêm một quy trình không đồng bộ vào quy trình đặt hàng. Hãy xem.
Hãy để tôi nói về nó:
Sau khi một người đặt hàng thì mọi chuyện sẽ trở nên đơn giản như thời kỳ trước mới thành lập. Và nhiệm vụ còn lại của bạn sẽ thông báo cho hệ thống khác rằng có những nhiệm vụ cần làm, và bạn sẽ đẩy những nhiệm vụ đó và một hàng đợi. Và nhiệm vụ của hệ thống này có nhiệm vụ nhận được thông tin từ bạn sẽ giải quyết một các độc lập mà không hề làm ảnh hưởng tới khác hàng của bạn đang đặt hàng.
Có thể nói nhìn vào hình ảnh quy trình thì bạn có thể hình dung được câu chuyện hơn những gì tôi nói ở dây. Nếu bạn nào thật sự hiểu thì liên tưởng đến "Giao dịch phân tán". Giao dịch phân tán rất phổ biến ở các công ty Internet và tôi sẽ không giới thiệu dài dòng về chúng ở đây. Tôi sẽ nói về chúng sau.
Này, ai đã từng đọc những bài tôi viết trước đây đều biết rằng, điều tôi thường nói rằng công nghệ là con dao hai lưỡi! Bạn hãy biết thực tế rằng, hệ thống đang trơn tru và vì một vấn đề nào đó bạn lại triển khai thêm một hệ thống trung gian thì hãy cẩn thận. Ban đầu là một hệ thống khá đơn giản, bạn có thể viết mã một cách tùy tiện, nhưng bây giờ bạn cắm một phần mềm trung gian vào hệ thống đó. Rồi bao nhiêu vấn đề phát sinh, bạn phải control được nó. Nhưng không có nó, bạn sẽ bị out ra khỏi hệ thống. Nhớ nhé!
Giờ chúng ta có thể nói đến định nghĩa message queue là gì? Trích ở bài post của https://lcdung.top/message-queue-la-gi/
Message Queue nôm na là Queue (hàng đợi), chứa Message (Tin nhắn) như hộp thư 😀 Và nó cho phép các thành phần/service trong một hệ thống (hoặc nhiều hệ thống), trao đổi thông tin cho nhau. Ý nghĩa của queue (hàng đợi) là nó thực hiện việc lấy message theo cơ chế vào trước thì ra trước ( First In First Out ).
Một hệ thống Message Queue thường có những thành phần sau:
- Message: Thông tin được gửi (có thể là text, binary hoặc JSON)
- Message Queue: Nơi chứa những message này, cho phép producer và consumer có thể trao đổi với nhau
- Producer: Service tạo ra thông tin, đưa thông tin vào message queue
- Consumer: Service nhận message từ message queue và xử lý Một service có thể vừa làm producer, vừa làm consumer
Và quan trong hơn và tin vui đến với các bạn đó là hiện nay có rất nhiều Message queue được dùng hiện nay như:
- Kafka
- Pulsar
- RabitMQ
- ActiveMQ
- SQS
- ZeroMQ
- MSMQ
- IronMQ
- Kinesis
- RocketMQ
Và trong này thì tôi thường sử dụng RabbitMQ. Và hãy cho tôi nói về RabbitMQ một chút!
RabbitMQ là gì?
RabbitMQ là một phần mềm trung gian nhắn tin mã nguồn mở được phát triển bằng ngôn ngữ Erlang để triển khai AMQP (Giao thức xếp hàng tin nhắn nâng cao). Trước hết, chúng ta phải biết một số đặc điểm của RabbitMQ, có thể tìm thấy trên trang web chính thức.
Và phần mềm trung gian này thực sự ổn, nhưng ngôn ngữ phát triển của nội dung này thực sự là erlang . Tôi dám khẳng định rằng hầu hết các kỹ sư chắc chắn sẽ không cố tình học ngôn ngữ cho phần mềm trung gian. Chi phí phát triển và bảo trì nằm ngoài sức tưởng tượng của bạn., Phải mất nhiều thời gian để kiểm tra xem có vấn đề gì không. Nhưng nó thật sự là ổn.
Triển khai RabbitMQ và Nodejs
Tiếp theo tôi sẽ làm một demo nho nhỏ giúp các bạn thực sự hiểu hơn nhé... Lại là chờ tiếp há há.
Bài viết trước: Hệ thống chậm, tôi chuẩn bị thất nghiệm thế nào?