최신 애플리케이션에서는 지속적인 연결이 핵심이며, 특히 백엔드 서비스에 의존하는 모바일 앱의 경우 더욱 그렇습니다. 이 블로그에서는 앱 서비스 서버의 상태를 모니터링하고 필요한 경우 보조 서버로 자동 페일오버하는 Python 기반 솔루션을 살펴보겠습니다. 이 샘플 코드는 HTTP 상태 확인과 WebSocket 연결 엔드포인트를 사용하여 애플리케이션이 항상 정상 서비스에 연결되도록 합니다.

개요

이 솔루션에는 두 가지 유형의 엔드포인트가 포함됩니다:

    1. 상태 확인 URL
      • 이러한 엔드포인트(예, https://.../_ping)를 사용하여 폴링합니다. HTTP HEAD 요청.
      • 앱 서비스 서버가 정상인지 확인합니다.
    2. 연결 엔드포인트
      • 웹소켓 URL(예, wss://.../primary)를 사용하여 애플리케이션이 백엔드와 상호 작용하는 데 사용합니다.
      • 활성 연결 엔드포인트는 상태 확인 결과에 따라 업데이트됩니다.

기본 서버의 상태 확인에 연속적으로 실패하면 장애 조치 로직이 애플리케이션의 연결을 보조 서버로 전환합니다.

코드 상세 정보

아래는 인라인 주석과 자세한 설명이 포함된 전체 코드입니다:

주요 기술 포인트

    • 앱 서비스 서버의 상태 확인:
      이 코드는 상태 확인 엔드포인트 (모니터링에 사용됨)에서 연결 엔드포인트 (애플리케이션에서 사용). 이를 통해 안정적인 연결 엔드포인트를 유지하면서 서버 상태를 독립적으로 확인할 수 있습니다.
    • HTTP 헤드 요청:
      사용 HEAD 요청에 대한/_ping 엔드포인트는 데이터 전송을 최소화하는 동시에 진단을 위한 상태 코드와 헤더를 제공합니다.
    • 백그라운드 스레드:
      그리고 건강_체크_근로자 는 자체 데몬 스레드에서 실행되므로 메인 애플리케이션 스레드를 차단하지 않고도 지속적인 상태 모니터링이 가능합니다.
    • 장애 조치 로직:
      • 카운터(연속_실패)는 연속적인 실패를 추적합니다.
      • 횟수가 설정된 임계값(9회 실패)을 초과하면 스크립트에서 대체 서버의 상태를 확인하여 장애 조치를 시도합니다.
      • 보조 서버에서 상태 확인에 성공하면 활성 연결 엔드포인트가 업데이트됩니다.
    • 로깅:
      상세 로깅은 HTTP 응답 상태, 헤더, 장애 조치 이벤트 등 상태 확인 프로세스에 대한 인사이트를 제공합니다. 이는 문제 해결 및 모니터링에 도움이 됩니다.

애플리케이션에 맞게 조정하기

    • 이 코드를 애플리케이션의 요구 사항에 맞게 Swift, Kotlin 등 원하는 프로그래밍 언어로 쉽게 번역하고 조정할 수 있습니다.
    • 이 스크립트나 로직을 다음과 같이 통합할 수 있습니다. 모바일 코드 (iOS/안드로이드) 또는 백엔드 서비스 를 업데이트하는 활성 엔드포인트.
    • iOS 또는 Android를 사용하는 경우 이 코드를 실행하는 빈도와 위치를 고려하세요. 예를 들어 백그라운드 작업이나 푸시 알림은 모바일 컨텍스트에서 상태 확인을 트리거할 수 있습니다.
    • 마이크로서비스 아키텍처를 사용하는 경우, 이 장애 조치 로직을 소규모 서비스에서 실행할 수 있습니다. 현재 활성 URL 를 모바일 앱에 추가하여 항상 올바른 WSS 엔드포인트에 연결되도록 합니다.

결론

이 샘플 코드는 기본 서버에 연결할 수 없게 되면 자동으로 백업 서버로 장애 조치하여 애플리케이션의 고가용성을 보장하는 간단하면서도 강력한 메커니즘을 제공합니다. 연결 엔드포인트에서 상태 검사를 분리함으로써 애플리케이션이 항상 WebSocket을 통해 정상 서버에 연결되도록 보장합니다.

프로덕션 환경에서는 특정 요구 사항, 네트워크 조건 및 보안 정책에 맞게 로직을 조정하고 확장해야 할 수 있습니다.

모바일 애플리케이션이나 백엔드 서비스에 이 로직을 구현하면 가동 시간과 복원력을 크게 개선하여 예기치 않은 서비스 중단 중에도 사용자가 계속 연결 상태를 유지할 수 있습니다.

 

작성자

게시자 니샨트 바티아 - 클라우드 아키텍트

댓글 남기기