8

Chúng tôi có dịch vụ tính toán chuyên sâu được sử dụng để thực hiện một số phép biến đổi. Quá trình liên kết CPU (ràng buộc CPU) của nó phần lớn. Về cơ bản những gì xảy ra là chúng tôi có một nhà môi giới tin nhắn gửi tin nhắn đến dịch vụ xử lý thông qua tiết kiệm.Tải dịch vụ cân bằng bằng cách sử dụng Zookeeper và Thrift

Bây giờ chúng tôi có nhiều dịch vụ xử lý khác nhau chạy các thuật toán khác nhau để xử lý các thư - các thư này được định tuyến đến một hoặc nhiều thuật toán xử lý. Khối lượng tin nhắn của chúng tôi là biến và do đó là nhu cầu của các thuật toán xử lý (tức là chúng ta có thể nhận được nhiều tin nhắn có chứa XYZ sau đó gửi đến algo 1 nếu không gửi cho algo 2).

Chúng tôi muốn mở rộng điều này thành một thứ có thể mở rộng theo chiều ngang. Vì vậy, chúng tôi có nhiều nút đang chạy các thuật toán xử lý. Bây giờ tùy thuộc vào tin nhắn tải yêu cầu tiết kiệm của chúng tôi nên được gửi đến các máy chủ khác nhau (giả sử rằng tất cả các dịch vụ đang chạy một ví dụ của mỗi chế biến Algo1 đến 3). Ví dụ, chúng ta đang nhận được một số lượng lớn các thông điệp mà chúng ta muốn xử lý trên Algo 1 sau đó chúng ta có hai máy chủ chạy bản ngã 1 và máy chủ thứ 3 trông nom các yêu cầu cho hai thuật toán khác (Algo 2 & 3).

Vì vậy, hệ thống trông như thế này:

Client ----Request-------| 
       -----------|-------------------- 
       | Coord & Load Balancer Service | ... like zookeeper 
       -------------------------------- 
         <--|--> 
         | Route messages to servers... 
    Server1:    Server2:   Server 3: 
Algo1 instance  Algo1 instance  Algo2 instance 
              Algo3 instance  

Tất cả quá trình được viết bằng Java.

Vì vậy, điều dễ dàng như thế này sẽ được thiết lập bằng cách sử dụng Zookeeper. Tôi biết rằng khi chúng ta thêm hoặc thay đổi thuật toán, chúng ta có thể dễ dàng sử dụng Zookeeper để xử lý phần cấu hình của mọi thứ (tức là máy chủ lắng nghe bản cập nhật hoặc bổ sung của algo và phục vụ chúng như được định cấu hình) nhưng làm cách nào để quản lý khía cạnh cân bằng tải?

Chúc mừng!

+0

Xin chào, bạn đã giải quyết câu hỏi này chưa? Tôi có thể hỏi bạn làm thế nào bạn làm điều đó? Tôi đang nghiên cứu về cùng một câu hỏi ngay bây giờ (triển khai dịch vụ tiết kiệm khả năng mở rộng có thể mở rộng), và bất kỳ kinh nghiệm hoặc lời khuyên nào là tốt đẹp để có được ;-) –

+0

@Sergey Vasilyev, chúng tôi đã triển khai giải pháp riêng của chúng tôi một ZooKeeper hàng đầu theo cách tương tự theo cách mà Norbert làm mọi thứ (với nhiều tính năng ít hơn). Có thể xem xét việc thực hiện Norbert nếu một số thời gian miễn phí cuộn quanh, dự án tìm kiếm rất đẹp. IMO không làm những gì chúng tôi đã làm, hãy xem câu trả lời của Jonas dưới đây. Hãy cho tôi biết nếu bạn vẫn muốn biết thêm thông tin về impl của chúng tôi. – NightWolf

+0

có, tương tự như Norbert, ngoại trừ việc tôi sử dụng Python & PHP (đã có) và sẽ sử dụng Java & C/C++ trong tương lai (gần nhất hoặc đủ xa - chưa được quyết định). Đó là lý do tại sao tôi đã chọn Tiết kiệm như một giải pháp RPC. Và điều duy nhất còn lại là cân bằng tải và quản lý cụm. ZooKeeper có vẻ tốt cho điều này, nhưng tôi đang tìm kiếm các giải pháp kiến ​​trúc cụ thể. Norbert, như đã thấy trên bức tranh đó, là một khái niệm cơ bản về những gì tôi đang tìm kiếm. Vì vậy, nó là tốt? Nó ổn định? Có dễ quản lý không? Hoặc bạn có thể mô tả cách bạn giải quyết vấn đề này? Jabber của tôi là "[email protected]", Skype là "nolar.info". Cảm ơn :) –

Trả lời

6

Các bạn có thể muốn một cái gì đó giống như Norbert từ LinkedIn: http://sna-projects.com/norbert/ Họ sử dụng liên lạc ngang hàng giữa khách hàng và máy chủ và sử dụng trình quản lý vườn thú để đăng ký dịch vụ và báo hiệu ngoài băng tần. Nội dung thú vị. Nó cho phép bạn chỉ kích hoạt một nút xử lý khác có thể giúp xử lý các yêu cầu trong khi tải cao.

/Jonas

+0

Rất đẹp. Chúng tôi đã thực hiện một cái gì đó như thế này, không có nơi gần như đầy đủ tính năng, nhưng một khái niệm tương tự. Xấu hổ, chúng tôi đã không biết về điều này một vài tháng trước đây. Cảm ơn! – NightWolf

Các vấn đề liên quan