thắc mắc Thắc mắc về việc xử lí nhiều request cùng 1 lúc khi lưu xuống elasticsearch

lý duẩn

Junior Member
Em chào các bác, hiện tại em đanh gặp 1 vấn đề về nhiều request đồng thời cùng update 1 bản ghi nên gây ra race condition dẫn đến data bị sai.Giải pháp em đang hướng tới là sử dụng 1 queue để lưu request và xử lí lần lượt. Nhưng như vậy lại xảy ra vấn đề là có những thời điểm có quá nhiều request đi vào thì với việc xử lí lần lượt như vậy không đáp ứng được và có quá nhiều request bị đọng lại ở queue. Các bác cho em tư vấn về đoạn này nên xử lí thế nào ạ?
P/s: em lần đầu tiếp xúc với es nên có gì các bác chỉ giáo :))))

via theNEXTvoz for iPhone
 
Em chào các bác, hiện tại em đanh gặp 1 vấn đề về nhiều request đồng thời cùng update 1 bản ghi nên gây ra race condition dẫn đến data bị sai.Giải pháp em đang hướng tới là sử dụng 1 queue để lưu request và xử lí lần lượt. Nhưng như vậy lại xảy ra vấn đề là có những thời điểm có quá nhiều request đi vào thì với việc xử lí lần lượt như vậy không đáp ứng được và có quá nhiều request bị đọng lại ở queue. Các bác cho em tư vấn về đoạn này nên xử lí thế nào ạ?
P/s: em lần đầu tiếp xúc với es nên có gì các bác chỉ giáo :))))

via theNEXTvoz for iPhone
Mọi người nên học cách sử dụng smart batching + bulk insert/update, đấy là một trong những tối ưu cơ bản khi tương tác với file/db/network:

Dù cho dùng Single thread nhưng performance cũng cao hơn rất nhiều xử lý lần lượt.

Cách nữa là thực hiện partition data. Mỗi id sẽ đi vào một partition riêng giống kiểu của kafka. Hoặc dùng luôn kafka cũng được. Dùng kafka thì luôn luôn nên sử dụng kết hợp smart batching, API nó thường được design để xử lý batch kiểu đó rồi.

Tuy nhiên dùng kafka vẫn có trường hợp edge case một partition được consume bởi nhiều consumer trong một group, case này cũng hiếm và xảy ra khi deploy và các partition bị rebalance, đây là giới hạn của distributed lock nói chung trong hệ phân tán rồi. Nên để đảm bảo hết hoàn toàn thì nên kết hợp với elasticsearch optimistic locking hoặc sử dụng versioning với painless script
 
Back
Top