사랑하는 여러분, 내부 시스템 호출, 외부 시스템 호출 또는 수동적으로 트리거되는 호출(예: MQ 소비, 콜백 실행, 등), 필요한 조건 확인을 추가해야 합니다. 이 조건은 반드시 전달될 것이고, 반드시 가치가 있을 것이며, 반드시 비어 있지 않을 것이라고 말하는 일부 동료들을 믿지 마십시오. 아니요, 설 직전에 속아서 생산사고가 나서 기본적으로 연말 보너스가 반으로 줄었습니다.
높은 시스템 가용성과 안정성을 보장하기 위해 사람보다는 코드 자체에 집중하기로 결정했습니다. 다음은 당신에게도 도움이 될 수 있는 몇 가지 작은 교훈입니다.
1. 무슨 일이 있었나요
내 비즈니스 시나리오는 다음과 같습니다. 비즈니스 A가 변경되면 MQ 메시지 전송이 트리거되고 애플리케이션이 MQ 메시지를 수신하며 처리 후 데이터가 Elasticsearch에 기록됩니다.
(1) A업체로부터 비정상적인 알람을 받았습니다. 당시 알람은 다음과 같았습니다.
(2) 언뜻 보기에는 조금 이상해 보이지만 어떻게 Redis 예외일 수 있습니까? 그런 다음 Redis에 연결했는데 문제가 없었습니다. Redis 클러스터를 다시 확인해 보니 모든 것이 정상이었습니다. 그래서 우연한 네트워크 문제인 줄 알고 놔두었습니다.
그런 다음 기술 문제 그룹에서 일부 사용자에게 비정상적인 상황이 발생했다고 고객 서비스에 보고했습니다. 즉시 시스템을 확인하여 산발적인 문제가 있는지 확인했습니다.
(4) 그래서 습관적으로 몇 가지 핵심 구성 요소를 살펴보았습니다.
- 게이트웨이 상태, 핵심 비즈니스 Pod의 로드 상태, 사용자 센터 Pod의 로드 상태입니다.
- Mysql 상황: 메모리, CPU, 느린 SQL, 교착 상태, 연결 수 등
SQL이 느리고 메타데이터 잠금 시간이 긴 상황을 발견했습니다. 이는 주로 대규모 테이블의 전체 테이블 쿼리로 인해 많은 양의 데이터와 느린 실행 속도로 인해 메타데이터 잠금이 너무 오래 지속되어 지치게 되었기 때문입니다. 데이터베이스 연결 번호.
으아악(6) 여러 개의 느린 세션을 즉시 종료한 후에도 시스템이 아직 완전히 복구되지 않은 것으로 나타났습니다. 이유는 무엇입니까? 이제 데이터베이스가 정상인데 왜 완전히 복원되지 않았습니까? 계속해서 애플리케이션 모니터링을 살펴보니 사용자 센터의 Pod 10개 중 2개가 비정상이고, CPU와 메모리가 소모된 것으로 나타났습니다. 사용하다 보면 가끔씩 이상이 생기는 것은 당연합니다. 그래서 신속하게 Pod를 다시 시작하고 먼저 애플리케이션을 복원했습니다.
(7) 문제가 발견되었습니다. 다음으로 사용자 센터의 Pod가 끊긴 이유를 계속 조사하겠습니다. 다음 의심점부터 분석을 시작하세요:
- Elasticsearch에 데이터를 동기화하는 코드에 문제가 있나요? 왜 Redis에 연결할 수 없나요?
- 예외가 너무 많아 예외 경고 메시지를 보내기 위한 스레드 풀 대기열이 가득 차고 OOM이 발생할 수 있나요?
- 비즈니스 A의 대형 테이블에 대한 무조건 전체 테이블 쿼리는 어디에서 수행할 수 있나요?
(8) 의심점 계속 조사 a. 처음에는 Redis 링크를 얻을 수 없어 예외가 스레드 풀 큐에 들어가고 이후 큐 버스트가 발생하여 OOM이 발생한다고 생각했습니다. 이 아이디어에 따라 코드를 수정하고 업그레이드하고 계속해서 관찰했지만, 여전히 똑같은 느린 SQL과 사용자 센터 폭발이 발생했습니다. 이상이 없기 때문에 의심점 b도 배제할 수 있다.
(9) 현 시점에서는 비즈니스 A의 대형 테이블에 대한 전체 테이블 쿼리가 호출되는 지점인 c 지점이 의심되는 것이 거의 확실하며, 이로 인해 사용자 센터의 메모리가 너무 커지게 되고, JVM은 이를 재활용할 시간이 없으며 CPU를 직접 폭발시킵니다. 동시에 전체 테이블 데이터가 너무 크기 때문에 쿼리 중 메타데이터 잠금 시간이 너무 길어서 연결이 제때 해제되지 못하고 결국 거의 소진됩니다.
(10) 따라서 기업 A의 대규모 테이블을 쿼리하는 데 필요한 확인 조건을 수정하여 온라인 관찰을 위해 재배포했습니다. 최종 위치 선정에 문제가 있었습니다.
2. 문제의 원인
비즈니스 테이블 B를 변경할 때 MQ 메시지를 보내야 하기 때문입니다(비즈니스 테이블 A의 데이터를 ES로 동기화). MQ 메시지를 받은 후 비즈니스 테이블 A와 관련된 데이터를 쿼리한 후 해당 데이터를 Elasticsearch에 동기화합니다.
그런데 비즈니스 테이블 B를 변경할 때 비즈니스 테이블 A에 필요한 필수 조건이 전송되지 않았고, 필요 조건도 확인하지 않아 비즈니스 A의 대형 테이블에 대한 전체 테이블 스캔이 발생했습니다. 왜냐하면:
으아악당시 비즈니스 B 테이블의 빈번한 변경으로 인해 더 많은 MQ 메시지가 전송되고 소비되었으며, 이로 인해 비즈니스 A의 대규모 테이블에 대한 전체 테이블 스캔이 더 많이 트리거되었으며 결과적으로 MySQL 메타데이터 잠금 시간이 너무 길어졌습니다. 길고 최종 연결 수가 초과되었습니다.
동시에 A업체의 대형 테이블 쿼리 결과가 매번 사용자 센터의 메모리로 반환되어 JVM 가비지 수집이 실행되지만 결국 재활용할 수 없게 됩니다. .
Redis가 연결을 할 수 없다는 예외는 연막탄일 뿐입니다. MQ 이벤트가 너무 많이 전송되고 소비되기 때문에 소수의 스레드가 즉시 Redis 연결을 얻을 수 없습니다.
마지막으로 MQ 이벤트 소비를 위한 코드에 조건 확인을 추가하고 쿼리 비즈니스 A 테이블에도 필요한 조건 확인을 추가하고 온라인에 재배포하여 문제를 해결했습니다.
3. 수업 요약
이 사건 이후 저는 몇 가지 교훈을 요약하여 여러분과 공유합니다.
(1) 온라인 문제에 항상 주의하고, 문제가 발생하면 방치하지 말고 신속하게 조사해야 합니다. 더 이상 네트워크 지터 문제를 의심하지 마세요. 대부분의 문제는 네트워크와 관련이 없습니다.
(2) 대규모 비즈니스 테이블 자체는 보호를 인식해야 하며 쿼리에는 필요한 조건 확인이 추가되어야 합니다.
(3) MQ 메시지를 사용할 때 필요한 조건을 확인해야 하며 정보 소스를 신뢰하지 마십시오.
(4) "이 조건은 반드시 전달될 것입니다. 반드시 가치가 있을 것이며, 반드시 비어 있지 않을 것입니다"라고 말하는 일부 동료를 절대 믿지 마십시오. 시스템의 높은 가용성과 안정성을 보장하기 위해 사람이 아닌 코드만 인식합니다.
(5) 문제 발생 시 일반적인 문제 해결 순서:
- 데이터베이스 CPU, 교착 상태, 느린 SQL.
- CPU, 메모리, 애플리케이션 게이트웨이 및 핵심 구성 요소의 로그.
(6) 비즈니스 관찰 가능성과 경보는 필수적이며 포괄적이어야 합니다. 그래야 문제를 더 빨리 발견하고 해결할 수 있습니다.
위 내용은 시스템이 손상되었습니다. 코드만 인식하고 사람은 인식하지 못합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

HP 스마트가 Windows 11/10/서버에 자동으로 설치되면 어떻게됩니까? Microsoft는 유틸리티를 출시했으며 KB5034510 : Microsoft 프린터 메타 데이터 문제 해결사 도구를 온라인으로 얻을 수 있습니다. 이 php.cn 게시물을 계속 읽고 찾으십시오

netwlv64.sys 블루 스크린은 Windows 11/10 운영 체제를 부팅하려고 할 때 일반적인 오류입니다. 이 BSOD 문제를 어떻게 해결하여 PC가 제대로 작동하도록 할 수 있습니까? 이 게시물에서는 php.cn이 수집 한 유용한 솔루션을 찾을 수 있습니다.

둘 이상의 프로그램을 동시에 수행하는 경우 Windows의 크기 조정이 도움이됩니다. 대부분의 여러분은 매일 컴퓨터 사용에서 창을 크기를 조정하려고 노력해야합니다. 이 Php.cn Post는 창 크기를 조정하는 방법을 알려주는 몇 가지 유용한 방법을 컴파일합니다.

Windows 10/11에서 로컬 계정에 대한 보안 질문을 비활성화하는 방법을 찾고 계십니까? Php.cn 의이 게시물에서는 지역 그룹 정책 편집자 및 레지스트리를 통해 지역 계정에 대한 보안 문제 사용을 방지하는 방법을 안내합니다.

Windows 11 Insider Preview Build 23486은 암호 사용 경험을 향상시키기 위해 새로운 기능인 Passkey 설정을 발표하겠다고 발표했습니다. 컴퓨터에서 새로운 패스 키를 생성하고 추가 할 수있을뿐만 아니라 그 중 하나를 삭제할 수 있습니다. 이 php.cn 포스트가 당신을 안내합니다

OneDrive에 로그인 할 때 "OneDrive가 서명하는 데 문제가있었습니다"오류로 고통 받고 있습니까? 이제 Php.cn 의이 게시물 에서이 OneDrive 로그인 문제를 해결하는 방법을 안내해 드리겠습니다.

Windows 11 및 Windows 10 데스크톱 아이콘이 겹치고 있습니까? Php.cn 의이 게시물에서는이 Windows 데스크탑 아이콘 버그를 제거하는 데 도움이되는 몇 가지 유용한 솔루션을 제공합니다.

OneDrive는 동일한 OneDrive 아이콘으로 파일 탐색기의 폴더를 두 번 보여줍니다. OneDrive에서 발생하는 버그입니다. 파일 탐색기에서 두 개의 OneDrive 폴더의 상황을 수정하는 효과적인 방법을 사용할 수 있습니다. Php.cn에 대한이 게시물이 도움이 될 것입니다


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

WebStorm Mac 버전
유용한 JavaScript 개발 도구

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경
