어떻게 고 가용성 시스템을 설계? 어떤 영역을 고려?

이 문서는 오픈 소스 JavaGuide의 저자로 포함되었습니다 : github.com/Snailclimb는 그들은 또한 좋은 생각한다면 (69K + 학습 + 스타 [자바] 자바 프로그래머의 대부분이 알 필요가있는 핵심 지식을 다루는 면접 가이드), 점 A를하실 수 있습니다 스타, 격려!

짧은 기사, 인터뷰는 종종이 문제가 발생합니다. 이 논문은 다음과 같은 내용을 포함한다 :

  1. 고 가용성의 정의
  2. 어떤 상황 시스템 사용할 수 없게 될 수 있습니다?
  3. 일부 방법은 시스템 가용성을 향상시키기 위해? 단순히 전류 제한을 가지고, 미래 기사에 덮여 입,보다 구체적으로 내용을 언급, 당신은 알게해야합니다 전류 제한은 무엇인가? 어떻게 제한? 왜 제한? 그것을 어떻게? 원칙에 대해 이야기? .

가용성은 무엇입니까? 가용성 기준은 무엇입니까?

가용성은 우리를 위해 서비스를 제공 할 수 있습니다 사용할 수있는 시간의 대부분의 시스템을 설명합니다. 가용성 서비스를 계속 사용할 수 있습니다, 심지어는 하드웨어 장애 또는 시스템 업그레이드의 경우에 시스템을 나타냅니다.

정상적인 상황에서, 우리는 시스템의 같은 99.9999 %의 실행 시간을 모두 표현하기 위해 얼마나 많은 시스템의 가용성 나인, 판단하는 데 사용 가능한 시간의 0.0001 %가 이러한 시스템은 매우, 매우 높은 가용성입니다! 물론, 시스템 가용성이있을 것인지하는 것은 좋지 않다, 그들은 심지어 9가 없을 수 있습니다.

어떤 상황이 시스템 사용할 수없는 원인이됩니다?

  1. 해커 공격;
  2. 서버가 고장 같은 하드웨어 오류.
  3. 서비스를 사용할 수 아래로 동시성 / 서지 사용자 요청은 전부 또는 서비스 촬영의 일부 원인이됩니다.
  4. 메모리 누수 또는 기타 문제 원인 코드 나쁜 맛이 프로그램이 정지 원인이되었다.
  5. 그런 갑자기 사용할 수 없습니다 Nginx와 같은 사이트 아키텍처 또는 데이터베이스에서 중요한 역할.
  6. 자연 재해 또는 파괴 행위.
  7. ......

시스템 가용성을 증가하는 방법?

1. 코드의 품질에주의, 엄격한 테스트

나는이 같은 메모리 누수와 같은 코드의 품질 문제가 일반적인 지금까지 가장 중요하여 시스템 가용성에 순환 종속성이 크게 손상라고 생각합니다. 모든 사람의 사랑은 제한 강등, 퓨즈에 대해 이야기하지만, 나는이 소스 코드 품질 검사에서 중요 한 일을 가장 먼저 생각합니다. 어떻게 코드 품질을 향상시키기 위해? 비교가 한 시간 시간을 보내고 하루 이상에 대한 상관 없어, 실제로 사용할 수 코드 검토하고, 역할은 큰 거래를 할 수있다!

또한, 암웨이는 개선 코드 품질의 실제 효과에 아기를 가지고 :

  1. sonarqube : 당신이 더 안전한 청소기 코드를 작성해야합니다! (추신 : 현재 기본 항목이 플러그인을 사용합니다 상주).
  2. 자바 진단 도구 오픈 소스 아서스 알리바바는 아주 좋은 선택입니다.
  3. 코드 스캔 IDEA 자신의 코드 분석 도구는 아주, 아주 좋은 것입니다.

단일 장애 지점을 감소 클러스터를 사용합니다

레디 스 일반적인 예를 획득! 우리는 어떻게 그것의 우리의 레디 스 캐시 가용성을 보장합니까? 대답은 단일 장애 지점을 방지하기 위해 클러스터를 사용하는 것입니다. 레디 스 인스턴스 후 끊었 때 우리는 캐시로 레디 스의 예를 사용하면 전체 캐시 서비스는 전화를 끊었 할 수있다. 클러스터를 사용하여 후, 레디 스 인스턴스는 덜 일초보다 레디 스 인스턴스 위에 또 다른 하나가있을 것입니다 경우에도 마찬가지입니다.

3. 제한

제어부 (흐름 제어)의 흐름 원리는 QPS 또는 동시 스레드 지표 애플리케이션 트래픽의 수를 모니터링하고,이 트래픽 제어를위한 소정의 임계치에 도달 할 때, 이에 의해 높은 가용성 응용 프로그램을 보호하는 일시적인 트래픽 증가가 떠내려 피하기. - alibaba-에서 센티넬 위키의.

4. 타임 아웃 및 재시도 메카니즘이 제공된다

사용자가 요청하면 예외를 발생, 특정 응답 시간을 초과 할 수 없다. 온라인 시스템 오류 또는 시간 제한 설정 제한 시간이 방법을 설정하지 많이하지 발생하기 때문에 매우 중요하다. 우리는 특히 집합 시간 제한 및 재시도 메커니즘에 대해, 제 3 자 서비스 시간에 읽어 보시기 바랍니다. 일반적으로, 우리는 이러한 프레임 워크는 재시도 구성을 구축, 일부 RPC 프레임 워크를 사용합니다. 더 요구 타임 아웃 시간 설정이 느린 반응을 일으킬하지 않으며, 할 수있는 경우에도 요청의 축적으로 이어질 후 시스템이 요청을 처리 할 수 ​​없습니다 수 있습니다. 일반적으로 다음 반복적으로 어떤 혜택을 재 시도하지 않지만 (맞지 않는 장면 실패 재시도 메커니즘의 일부를 사용하여) 서버에 압력을 증가, 3 번 재시도 횟수를 설정합니다.

5. 퓨즈기구

외부 시간 제한 및 재시도 메커니즘은 퓨즈 메커니즘은 매우 중요하다, 설정합니다. 그것은 퓨즈 메커니즘이 종속 서비스가 저하 또는 통화 실패가 현재의 시스템은 즉시 다른 백업 서비스에 의존하는 스위치 그래서 빨리 패배의 특정 임계 값에 도달하면 자동으로 서비스를 따라 수집 리소스 사용 및 성능 측정 시스템입니다 말했다. 일반적으로 강등 워크 넷플릭스 Hystrix의 알리바바 및 센티넬로 되돌아와 퓨즈를 제어하기 위해 사용된다.

6. 비동기 호출

비동기 호출, 우리는 우리가 즉시 결과 완료 후 사용자 요청에 반환 할 수 그래서, 최종 결과에 대한 상관 없어, 우리는 후속 아직도이 장면 스파이크와 함께 할 많은 찾는 특정 처리 할 수 있습니다. 그러나 우리가 후 비동기 사용해야 할 수도 비즈니스 프로세스에 적절하게 변경 , 예를 들어, 주문을 제출 한 후 사용자 후, 사용자는 정말 순서를 처리 소비자 대기열 처리 주문, 심지어 라이브러리에 메시지 요구 후 즉시 성공적인 주문 제출을 반환 할 수 없습니다 다음 성공적으로 이메일 또는 SMS 명령을 통해 사용자에게 통보 . 비동기 또한 프로그램 외에, 우리는 또한 종종 메시지 큐를 사용하여, 메시지 큐 비동기 처리 (피크 클리핑 응답 시간을 줄일 필요) 시스템 성능을 개선하고, 커플 링 시스템을 감소시킬 수있다.

7. 캐시

우리의 시스템은 동시 단어보다 높은 경우 우리는 단순히 데이터베이스를 사용하는 경우, 그래서 바로 데이터베이스 힘 데이터베이스에 많은 수의 요청을 직접 중단됩니다 때. 속도가 매우 빠른 캐시 메모리 그래서, 캐시 데이터 때문에 메모리에, 뜨거운 버퍼 사용!

기타 (8)

  1. 더 나은 하드웨어를 사용하여 핵심 우선 순위 응용 프로그램 및 서비스
  2. 시스템 리소스 사용을 모니터링 알람 설정을 증가시킵니다.
  3. 필요한 경우 해당 백업, 롤 등을합니다.
  4. 회색 출시 : 서버 클러스터는 기계 매일의 일부만 게시 된 여러 부분으로 분할되어, 안정을 관찰 할 실패, 다음 날은 몇 일 동안 기계의 일부를 지속적으로 출시 할 없습니다 만 다음 반환하기 만하는 동안 문제가 발견되면 모든 전체 클러스터가 완료 출시 서버의 롤 부분은 게시 할 수 있습니다
  5. 정기 검사 / 하드웨어의 교체 : 정기적으로 일부 대체 또는 교체하거나 업그레이드 할 수있는 하드웨어를 업그레이드 할 필요가 하드웨어의 물결을 확인하는 방법은 클라우드 서비스를 구입하지 않은 경우는, 다음 여전히 필요합니다.
  6. ..... (추가 할 생각! 또한 환영 환영 추가!)

개요

어떻게 고 가용성 시스템을 설계?

오픈 소스 프로젝트는 권장

다른 오픈 소스 프로젝트의 추천 :

  1. JavaGuide : 자바 학습 [+] 인터뷰 가이드 자바 프로그래머의 대다수가 핵심 지식을 마스터해야 다룹니다.
  2. 가이드 - springboot : 초보자뿐만 아니라 봄 부팅 튜토리얼에 숙련 된 개발자 액세스에 적합한 (여가 시간 관리, 유지 보수가 함께 환영합니다).
  3. 발전 - 프로그래머 : 나는 기술 직원은 좋은 습관을 가지고해야한다고 생각!
  4. - 보안 - JWT-스프링 가이드 : 0에서 시작하기! (검증 기관 포함) 스프링 시큐리티와 JWT 코드의 후단 부분.

있는 공개하지

추천

출처juejin.im/post/5e24f8a7f265da3e0b4340ee