Tôi phải giải quyết khoản thu này và nảy ra một ý tưởng. Khi thực hiện nghiên cứu cho nhiệm vụ này, tôi đã nhận được ở đây, vì vậy tôi nghĩ tôi sẽ chia sẻ giải pháp của mình với những khách truy cập trong tương lai của bài đăng này.
Giải pháp dựa trên Docker-soạn
Nếu bạn đang sử dụng docker-comp, bạn có thể xem POC đồng bộ hóa docker của tôi . Tôi đã kết hợp một số ý tưởng trong các câu hỏi khác (cảm ơn vì điều đó - đã ủng hộ).
Ý tưởng cơ bản là mọi thùng chứa trong hỗn hợp đều thể hiện một dịch vụ chẩn đoán. Việc gọi dịch vụ này sẽ kiểm tra xem tập hợp các cổng được yêu cầu có đang mở trong vùng chứa hay không và trả về trạng thái tổng thể của vùng chứa (WARMUP / RUNNING theo POC). Mỗi vùng chứa cũng có một tiện ích để kiểm tra khi khởi động xem các dịch vụ phụ thuộc có đang hoạt động hay không. Chỉ sau đó thùng chứa mới khởi động.
Trong môi trường docker-soạn ví dụ, có hai dịch vụ server1 và server2 và dịch vụ khách sẽ đợi cả hai máy chủ khởi động sau đó gửi yêu cầu đến cả hai và thoát.
Trích từ POC
wait_for_server.sh
#!/bin/bash
server_host=$1
sleep_seconds=5
while true; do
echo -n "Checking $server_host status... "
output=$(echo "" | nc $server_host 7070)
if [ "$output" == "RUNNING" ]
then
echo "$server_host is running and ready to process requests."
break
fi
echo "$server_host is warming up. Trying again in $sleep_seconds seconds..."
sleep $sleep_seconds
done
Đang chờ nhiều vùng chứa:
trap 'kill $(jobs -p)' EXIT
for server in $DEPENDS_ON
do
/assets/wait_for_server.sh $server &
wait $!
done
Triển khai cơ bản dịch vụ chẩn đoán ( checkports.sh ):
#!/bin/bash
for port in $SERVER_PORT; do
nc -z localhost $port;
rc=$?
if [[ $rc != 0 ]]; then
echo "WARMUP";
exit;
fi
done
echo "RUNNING";
Kết nối dịch vụ chẩn đoán với một cổng:
nc -v -lk -p 7070 -e /assets/checkports.sh