19

Gần đây tôi đã thêm một số khả năng cân bằng tải vào một phần mềm mà tôi đã viết. Nó là một ứng dụng nối mạng thực hiện một số dữ liệu crunching dựa trên đầu vào đến từ một cơ sở dữ liệu SQL. Kể từ khi crunching có thể được khá nhiều tôi đã thêm khả năng có nhiều trường hợp của ứng dụng này đang chạy trên các máy chủ khác nhau để chia tải nhưng vì bây giờ cân bằng tải là một hành động thủ công. Người dùng phải chỉ định các trường hợp nào lấy phần nào của miền đầu vào.Giao thức/Thuật toán nhịp tim hoặc các phương pháp hay nhất

Tôi muốn chuyển sang cấp độ tiếp theo và lập trình các trường hợp tự động thương lượng việc thu thập dữ liệu đầu vào và nhận ra nếu một trong số đó "biến mất" (đã bị lỗi hoặc bị tắt nguồn) để các trường hợp còn lại có thể thực hiện khối lượng công việc của cá thể không thành công. Để thực hiện điều này, tôi đang xem xét sử dụng một giao thức nhịp tim đơn giản giữa các cá thể để xác định ai đang trực tuyến và ai không và trong khi điều này không phức tạp đến mức tôi muốn biết liệu có bất kỳ mạng nhịp tim nào đã được thiết lập hay không giao thức (dựa trên UDP, TCP hoặc cả hai). Rõ ràng điều này xảy ra rất nhiều trong thế giới mạng với công nghệ clustering, fail-over và high-availability vì vậy tôi đoán cuối cùng tôi muốn biết liệu có thể có bất kỳ giao thức hoặc thuật toán đã được thiết lập nào mà tôi cần biết hay không. hoặc thực hiện.

EDIT

Dường như, dựa trên các câu trả lời, mà một trong hai có được thành lập không tốt giao thức trái tim beat hay mà không ai biết về họ (mà có ngụ ý rằng họ không nên cũng được thành lập sau khi tất cả) trong trường hợp này, tôi sẽ tự cuộn.

Mặc dù không có câu trả lời nào cung cấp những gì tôi đang tìm kiếm cụ thể tôi sẽ bỏ phiếu cho số Matt Davis's answer vì nó gần nhất và ông đã chỉ ra một ý tưởng hay để sử dụng phát đa hướng.

Cảm ơn tất cả vì đã dành thời gian của bạn ~

+0

Bạn có biết nếu có thể tùy chỉnh thông điệp nhịp tim gốc của WebLogic, để thêm một số thông tin bổ sung như CPU ​​hiện tại và/hoặc tải mạng không? (để cho phép các thuật toán cân bằng tải sử dụng thông tin đó để tránh quá tải máy chủ đang gặp khó khăn với nhiều yêu cầu hơn) – XpiritO

+1

Đó là một câu hỏi cho Pascal (http://stackoverflow.com/questions/1442189/heartbeat-protocols-algorithms-or- thực hành tốt nhất/1442255 # 1442255). Tôi không quen thuộc với WebLogic - trong trường hợp của tôi, tôi đã kết thúc bằng cách sử dụng những gì tôi đã bắt đầu làm việc trên đó là một giải pháp tùy chỉnh dựa trên UDP. –

Trả lời

7

Distribued Interactive Simulation (DIS), được xác định theo IEEE Chuẩn 1278, sử dụng nhịp tim mặc định là 5 giây thông qua phát sóng UDP. Một nhịp tim DIS cơ bản là một thực thể PDU của thực thể, xác định đầy đủ trạng thái, bao gồm cả vị trí của thực thể đã cho. Do ứng dụng của nó trong cộng đồng mô phỏng, DIS cũng sử dụng một khái niệm gọi là dead-reckoning để cung cấp nhịp tim cao hơn khi vị trí thực tế, ví dụ, nằm ngoài một ngưỡng nhất định của vị trí dự đoán của nó.

Trong trường hợp của bạn, DIS Entity State PDU sẽ quá mức cần thiết. Tôi chỉ đề cập đến nó để làm cho lưu ý thực tế là nhịp tim có thể thay đổi theo tần số tùy thuộc vào hoàn cảnh. Tôi không biết rằng bạn cần một cái gì đó như thế này cho các ứng dụng mà bạn mô tả, nhưng bạn không bao giờ biết.

Đối với nhịp đập tim, hãy sử dụng UDP chứ không phải TCP. Một nhịp tim, theo bản chất, một sự liên kết không kết nối, do đó, nó đi mà UDP (không kết nối) là có liên quan hơn ở đây hơn TCP (kết nối theo định hướng).

Điều cần lưu ý về chương trình phát sóng UDP là thông báo phát sóng được giới hạn trong số broadcast domain. Tóm lại, nếu bạn có máy tính được phân tách bằng thiết bị lớp 3, ví dụ: bộ định tuyến, khi đó chương trình phát sóng sẽ không hoạt động vì bộ định tuyến sẽ không truyền phát tin nhắn phát từ miền phát sóng này sang miền khác. Trong trường hợp này, tôi khuyên bạn nên sử dụng multicast vì nó sẽ mở rộng các miền phát sóng, cung cấp giá trị thời gian sống (TTL) được đặt đủ cao. Nó cũng là một cách tiếp cận tự động hơn so với hướng dẫn unicast, mà sẽ yêu cầu người gửi biết địa chỉ IP của người nhận để gửi tin nhắn.

4

Phát nhịp tim mỗi khi sử dụng UDP; nếu bạn không nghe từ một máy tính trong hơn k * t, sau đó nó giả định xuống. Hãy cẩn thận rằng băng thông tổng hợp được sử dụng không phải là một nguồn tài nguyên. Bạn có thể sử dụng địa chỉ IP phát sóng hoặc giữ một danh sách các IP cụ thể mà bạn đang làm việc.

Đảm bảo nhịp tim bao gồm "số lần khởi động lại" cũng như "ID máy" để bạn biết trạng thái máy chủ trước đó không ở xung quanh.

Tôi khuyên bạn nên sử dụng MapReduce nếu nó phù hợp. Nó sẽ tiết kiệm rất nhiều công sức.

+0

Cảm ơn, mẫu UDP rất cơ bản mà bạn đề cập chính xác là những gì tôi có trong đầu. MapReduce chắc chắn là thứ mà tôi sẽ phải xem xét nhưng tôi sẽ không thể sử dụng nó cho ứng dụng này vì ứng dụng đã được triển khai khác nhau. –

2

Tôi không chắc chắn điều này sẽ trả lời câu hỏi nhưng bạn có thể quan tâm đến cách phân cụm máy chủ Weblogic hoạt động dưới mui xe. Từ sách Mastering BEA WebLogic Server:

[...] WebLogic Server clustering cung cấp khớp nối lỏng lẻo của các máy chủ trong cụm. Mỗi máy chủ trong cụm là độc lập và không dựa trên bất kỳ máy chủ nào khác cho bất kỳ hoạt động cơ bản nào. Ngay cả khi liên hệ với mọi máy chủ khác bị mất, mỗi máy chủ sẽ tiếp tục chạy và có thể xử lý các yêu cầu mà nó nhận được. Mỗi máy chủ trong cụm duy trì danh sách riêng của các máy chủ khác trong cụm thông qua các thông báo nhịp tim định kỳ. Cứ 10 giây một lần, mỗi máy chủ gửi một thông điệp nhịp tim đến các máy chủ khác trong cụm để cho họ biết nó vẫn còn sống. Thông điệp nhịp tim được gửi bằng cách sử dụng công nghệ IP multicast được tích hợp vào JVM, làm cho cơ chế này hiệu quả và có thể mở rộng được vì số lượng máy chủ trong cụm lớn.Mỗi máy chủ nhận được các thông điệp nhịp tim này từ các máy chủ khác và sử dụng chúng để duy trì danh sách thành viên cụm hiện tại của nó. Nếu máy chủ không nhận được ba thông báo nhịp tim trong một hàng từ bất kỳ máy chủ nào khác, máy chủ đó sẽ thoát khỏi danh sách thành viên của nó cho đến khi nó nhận được một thông báo nhịp tim khác từ máy chủ đó. Công nghệ nhịp tim này cho phép các máy chủ được thêm và giảm tự động từ cụm sao mà không ảnh hưởng đến cấu hình của máy chủ hiện tại.

+0

Multicast có thể không hoạt động trên WAN. Ưu điểm của IMO đa hướng là bạn không cần phải biết cách bạn đang gửi đến (không cần cấu hình danh sách các nút hoặc các đồng nghiệp). – ChrisW

+0

Đồng ý với cả hai điểm. BTW, tôi nên nói rằng, bắt đầu với Weblogic 10, BEA/Oracle hỗ trợ giao tiếp giữa các thành viên cluster sử dụng Unicast (được khuyến khích) ngoài Multicast. –

+0

Bạn có biết nếu có thể tùy chỉnh thông điệp nhịp tim gốc của WebLogic, để thêm một số thông tin bổ sung như CPU ​​hiện tại và/hoặc tải mạng không? (cho phép các thuật toán cân bằng tải sử dụng thông tin đó để tránh quá tải máy chủ đang gặp khó khăn với nhiều yêu cầu hơn) – XpiritO

2

Thiết bị chuyển mạch nội dung của Cisco là giải pháp phần cứng cho vấn đề này. Chúng thực hiện một địa chỉ IP ảo như một giao diện người dùng cho nhiều máy chủ thực, mà các địa chỉ IP thực của chúng được biết đến với switch. Chuyển đổi định kỳ gửi các yêu cầu HTTP HEAD đến các máy chủ web, để xác minh chúng vẫn đang chạy (phần mềm chuyển đổi gọi là "keepalive", mặc dù điều này không giữ cho máy chủ tự hoạt động). Bộ chuyển đổi của Cisco chấp nhận lưu lượng truy cập trên IP ảo và chuyển tiếp nó đến các máy chủ web thực tế, sử dụng cân bằng tải cấu hình như vòng xoay hoặc cân bằng tải do người dùng xác định.

Các thiết bị chuyển mạch này bán lẻ trong phạm vi 3-10K $, mặc dù đối tác kinh doanh của tôi đã chọn một thiết bị trên eBay với giá khoảng 300 đô la một năm trước. Nếu bạn có thể đủ khả năng, họ đại diện cho một giải pháp phần cứng đã được chứng minh cho câu hỏi làm thế nào để có một dịch vụ lây lan minh bạch trên nhiều máy chủ. Redhat bao gồm một cấu hình cổng tích hợp để bạn có thể thực hiện chuyển đổi Cisco của riêng bạn bằng cách sử dụng một hộp RedHat giá rẻ. Google cho "địa chỉ ip ảo" và "bộ định tuyến nội dung cisco" để biết thêm thông tin.

+0

@Paul, cảm ơn mẹo nhưng những thiết bị chuyển mạch chỉ cho phép bạn biết liệu máy chủ có còn hoạt động hay không và liệu ứng dụng có đang chạy hay không - đó là điều tôi quan tâm. –

+0

Ah, trong trường hợp của chúng tôi, máy chủ * là * ứng dụng. Nhưng bạn có thể xem xét tùy chọn dựa trên Linux - vì ứng dụng của bạn đã được phân phối, nó phải có một số cơ sở hạ tầng truyền thông, vì vậy bạn có thể có khả năng đáp ứng giao diện bỏ phiếu cho giao diện người dùng. Hầu hết các tùy chọn này đều cung cấp giao diện tùy chỉnh, để bạn có thể viết phương thức của riêng mình. Chúc may mắn! – PaulMcG

1

Ngoài việc thử phần cứng cân bằng tải, bạn cũng có thể thử một ứng dụng phần mềm cân bằng tải miễn phí mã nguồn mở như HAProxy, có sẵn cho Linux và BSD.

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