Avatar
1
Hồng Quân Nguyễn Beginner
Làm sao để chia đều dữ liệu trong 1 bảng user cho n instance của hệ thống
Hi mn, em có 1 hệ thống chạy nhiều instance của module UserService. các instance này sẽ lấy dữ liệu trong bảng user để xử lý. em muốn chạy 6 instance, với 6000 user. em sẽ chia đều cho mỗi instance 1000 user:

nếu 1 instance bị stop thì làm sao nó có thể chia lại các user cho các instance khác vậy anh? và dữ liệu các user đang xử lý được 1/2 rồi thì khi chia lại cho các instance khác thì nó vẫn tiếp tục xử lý tiếp chứ ko xử lý lại từ đầu vậy anh(chỗ này em tính dùng redis để cache lại được không anh, instance đấy stop thì dữ liệu trên redis vẫn còn)

nếu User được thêm vào thì dùng các nào để có thể chia đều cho các instance là tốt nhất anh. Em đang sử dụng Java Spring boot và Redis ạ

  • Answer
java redis spring boot
Remain: 5
2 Answers
Avatar
monkey Beginner
monkey Beginner
Đây là bài toán siêu khó và nhiều rủi ro. Như kafka chẳng hạn thì nó đang dùng zookeeper để quản lý trạng thái của các instance. Em cũng có thể sử dụng zookeeper hoặc 1 socker server và thực hiện như sau:

  1. Cập nhật liên tục trạng thái của các instance về zookeeper, lúc này sẽ có 1 instance là master.
  2. Khi có 1 instance bị shutdown thì nếu là master thì phải chọn ra 1 instance khác làm master, nếu không thì thôi. Sau đó master sẽ phân phối danh sách các user nằm trên instance bị shutdown cho các instance còn lại.
  3. Khi có instance được bật lên thì master cũng sẽ phân phối lại danh sách các user và báo lại cho các instance để cập nhật.

Nhưng cá nhân anh thấy việc phân chia như này là nên cho bài toán siêu lớn và dữ liệu không cần xử lý transaction chứ bài toán xử lý 6000 users của em quá nhỏ để phải làm vậy em ạ.

  • 0
  • Reply
Avatar
6000 user là em chỉ lấy ví dụ thôi anh chứ nó lớn hơn rất nhiều. yêu cầu là phải chạy nhiều instance của module để xử lý n user(n rất lớn) này nên có cách nào khả thi và dễ implement, control không anh?
  • 0
  • Reply
Với bài toán user anh cũng không thấy cách chia như của em khả thi lắm, vì các user thường có mỗi liên hệ với nhau, nên không dễ dể xử lý độc lập. Với cả là với cấu trúc dữ liệu BTree và tốc độ I/O của ổ SSD với hàng TB như hiện nay thì hàng tỉ user cũng không phải là vấn đề, nên anh thấy có nhất thiết phải chia ra phức tạp như thế kia không? Cá nhân anh nghĩ là không em ạ.

Anh nghĩ là em cứ xử lý user như bình thường, nghĩa là có cơ sở dữ liệu tập trung rồi các service dùng chung. Riêng đối với các nghiệp vụ data phức tạp thì nên sử dụng các hệ thống như spark, hdoop sẽ hiệu quả hơn, vì đám này sinh ra để phục vụ bài toán dữ liệu lớn rồi.

 –  monkey 1671159444000