>  기사  >  백엔드 개발  >  PHP의 분산 추적에 대한 간략한 소개

PHP의 분산 추적에 대한 간략한 소개

巴扎黑
巴扎黑원래의
2017-08-17 09:03:331403검색


요약: 마이크로서비스를 구현한 이후로 우리는 많은 문제에 직면했습니다. 가장 큰 문제는 오류를 해결하는 방법입니다. 서비스 지향 인터페이스는 일반적으로 여러 서비스에 의존합니다. 종속 인터페이스의 속도는 인터페이스의 서비스 품질에 직접적인 영향을 미칩니다. 이러한 의존성으로 인해 발생하는 속도 저하는 온라인에서 흔히 발생하지만 문제 해결이 쉽지 않습니다...

마이크로서비스를 구현한 이후로 우리는 많은 문제에 직면했습니다. 가장 큰 문제는 오류를 해결하는 방법입니다. 서비스 지향 인터페이스는 일반적으로 여러 서비스에 의존합니다. 종속 인터페이스의 속도는 인터페이스의 서비스 품질에 직접적인 영향을 미칩니다.

                  온라인에서는 매우 흔한 현상이지만, 문제 해결이 쉽지 않습니다. 그 이유는 많은 수의 로그 개발자가 로그를 통해 온라인으로 추적되고 있기 때문이며, 이는 개발자에게 그리 직관적이지 않으며 일부 회사 개발자에게도 마찬가지입니다. 온라인에서 구체적인 구현을 볼 수 없습니다. 일반적으로 이러한 작은 확률의 온라인 오류는 시스템의 숨겨진 위험을 나타냅니다. 이러한 숨겨진 위험은 증폭되거나 심지어 대규모 온라인 오류로 직접 이어질 수도 있습니다. 가장 직관적인 방법은 통계 분석을 위해 분산 추적 시스템을 사용하는 것입니다.

전문가들이 온라인 성능을 최적화하는 방법과 성능을 향상시키는 방법에 대해 이야기하는 경우가 많습니다. 실제로 그들이 언급하지 않은 중요한 링크가 있습니다. 분산 추적 시스템은 대규모 인터넷 회사에서 매우 일반적이지만 중소 규모 회사는 이 시스템을 구현할 기술적 역량이 없습니다. 우리의 관점에서는 트래픽이 매우 작더라도 시스템은 여전히 ​​회사에 매우 중요하며 이를 강화해야 문제를 찾을 수 있어야만 해결할 수 있습니다. 구현되었습니다.

具 분산 추적 시스템의 구체적인 구현에는 성능 캡처, 로그 작성, 로그 수집, 로그 전송, 로그 저장, 로그 색인, 로그 분석, 최종 병합 표시를 달성해야 하며 시스템이 대처할 수 있는 특정 기술적인 어려움이 있습니다. 고유량 시스템에 미치는 영향. 예를 들어, 각 요청이 인터페이스당 1,000개의 로그를 생성하면 QPS 2000 서버는 200만 개의 로그를 생성합니다. 요청이 5개의 인터페이스에 의존한다면 온라인 비즈니스가 더 복잡하고 트래픽이 더 클 경우 초당 1000만 개의 로그가 생성됩니다. , 시간이 지나면 이 값은 증가합니다.有 대규모 인터넷 회사는 수십억 개의 트래픽을 감당할 수 있는 분산 추적 시스템을 많이 보유하고 있지만 소규모 회사의 경우 종속 분산 메시지 시스템, 분산 스토리지, 분산 컴퓨팅, 분산 컴퓨팅 등 이 아키텍처가 큰 부담을 안겨줍니다. 이것만으로도 최소 6대 이상의 서버를 사용하게 되는데, 이는 일반 중소기업에게는 비용 효율적이지 않습니다.

이번에는 두 가지 유형의 오픈 소스 분산 추적이 있습니다. 하나는 중소 인터넷 기업을 위한 독립형 버전으로 PV 2000w 비즈니스 시스템(예: 결제 시스템)을 지원할 수 있습니다. 수십억 개의 분산된 PV를 지원하는 분산 추적 시스템도 있습니다. 현재 Fiery의 독립형 버전이 오픈되었습니다(https://github.com/weiboad/fiery). 이 버전은 중소기업에서 사용하도록 설계되었습니다. 전체 프로젝트는 Jar 패키지로 구성되어 있습니다. Java8 런타임이 있는 한 직접 사용할 수 있습니다. 물론 시스템에서는 간단히 작업을 수행하면 됩니다. C++ 분산 버전은 많은 것에 의존하며 운영 및 유지 관리 인력을 위한 특정 기능이 필요합니다. 독립형 버전은 상황에 따라 추후 출시될 예정입니다. 완전히 오픈 소스이고 내부에 민감한 데이터가 포함된 이러한 핵심 거래 시스템도 완벽하게 사용 가능합니다.

현재 시장에는 여러 가지 분산 추적 방법이 있으며, 일부는 회사 내부에서 사용되며 일부는 소규모 무료 및 대규모 유료 서비스입니다. 공통 분산 추적은 통계적 방법을 통해 각 블록의 성능을 기록합니다. 현재 우리가 제공하는 방법은 시중의 방법과 완전히 동일하지는 않습니다. 우리는 핵심 시스템의 분산 모니터링을 위한 시스템을 설계하면서 지속적인 실험을 통해 많은 단순화를 이루었습니다. 결제 시스템, 거래 시스템 등이 있습니다. +                                                    각 요청의 구체적인 상황, 반환 값, 구체적인 성능 및 기타 정보를 기록합니다. 테이블 분석을 통해 온라인 종속 인터페이스 성능(타사 또는 묻히지 않은 인터페이스 성능 통계), 숨겨진 포인트를 빠르게 발견할 수 있습니다. 성능 순위를 독립적으로 분석합니다. 분석 테이블을 보면 재생을 요청하는 가장 느린 인터페이스를 빠르게 찾아내고 온라인 성능이 저하되는 이유를 분석할 수 있습니다. 실제로 우리는 PHP가 의존하는 데이터 리소스의 속도 저하로 인해 PHP 인터페이스의 성능이 저하되는 경우가 많다는 사실을 발견했습니다. 따라서 자원에 의존하는 데 중점을 둡니다. 사용자는 자신의 필요에 따라 다른 정보를 추가할 수 있으므로 불필요한 로그의 양을 줄이고 더욱 절약할 수 있습니다.

이 오픈 소스 Fiery는 주로 PHP 침입 지점 라이브러리, 간소화된 로그 모니터링 푸시 모듈 및 서버의 세 부분으로 구성됩니다. 이 세 가지는 PV가 2000w 미만인 웹 사이트에 대한 분산 추적을 달성합니다.

            매장지 라이브러리는 입구에서 Traceid(UUID)를 생성합니다. 이 Traceid는 입구 서버의 IP 주소와 요청 시간을 숨깁니다. 로그 수집 후 모든 관련 로그는 이 UUID에 따라 저장됩니다. 묻힌 포인트 라이브러리는 다른 요청에 의해 전송된 Traceid를 수신하고 런타임 동안 RPCID를 전송 및 유지하는 역할을 담당합니다. RPCID는 호출 관계의 순서와 계층을 직접 복원하고 개발자에게 표시할 수 있는 계층적 카운터입니다. . 또한, PHP 작업 중 Exception이 발생하면 서버가 중복 제거 통계를 수행할 수 있도록 매장된 포인트 라이브러리에 이를 캡처하고 기록합니다. 마지막으로 이러한 로그는 서버의 로컬 디스크에 기록됩니다. 여러 PHP 프로세스가 동시에 파일을 쓰는 경우 프로세스 ID와 함께 로그를 기록하는 경우가 있습니다. 프로젝트 이름을 파일 이름으로. 우리의 FIERY 로그 수집 및 전송은 현재 운영 및 유지 관리 인력의 작업을 단순화하기 위한 것입니다. 또한 실험적인 PHP 로그 캡처 및 전송 서비스가 있지만 여전히 실험적인 기능이므로 사용자가 디버깅 및 개선에 참여할 수 있습니다.

우리는 Fiery의 서버 측에서 많은 작업을 수행했으며 각각 요청을 색인화하고 저장하기 위해 Lucene 및 Rocksdb를 내장했습니다. 메모리 통계에 대한 작업도 수행했으며 현재 통계 차원은 고정되어 있으며 로컬 인터페이스, 종속 인터페이스, Mysql 및 Curl의 응답만 계산합니다. 또한 호출 관계 재생 및 오류 로그 경고 중복 제거 통계도 제공합니다. 이러한 기능을 통해 라인의 주요 지점에서 성능 결함 및 시스템 이상을 신속하게 발견할 수 있습니다. 현재는 독립 실행형 버전일 뿐이며 나중에 필요할 경우 더 간단한 분산 모드로 확장할 수 있습니다.

위의 서비스는 온라인에서만 제공되는 것이 아닙니다. 현재 우리는 QA 테스트 환경을 세트로 연결하는 등 흥미로운 시도를 많이 해왔습니다. , 반환 조건 및 이 요청의 성능은 쉽게 분석할 수 있도록 시각적으로 볼 수 있으며 온라인에 접속하기 전에 단위 테스트를 위해 수행할 수도 있습니다. 얼마 전 제가 Fiery를 홍보하기 위해 Weibo에 글을 올렸을 때 누군가가 해킹 과정과 구체적인 세부 사항을 볼 수 있는 허니팟으로 사용될 수 있다고 언급했습니다. 후속 기능은 여전히 ​​모든 사람이 탐색하고 개선해야 합니다. 이 시스템은 PHP 생태계의 격차를 메우기 위해 설계되었습니다.

위 내용은 PHP의 분산 추적에 대한 간략한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.