Điểm:1

ECS khởi động lại do lỗi health_check khi nhiều yêu cầu khác chậm trả lại

lá cờ de
Zev

Chúng tôi nhận thấy rằng các dịch vụ phụ trợ ECS Fargate của chúng tôi khởi động lại do hết thời gian chờ phản hồi kiểm tra tình trạng:

(dịch vụ our-site-com-stack-BackendApiServiceStack...) (cổng 8000) không tốt trong (nhóm mục tiêu arn:aws:elasticloadbalancing:us-east-1:1234:targetgroup/dev-d-ABC-ABC123/ ABC123) do (lý do Yêu cầu đã hết thời gian chờ).

Chúng tôi đang cố gắng tìm ra cách tiến hành health_check trên ứng dụng của chúng tôi cho ECS mà không cần phải khởi động lại dịch vụ của chúng tôi bất cứ khi nào cơ sở dữ liệu bận (hoặc các yêu cầu chậm khác đang chờ xử lý).

Ban đầu, chúng tôi cảm thấy tình huống có thể tương tự như tình huống được mô tả ở đây: https://cloudsoft.io/blog/conequences-of-bad-health-checks-in-aws-application-load-balancer. Về cơ bản, nếu cơ sở dữ liệu của chúng tôi bận/chậm, thì yêu cầu có thể hết thời gian chờ.

Tuy nhiên, chúng tôi đã sửa đổi health_check để không đánh vào cơ sở dữ liệu RDS postgres của chúng tôi và thậm chí đã thử tắt cơ sở dữ liệu của chúng tôi.Chúng tôi có thể tiếp cận điểm cuối ngay cả khi tắt cơ sở dữ liệu nhưng chúng tôi không thể tiếp cận điểm cuối khi chúng tôi kích hoạt ít nhất 7 yêu cầu sẽ hết thời gian chờ (chẳng hạn như yêu cầu đăng nhập khi cơ sở dữ liệu ngừng hoạt động) hoặc một số lượng yêu cầu tương tự sẽ bị chậm để trở lại (với cơ sở dữ liệu lên).

Trong Ngăn xếp ứng dụng AWS của chúng tôi, Tuyến 53 được sử dụng để định tuyến lưu lượng đến bản phân phối CloudFront của chúng tôi. CloudFront định tuyến lưu lượng truy cập cho điểm cuối này tới Cân bằng tải ứng dụng của chúng tôi cho ứng dụng Django.

Kiểm tra sức khỏe của chúng tôi là một phần của ứng dụng Django của chúng tôi và về cơ bản chỉ trả về 200 phản hồi:

def health_check(yêu cầu):
    phản hồi = JsonResponse({"nội dung": "OK"})
    phản hồi trở lại

Đây là cách kiểm tra sức khỏe của chúng tôi được thiết lập trong CDK:

        self.https_listener = self.alb.add_listener(
            "HTTPSListener",
            cổng = 443,
            chứng chỉ = [phạm vi.chứng chỉ],
            mở = Đúng,
        )

        phạm vi.https_listener.add_target(
            "Mục tiêu phụ trợ",
            cổng = 80,
            target=[self.backend_service],
            ưu tiên = 2,
            đường_mẫu=["*"],
            health_check=elbv2.HealthCheck(
                Healthy_http_codes="200-299",
                đường dẫn = "/api/core/kiểm tra sức khỏe /",
            ),
        )

Lệnh khởi động máy chủ sản xuất của chúng tôi là:

GEVENT_RESOLVER=ares gunicorn -t 1000 -k gevent -w 4 -b 0.0.0.0:8000 backend.wsgi

Trong quá trình thử nghiệm không liên quan, chúng tôi có thể tái tạo vấn đề tương tự bằng Daphne:

daphne -b 0.0.0.0 -p 8000 phụ trợ.asgi:application
Điểm:0
lá cờ de
Zev

Mặc dù yêu cầu không đến được cơ sở dữ liệu, nhưng nó đã bị kẹt sau khi chặn các yêu cầu (hoặc không quay lại vì các lý do khác). Chúng tôi đã hiểu nhầm vòng lặp sự kiện gunicorn (hoặc máy chủ khác) có thể bị chặn dễ dàng như thế nào và sẽ thiết kế lại để sử dụng tốt hơn các gevent và phần phụ trợ kết quả cần tây.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.