전통문화대전망 - 중국 전통문화 - 시스템 아키텍처의 고가용성이란 무엇인가요? 시스템의 고가용성을 어떤 측면에서 개선해야 합니까?

시스템 아키텍처의 고가용성이란 무엇인가요? 시스템의 고가용성을 어떤 측면에서 개선해야 합니까?

고가용성(HA)은 이름에서 알 수 있듯이 시스템이 서비스를 제공할 수 없는 시간을 최소화하는 것이며, 시스템이 항상 작동 상태를 유지하고 외부 세계에 서비스를 제공할 수 있다면 우리는 이렇게 말합니다. 시스템 가용성은 100%입니다. 대부분의 회사는 말로만 설명하지 않으므로 종종 3개의 9와 4개의 9라는 목표를 제시합니다. 즉, 연간 시스템 가용성은 99.9%, 99.99%입니다.

그렇다면 시스템의 고가용성을 어떻게 보장할 수 있을까요? 단일 포인트를 방지하고 중복성을 높이는 것이 핵심 아이디어라고 생각합니다. 먼저 기존 아키텍처의 모습과 위험이 있는 부분을 살펴보겠습니다.

아키텍처의 모든 부분이 단일 지점이라면 단순히 위험할 뿐입니다. 어떤 링크에 문제가 있으면 전체 시스템이 붕괴될 수 있습니다(캐시 부분은 직접적인 영향을 미치지 않을 수 있습니다). 하지만 캐시가 효과를 잃으면 데이터베이스가 다운되는 경우가 많습니다. 실제로 해결 방법은 시스템의 모든 부분에 중복성을 추가하는 것입니다.

클라이언트에서 웹 애플리케이션으로: 웹 애플리케이션을 추가하려면 먼저 Nginx와 같은 로드 밸런싱인 역방향 프록시 레이어를 추가해야 합니다. 그러나 Nginx를 하나만 배포하는 경우 일반적으로 단일 지점으로 배포합니다. 다수의 Nginx, 하나는 서비스 제공, 나머지는 ""Spare Tire"에 해당) Keepalived를 통해 작동 중인 Nginx가 살아 있는지 모니터링합니다. 메인 서버에 장애가 발생하여 외부 서비스를 제공할 수 없는 경우 가상 IP(가상 IP)를 동적으로 전환합니다. 서비스를 계속 제공하려면 백업 머신에 연결하세요.

웹 애플리케이션에 대한 로드 밸런싱: 여러 웹 애플리케이션을 구축하고, Nginx와 같은 로드 밸런싱에서 여러 웹 터미널의 주소를 구성하고, 여러 웹 터미널의 생존을 모니터링합니다. 특정 애플리케이션이 정지되면 모니터링됩니다. , 그러면 Nginx는 더 이상 이 시스템에 요청을 배포하지 않습니다.

서비스 계층에 대한 웹 애플리케이션: 이를 구현하는 방법에는 여러 가지가 있습니다. 예를 들어 서비스 계층의 프런트 엔드에도 로드 밸런싱이 로드되거나 클라이언트(웹) 내에서 로드 밸런싱이 수행됩니다. 여기서 응용 프로그램은 클라이언트입니다. 이는 서비스 계층의 여러 주소를 구성하는 것과 같습니다. 각 요청은 특정 규칙에 따라 다운스트림 서비스에 액세스하기 위한 연결을 선택하고 서비스 연결 풀을 사용하여 서비스 계층 응용 프로그램의 생존을 모니터링합니다. ) 서비스 등록 검색 방법을 사용할 수도 있습니다(서비스를 제공할 수 있는 애플리케이션만 등록 센터에 표시됩니다).

캐시를 위한 서비스 계층: 캐시의 존재 자체가 일종의 중복성입니다. 캐시 계층은 클러스터링을 통해 캐시 계층의 고가용성 문제도 해결할 수 있습니다. Redis를 예로 들면, 마스터-슬레이브 동기화를 지원하고 Redis 생존 감지를 위한 감시 메커니즘이 있습니다.

데이터베이스에 대한 서비스 계층: 데이터베이스는 일반적으로 데이터베이스 읽기의 고가용성을 위해 마스터-슬레이브 아키텍처를 채택합니다. db-connection-pool은 일반적으로 자동 장애 조치를 보장하는 데 사용되며 쓰기 작업에는 일반적으로 keepalived+virtualIP가 필요합니다. (가상 IP)로 자동 전환됩니다.

위 내용은 모두 시스템의 고가용성을 보장하기 위한 솔루션입니다. 클라이언트의 모든 요청에 ​​응답할 수 있도록 노력하지만 시스템 리소스를 무한정 투자할 수는 없으므로 높은 가용성을 보장하기 위한 몇 가지 솔루션이 필요합니다. 일부 사용자:

현재 제한: 우리 인터페이스는 200개의 동시성만 지원할 수 있으며 우리 페이지는 동시에 액세스하는 사람을 10,000명까지만 지원할 수 있으므로 추가 비용이 발생합니다. 죄송합니다. 액세스를 제한해야 합니다. 흐름 알고리즘에는 누수 버킷 및 토큰 버킷이 포함됩니다.

다운그레이드: 핵심 기능의 안정적인 작동을 보장하기 위해 비핵심 비즈니스 기능을 희생합니다.

회로: 서비스 링크(A 조정 B, B를 C로 조정, C를 D로 조정)에서 특정 서비스의 응답 시간이 너무 길거나 실패하면 서비스가 다운그레이드됩니다. 노드 서비스 호출을 중단하고 신속하게 오류 메시지를 반환하지만 서킷 브레이커를 사용하는 사람을 본 적이 없습니다...

그레이스케일 릴리스: 새로운 기능을 확인하기 위해 새로 실행된 애플리케이션에 일부 트래픽을 보냅니다. 온라인에 접속한 후 버그가 있는 경우 신속하게 롤백하여 게시 위험을 최소화할 수 있습니다.

자바 개발, 아키텍처 디자인, 프로그래머 경력 개발 등에 대한 저의 통찰을 앞으로도 공유할 예정이니 많은 관심 부탁드립니다.