- vừa được xem lúc

Đĩ Nghiện Code Thuật Vấn Đáp cách xây dựng một website hàng triệu người dùng P5 Leader Election

0 0 23

Người đăng: Nguyễn Đình Nghĩa

Theo Viblo Asia

Bài trước tại đây Đĩ: Ngày vừa mưa vừa lụt, nếu một server bị lụt thì cơ chế thế nào để đảm HA đây anh Nghiện?

Nghiện: Có vài con server chống lụt thôi chứ sao? Chết con này còn con khác đấy chính là cơ chế HA.

Đĩ: Chỗ API thì em ok rồi, vì mình có cơ chế load balancing, chết con Server API này thì vào con khác rất OK, nhưng chỗ worker ấy, em không muốn nó chạy tất cả các con worker cùng lúc, em chỉ có nhu cầu chạy một con thôi, để đảm bảo toàn vẹn dữ liệu, nhưng nếu con đó chết em muốn có con khác thay ngay lập tức.

Nghiện: Trường hợp đấy cần dùng cơ chế Leader Election, nghĩa là chỉ có một con là leader thực thi thôi, các con khác không thực thi mà sẽ thay khi con leader ngỏm mà thôi.

Đĩ: Đại loại như thế nào?

Nghiện: Kiểu như hình này

Trong đó thay vì mọi server đều thực hiện việc lưu dữ liệu vào database, chỉ có một con chạy còn các con khác để dự phòng thôi. Nếu con đó chết sẽ bầu lại leader mới và lúc đó con leader mới sẽ tiếp tục công việc.

Đĩ: Nghe hấp dẫn đấy nhưng làm sao để bọn nó bầu được nhỉ? Như em đi bầu còn chả biết chọn ai nữa là cái máy. Lại còn biết nay con leader chết mà thay luôn chứ. Bầu nhanh thế mới ảo. Không bị nhầm kiểu hai con đều làm leader rồi cùng ra lệnh mới hay chứ.

Nghiện: Uk cái đó cũng hơi bị khó đấy, may mà có mấy ông đầu to nghĩ cho mình rồi. Có vài thuật toán như Paxos hay Raft và nó tương đối là phức tạp. Nếu mình phải implement thuật toán đó cho server thì sẽ hơi bị mất công.

Đĩ: Thế là có thư viện đỡ phải cài ấy gì hehe!

Nghiện: Thực ra không hẳn thế, mà là có mấy phần mềm đã dùng các thuật toán trên rồi như zookeeper và etcd, Zookeeper được dùng trong Kafka còn Etcd được dùng trong K8s toàn hàng nổi tiếng cả. Nó không hẳn để dùng cho leader election, nhưng nó giúp chúng ta tự implement leader election dễ dàng hơn.

Đĩ: Như thế nào mà dễ, anh ví dụ em cái xem nào? Lại ngáo rồi. Hồi bé em thích vẽ bảo anh dạy thế là anh bắt em làm mẫu khỏa thân anh vẽ, xong lúc dạy lại bảo em cứ làm theo hướng dẫn là dc, em có vẽ được đâu.

Nghiện: Hừm cái bức tranh đó mất đâu rồi, để hôm nào làm mẫu lại cho anh nhé! Đại ý thì cài tool mình dùng kia nó là một cái db cho dễ hiểu đi, key-value store và quan trọng nhất là nó highly available và strongly consistent. HA thì em biết rồi nghĩa là nó không hay bị ngỏm, còn consistent là gì? là trên hệ thống phân tán, khi em thêm hay lấy dữ liệu từ bất kỳ đâu cũng luôn ra một kết quả giống nhau, hoặc không lấy được cái gì cả.

Đĩ: Kinh nhỉ vừa HA lại vừa consistent khó phết đấy chứ, bên họ làm thế nào nhỉ?

Nghiện: Anh không biết chắc là implement một trong hai thuật toán kia, thôi đi tiếp nào. Ý tưởng của việc này là ta chỉ cần lưu tên hoặc IP của leader vào Etcd với một thời gian cố định ví dụ 5s không cho bất kỳ server nào được sửa. Khi hết thời gian ta lại save key đó bằng ip của server đó. Nếu leader bị chết thì sẽ không giữ key đó được, server nào mà save được vào thì nó lại trở thành leader. Anh không thích viết code vào đây em có thể google election leader etcd hoặc zookeeper là ra ngay.

Đĩ: OK em hiểu rồi.

Một số khái niệm cần lưu ý: Leader election, etcd, zookeeper,consistent,Paxos,Raft

Góc tuyển dụng: Hiện tại mình đang có mấy job khác ngon các bạn cần có thể liên hệ mình nhé.

  • Front-end Engineer Manager - mức Offer ~100M
  • Java Technical Architect ~70
  • .NET Technical Lead ~70 nếu role SA có thể ~ 100

Ngoài ra có nhiều job nữa nếu bạn nào có nhu cầu tìm việc có thể liên hệ với mình nhé!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tăng tốc database phần 1 index - khái niệm cơ bản

Phần đầu tiên trong chuỗi bài là các phần liên quan tới database, nhiều bạn thích trình bày các vấn đề khác về database tuy nhiên theo kinh nghiệm cá nhân mình thấy hiểu về index trong db rất quan trọ

0 0 42

- vừa được xem lúc

Tăng tốc database index phần 2 - Leaf Nodes

Đầu tiên mình định dịch ra là nút lá, nhưng nghe nó không được hay cho lắm nên quyết định giữ nguyên tên của nó là Leaf Nodes. Giải pháp để khắc phục vấn đề này là mấy ông làm ra cơ sở dữ liệu sẽ khôn

0 0 35

- vừa được xem lúc

Tăng tốc database index phần 3 - B-Tree

Index leaf node được lưu trữ theo dạng Linked List về mặt logic, còn về cấu trúc lưu trữ vật lý, mỗi leaf node có thể lưu lung tung, không có thứ tự gì, nó giống một quyền từ điển mà các trang bị xáo

0 0 44

- vừa được xem lúc

Tăng tốc database index phần 4 - Index chậm

Như bài trước đã viết, tốc độ duyệt cây tìm kiếm cân bằng là siêu nhanh, thế mà không hiểu sao mình đã đánh index rồi mà lệnh truy vấn vẫn chậm, mấy thằng cha làm cơ sơ dữ l

0 0 45

- vừa được xem lúc

Tăng tốc database index phần 5 -WHERE trên khóa chính

Trong những phần trước mình đã mô tả về cách index hoạt động và nguyên nhân làm index chậm, trong các phần sau mình sẽ mô tả cách phát hiện mà tránh những vấn đề này, bắt đầu với WHERE. Phần lệnh WHER

0 0 123

- vừa được xem lúc

Tăng tốc database index phần 6 -Index kết hợp

Mặc dù khóa chính được tạo index tự động, và ta biết nếu where theo khóa chính thì chạy rất nhanh rồi, nhưng nếu khóa chính lại bao gồm nhiều trường thì sao trường hợp này được gọi là concatenated ind

0 0 174