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 ạ
java
redis
spring boot
Remain: 5
2 Answers
monkey
Enlightened
monkey
Enlightened
Đâ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:
- 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.
- 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.
- 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
Hồng Quân Nguyễn
Beginner
Hồng Quân Nguyễn
Beginner
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