Hello 는 2 륜 여행 (Hellobike, Hello 보조차, Hello 전동차, 하하교환) 과 4 륜 여행 (Hello 히치하이킹, 전망 콜카, Hello 택시) 을 포함한 종합적인 모바일 플랫폼으로 발전하여 호텔, 호텔,
회사의 업무가 끊임없이 발전함에 따라, 유량도 갈수록 커지고 있다. 우리는 생산 중 일부 중대한 사고가 돌발적인 흐름에 의해 떠내려가는 경우가 많기 때문에, 흐름에 대한 통제와 보호는 시스템의 고가용성을 보장하는 것이 특히 중요하다는 것을 알게 되었다.
이 문서에서는 메시지 트래픽 및 마이크로서비스 호출의 거버넌스에서 헬로가 밟은 경험을 공유합니다.
"RocketMQ 실전과 고급" 칼럼니스트 중 한 명인 양용 (양량) 이' RocketMQ 기술 내막' 원고의 원고 심사에 참여했다. ArchSummit 글로벌 건축가 회의 및 QCon 사례 연구 협회 강사.
현재 주로 백엔드 미들웨어 방향입니다. 위챗 공식 계정에서 관농노량은 100 여 편의 소스 코드 전투에 관한 문장 (RocketMQ 시리즈, Kafka 시리즈, GRPC 시리즈, Nacosl 시리즈, Sentinel 시리즈, Java NIO 시리즈) 를 발표했다. 현재 Hellobike 에서 근무하고 있으며 수석 기술 전문가로 활동하고 있습니다.
시작하기 전에 먼저 통치를 말하다. 다음은 laoliang 의 개인적인 이해입니다:
회사는 이전에 RabbitMQ 를 사용했는데, 다음은 RabbitMQ 를 사용할 때의 문제점으로, 대부분 RabbitMQ 클러스터 제한 흐름으로 인한 것이다.
여러 기업이 하나의 데이터베이스를 사용하는 오류가 있습니다. 어느 늦은 피크 시간대에 트래픽이 급증하고 데이터베이스가 일시 중지되었습니다.
사고: 뉴스와 서비스 모두 완벽한 거버넌스 조치가 필요합니다.
어떤 것이 우리의 핵심 지표이고, 어떤 것이 우리의 부차적인 지표이며, 이것이 뉴스 감독의 가장 중요한 문제이다.
설계 목표
기본 미들웨어 (RocketMQ/Kafka) 의 복잡성을 차단하고 동적 라우팅 메시지를 고유하게 식별할 수 있도록 설계되었습니다. 동시에 자원 관리, 검색, 모니터링, 경보, 검사, 재해 복구, 시각화 운영을 하나로 통합한 메시지 관리 플랫폼을 구축하여 메시지 미들웨어의 원활하고 건강한 운영을 보장합니다.
복잡한 문제를 단순화할 수 있는 능력이다.
매우 간단한 통합 API
통합 SDK 를 제공하면 두 가지 메시지 미들웨어 (Kafka/RocketMQ) 가 캡슐화됩니다.
주제 소비자 집단의 자동 생성은 생산 환경에 적합하지 않아 통제력을 상실하고 수명 주기 관리 및 클러스터 안정성에 악영향을 미칠 수 있습니다. 신청 과정은 통제가 필요하지만 가능한 한 간단해야 한다. 예를 들어, 모든 환경을 한 번에 적용, 관련 경고 규칙 생성 등을 요청합니다.
클라이언트 사용 사양을 모니터링하고 제어할 적절한 조치를 찾습니다.
장면 1 클러스터에 대한 순간 흐름 및 흐름 제어
현재 클러스터에 65,438+00000 개의 Tps 가 있고 순식간에 20,000 개 이상이 된다고 가정하면, 이러한 트래픽의 과도한 가파른 증가는 클러스터 흐름 제어로 이어질 가능성이 매우 높습니다. 이 시나리오에서는 클라이언트의 전송 속도를 모니터링하고 속도와 급상승 임계값에 도달한 후 전송을 더 부드럽게 해야 합니다.
시나리오 2: 주요 뉴스 및 클러스터 지터
클라이언트가 큰 메시지를 보낼 때 (예: 수백 KB 또는 몇 메가바이트 메시지 전송) 입출력 시간이 길어지고 클러스터가 흔들릴 수 있습니다. 이 장면 관리의 경우 전송된 메시지의 크기를 모니터링해야 합니다. 우리는 사후 검사를 통해 큰 소식을 식별하는 서비스를 채택하여 학우의 압축 또는 재구성을 보급한다. 메시지 제어는 10KB 이내입니다.
시나리오 3 낮은 클라이언트 버전
기능이 반복됨에 따라 SDK 버전도 업그레이드되며, 기능 외에 위험이 발생할 수 있습니다. 저배배 버전을 사용할 때, 하나는 기능을 지원하지 않는 것이고, 다른 하나는 보안 위험이 있을 수 있다는 것이다. SDK 사용 현황을 파악하기 위해 SDK 버전을 에스컬레이션해 순시 검사를 통해 학생들의 사용을 확대할 수 있다.
시나리오 4 소비자 흐름 추출 및 재활용
소비 트래픽 제거 및 복구에는 일반적으로 다음과 같은 사용 시나리오가 있습니다. 첫 번째는 게시를 적용할 때 먼저 트래픽을 제거해야 한다는 것이고, 두 번째는 문제 포지셔닝시 먼저 트래픽을 제거한 다음 확인해야 한다는 것입니다. 이를 지원하기 위해 클라이언트에서 삭제/복구 이벤트를 모니터링하고 소비를 일시 중지 및 재개할 필요가 있습니다.
시나리오 5 전송/소비 시간 테스트
메시지를 전송/소비하는 데 얼마나 걸립니까? 시간이 많이 걸리는 상황에 대한 모니터링, 순시, 성능이 낮은 애플리케이션 파악, 용도에 맞는 추진, 성능 향상을 목표로 합니다.
시나리오 6 은 조사 및 포지셔닝의 효율성을 높입니다.
문제 해결 시 전송된 메시지, 메시지 존재 위치, 사용 시기 등 메시지 수명주기와 관련된 정보를 검색해야 하는 경우가 많습니다. 이 섹션에서는 msgId 를 통해 메시지의 라이프 사이클에 연결할 수 있습니다. 또한 메시지 헤더에 rpcId/traceId 와 유사한 링크 ID 를 포함시켜 메시지가 하나의 요청에 연결됩니다.
필요한 모니터링 정보
일반적인 통제 조치
주제 소비자 그룹의 자원 사용을 모니터링하십시오.
시나리오 1: 소비 잔고가 비즈니스에 미치는 영향
어떤 업무 장면은 소비 축적에 비교적 민감하고, 어떤 업무는 밀림에 민감하지 않다. 추후에 소비하면 된다. 예를 들어 자전거 잠금 해제는 몇 초의 일이며, 정보 요약과 관련된 배치 처리 장면은 백로그에 민감하지 않다. 소비 백로그 지표를 수집하여 임계치에 맞는 앱에 대해 실시간 경보 통지를 하는 학생이 실시간으로 소비 상황을 파악할 수 있도록 한다.
시나리오 2 소비/전송 속도의 영향
전송/소비 속도가 0 경고입니까? 어떤 경우에는 속도가 0 으로 떨어질 수 없습니다. 0 으로 떨어지면 업무가 정상이 아니라는 뜻입니다. 속도 지표를 수집하면 임계값을 충족하는 애플리케이션에 실시간 경고를 보낼 수 있습니다.
시나리오 3: 소비자 노드 연결 해제
소비자 노드가 끊어지면 앱을 담당하는 학생에게 통지해야 한다. 이 노드 정보는 수집해야 하며 연결이 끊길 때 실시간으로 경고 알림을 트리거할 수 있습니다.
시나리오 4 불균형 전송/소비
불균형한 전송/소비는 종종 성능에 영향을 미칩니다. 한 번의 상담을 할 때, 어떤 학생이 메시지를 보내는 키를 상수로 설정했고, 기본적으로 키별로 구역을 해시하고, 모든 메시지가 하나의 구역으로 들어가는 것을 기억한다. 이 실적은 어쨌든 올라갈 수 없다. 또한 각 파티션의 소비 백로그를 감지하여 과도한 불균형이 발생할 경우 실시간 경고 알림을 트리거해야 합니다.
필요한 모니터링 정보
일반적인 통제 조치
클러스터 건강 상태를 측정하는 핵심 지표는 무엇입니까?
장면 1 클러스터 상태 감지
클러스터 건강 테스트는 한 가지 질문에 답했습니다. 이 클러스터는 괜찮습니까? 이 문제는 클러스터 노드 수, 클러스터의 각 노드에 대한 하트비트, 클러스터가 쓴 Tps 수위 및 클러스터가 소비하는 Tps 수위를 감지하여 해결됩니다.
시나리오 2 클러스터의 안정성
클러스터 흐름 제어는 종종 클러스터 성능의 부족을 반영하며 클러스터 지터로 인해 클라이언트 전송 시간 초과가 발생할 수 있습니다. 클러스터의 각 노드에 대한 하트비트 시간 소비와 클러스터가 쓴 Tps 수위 변화율을 수집하여 클러스터가 안정적인지 여부를 파악할 수 있습니다.
시나리오 3 클러스터의 고가용성
고가용성은 주로 사용 가능한 영역을 극단적인 장면에서 사용할 수 없거나 클러스터의 일부 주제 및 소비자 집단의 이상에 대한 목표 조치가 필요합니다. 예를 들어, MQ 는 사용 가능한 지역 전체에서 도시 마스터-슬레이브 교차 배포, 주제 및 소비자 그룹을 재해 복구 클러스터, 다중 활동 등으로 동적으로 마이그레이션하여 해결할 수 있습니다.
필요한 모니터링 정보
일반적인 통제 조치
만약 이 핵심 지표 중 어느 것이 가장 중요하다면? 클러스터의 각 노드에 대한 하트비트 감지, 즉 응답 시간 (RT) 을 선택하겠습니다. RT 에 영향을 줄 수 있는 가능한 원인을 살펴보겠습니다.
우리는 항상 구덩이를 만나 만나면 메운다.
* *
RocketMQ 는 노드 및 마스터 노드에서 높은 CPU 가 자주 발생하는데, 이는 명백한 버입니다. 많은 경우 노드에서 직접 전화를 끊습니다.
시스템 로그에만 오류 메시지가 표시됩니다
2020-03-16t17: 56: 07.505715+08: 00 vecs 0xxxx 커널: _ _ alloc _ pages _ nodemask+0x7e1/0x9602020-03-16t/kloc-0 주문: 0, 모드: 0x202020-03-16t17: 56: 07.505719 Comm: Java 가 감염되지 않았습니다. 2.6.32-754.17.1.el6.x86 _ 64 #/kloc-0 Dev _ queue _ xmit+0xd 0/0x3602020-03-16t17: 56: 07.505729+; Ip _ finish _ output+0x192/0x3802020-03-16t17: 입니다
다양한 디버깅 시스템 매개 변수는 느려질 수 있지만 근절할 수는 없으며, 여전히 50% 가 넘습니다.
클러스터의 모든 시스템을 centos 6 에서 centos 7 로 업그레이드하고 커널 버전도 2.6 에서 3. 10 으로 업그레이드하면 CPU 결함이 사라집니다.
RocketMQ community edition 기본 버전은 18 개의 지연 수준을 지원하며, 각 등급은 설정된 시간에 소비자가 정확하게 소비합니다. 이를 위해 우리는 소비 간격이 정확한지 전문적으로 테스트했고, 테스트 결과는 매우 정확하다. 그러나 이런 정확한 특징은 문제가 있다. 상과 동창의 제보 셔틀라인에서 한 클러스터의 지연 소식을 받은 것이 이상하다.
"delayOffset.json" 과 "소비자 대기열 /Schedule _ Topic _ XXXX" 를 다른 디렉토리로 이동하는 것은 삭제와 같습니다. 프록시 노드를 하나씩 다시 시작합니다. 재부팅 후 검증을 거쳐 지연 메시지 기능이 정상적으로 전송되고 소비됩니다.
우리의 핵심 서비스는 무엇이고, 비핵심 서비스는 무엇입니까? 이것은 서비스 거버넌스의 주요 문제입니다.
서비스는 갑자기 급증하는 트래픽, 특히 핵심 서비스의 원활한 운영을 보장할 수 있습니다.
사용자와 업무 영향의 두 위도에 따라 응용 프로그램을 네 등급으로 나누다.
S 1: 핵심 제품으로, 고장으로 인해 외부 사용자가 사용할 수 없게 되거나 자전거, 보조차 스위치 잠금 장치, 승용차 발신, 주문 등 핵심 링크, 핵심 링크가 크게 의존하는 어플리케이션과 같은 큰 자금 손실이 발생할 수 있습니다.
S2: 거래에 직접적인 영향을 미치지 않지만 포그라운드 업무의 중요한 구성이나 업무 백그라운드 처리 기능의 관리 유지 관리와 관련이 있습니다.
S3: 서비스 실패가 사용자 또는 핵심 제품에 미치는 논리적 영향은 크지 않으며, 주요 업무에 영향을 주지 않거나, 소량의 신규 업무에 영향을 미치지 않습니다. 내부 사용자의 중요한 도구는 업무에 직접적인 영향을 미치지 않으며, 관련 관리 기능은 포그라운드 업무에 거의 영향을 미치지 않습니다.
S4: 내부 사용자의 경우 시스템이 비즈니스에 직접적인 영향을 미치지 않거나 사후 푸시가 필요합니다.
S 1 비즈니스는 회사의 핵심 업무로, 핵심적이지 않은 비즈니스 트래픽의 의외의 충격을 받지 않도록 보장하는 데 중점을 두고 있습니다.
* *
* *