Trả lời câu 1:
- Xử lý đơn hàng trong thương mại điện tử
- Xử lý giao dịch (gửi nhận tiền hay bất kỳ loại giao dịch nào khác)
- Những nghiệp vụ mà yêu cầu chỉ được thực hiện bởi 1 server duy nhất để tránh bị concurrent
Trả lời câu 2:
- Không rõ em đọc các giải thích ở đâu nhỉ? có thể cho anh xem nguồn được không?
- Gửi Mail, SMS là một trong những nghiệp vụ khá chậm, ví dụ em submit 1 cái request gửi Mail, SMS marketing đến 1000 người, thì khả năng cao sẽ mất đến vài phút, như vậy thì em sẽ không thể đợi request đó được thực hiện xong được, trên giao diện của em nó sẽ quay mãi luôn. Thêm 1 điểm nữa là server sẽ chỉ có hữu hạn số lượng thread (thường là vài trăm) như vậy nếu request nào cũng chờ quá lâu dẫn đến tình trạng server bị hết thread và không thể phục vụ thêm request, nó cũng tương đương với DDoS.
Chính vì vậy mà người ta phải lưu tạm Mail, SMS vào trong database, MQ hay Kafka, mục đích chính là nhanh chóng giải phóng thread để còn phục vụ các yêu cầu khác nữa.
Ngoài ra thì nếu việc gửi mail, sms còn rất dễ lỗi nữa, nên còn liên quan đến việc xử lý các mail sms lỗi này, nên nếu mình có nhiều HTTP server để phục vụ APIs mà mình cũng dùng luôn các server này để xử lý mail, sms thì có thể dẫn đến trường hợp gửi trùng lặp mail, sms, vậy nên thông qua database, MQ hay kafka gửi đến 1 con server xử lý tập trung thì sẽ chính xác hơn.
Tuy nhiên nếu lấy lý do là để xử lý sms và mail nhanh hơn thì có vẻ không đúng, vì rõ ràng là việc gửi nhận qua MQ hay Kafka sẽ tốn thêm thời gian request phải đi qua các con Broker nữa đúng không nhỉ, vậy nó phải chậm hơn mới đúng. Mà việc gửi mail, sms thuần tuý là I/O không có xử lý logic gì cả.
- Em cần tách câu hỏi này ra em ạ, đến đây khá dài rồi.
Rất cảm ơn anh vì câu trả lời ạ!
Em đã hiểu hầu hết những ý trên của anh nhưng chỉ còn 1 đoạn bên dưới là em chưa rõ có lẽ là do kiến thức và kinh nghiệm thực tế của em còn quá ít.
"Ngoài ra thì nếu việc gửi mail, sms còn rất dễ lỗi nữa, nên còn liên quan đến việc xử lý các mail sms lỗi này, nên nếu mình có nhiều HTTP server để phục vụ APIs mà mình cũng dùng luôn các server này để xử lý mail, sms thì có thể dẫn đến trường hợp gửi trùng lặp mail, sms, vậy nên thông qua database, MQ hay kafka gửi đến 1 con server xử lý tập trung thì sẽ chính xác hơn."
1) Theo hiểu biết của em thì em vẫn chưa hiểu vì sao lạ có tình trạng trùng lặp khi gửi mail, sms,.. khi có nhiều HTTP server để phục vụ APIs mà mình cũng dùng luôn các server này để xử lý mail, sms ? Thông thường thì em được biết là sẽ có 1 con API Gateway để load balancing.để chia đều các request đến các server nên em vẫn chưa hình dung ra được việc trùng lặp sẽ diễn ra như thế nào.Mong anh giải thích cú thể giúp em ạ!
2) Với đoạn " thông qua database, MQ hay kafka gửi đến 1 con server xử lý tập trung thì sẽ chính xác hơn." anh có thể giải thích và cho em xin 1 ví dụ về đoạn này không ạ ? Em đã xem qua cái ví dụ về transaction chuyển tiền giữa 2 user nhưng em vẫn còn mơ hồ lắm chư rõ.
Một lần nữa em cảm ơn anh rất nhiều !
–
Lâm Văn Đời
1664029320000