>백엔드 개발 >PHP 튜토리얼 >King of Glory 개발 시 높은 동시성 문제 분석

King of Glory 개발 시 높은 동시성 문제 분석

小云云
小云云원래의
2018-02-01 14:08:552156검색

이 기사는 Honor of Kings 개발에 있어 높은 동시성 문제에 대한 매우 흥미로운 주제를 공유합니다. 이러한 문제를 해결하기 위한 아이디어를 얻을 수 있기를 바랍니다. 킹스.

'왕의 영광'은 엄청난 유저층을 보유하고 높은 업데이트 빈도를 유지하고 있는 전국급 모바일 게임입니다. 이러한 비즈니스 시나리오에서는 버스트가 매우 자주 발생합니다. 그러나 비즈니스 경험이 중요하며 CDN 사용이 필수적입니다. 마찬가지로, 속보 비디오, 대규모 라이브 방송 이벤트, 인기 영화 및 TV 시리즈 출시, 인기 게임 및 기타 애플리케이션 출시 등 대역폭이 폭발하는 시나리오가 종종 있습니다. 동시에 홈 대역폭과 모바일 네트워크의 급속한 업그레이드로 인해 버스트 대역폭의 크기가 점점 더 커지고 있으며 종종 Tb 수준 또는 심지어 10Tb에 도달합니다. 비즈니스 긴급 상황을 신속하고 저렴한 비용으로 보호하는 방법은 CDN의 주요 과제가 되었습니다.

수억 명의 사용자와 수천만 명의 일일 활성 사용자를 보유한 중국에서 가장 인기 있는 모바일 게임 "왕의 명예", 비즈니스 긴급 상황을 신속하고 저렴한 비용으로 보장하는 방법은 무엇입니까? 이 글은 이 문제에서 시작하여 문제에 대한 해당 해결 방법을 논의하고 그 효과를 요약합니다.

배경

2007년 Tencent의 자체 구축 CDN이 출시되어 첫 번째 비즈니스인 Tencent.com과 연결되었습니다. 현재까지 CDN 대역폭은 초기에는 수십 Gb에서 수십 Tb로 성장했습니다. 단일 서비스의 대역폭도 점점 더 커지고 있으며 대부분의 서비스는 일정한 대역폭을 수백 Gb로 유지하고 있으며 일부 버스트 서비스도 있습니다. 10Tb에 달합니다. 네트워크의 급속한 업그레이드, 모바일 사용자의 폭발적인 증가, 주문형 및 라이브 방송을 포함한 비디오 서비스의 증가로 인해 비즈니스 버스트가 점점 더 자주 발생하고 버스트 대역폭이 점점 더 높아졌으며 CDN에 대한 요구 사항이 높아졌습니다. 점점 더 높아졌습니다.

Tencent 비즈니스의 급속한 발전에 힘입어 자체 구축한 CDN은 게임 다운로드, 스트리밍 비디오 가속, 춘절 빨간 봉투 등 Tencent 내부 비즈니스를 연속적으로 지원해 왔습니다. 2014년에 Tencent는 CDN의 모든 기능을 개방하여 CDN이 되었습니다. Tencent Cloud CDN 제품은 내부 비즈니스 외에도 Kuaishou On-Demand, Douyu Live 등 타사 고객과 연결되기 시작했습니다. 위의 모든 서비스에는 긴급 시나리오와 강력한 비용 요구 사항이 있습니다. Tencent CDN은 저렴한 비용으로 비즈니스 긴급 상황을 보장하는 방법에 대한 풍부한 경험을 축적했습니다. 다음으로 과제와 문제점, 해결책 및 효과를 분석하겠습니다.

1. 과제와 문제

다음은 비즈니스 특성부터 시작하여 현재의 과제와 문제를 분석합니다.

1. 비즈니스 특성 및 과제

CDN의 다양한 시나리오는 갑작스러운 비즈니스에 대한 도전으로 가득 차 있습니다. 버스트 서비스는 대용량, 다양한 시나리오, 불규칙성이 특징입니다.

a) 대용량: 대부분의 버스트 서비스 대역폭이 Tb를 초과하고 일부는 10T에 도달합니다.

b) 다양한 시나리오: 라이브 방송의 LOL/KPL/DOTA2 속보; , NBA/월드컵과 같은 스포츠 생방송, 애플리케이션 다운로드의 Honor of Kings와 같은 버라이어티 쇼, 전자상거래 프로모션 등 정적 웹 페이지 가속; 불규칙: 일부 갑작스러운 이벤트 뉴스 속보와 같이 이벤트가 시작될 때까지 또는 이미 시작될 때까지 활동을 예측할 수 없습니다.

볼륨이 크고 더 많은 리소스를 준비해야 합니다. 시나리오가 다양하고 다양한 리소스 요구 사항을 충족해야 하므로 확장 효율성에 대한 요구 사항이 높아집니다.

2. 현재의 문제

갑작스러운 비즈니스 요구를 충족하기 위해 많은 양의 리소스를 예약하는 것은 비용이 너무 많이 들고 막대한 리소스 낭비를 초래할 것입니다. 따라서 일반적으로 자원은 비즈니스 긴급 상황에 대처하기 위해 재사용됩니다. 그러나 리소스를 직접 재사용하는 데에는 두 가지 문제가 있습니다.

a) 일부 리소스만 재사용할 수 있습니다. CDN 비즈니스는 일반적으로 비즈니스 유형에 따라 플랫폼과 리소스 사용이 구분됩니다. 주문형 서비스와 같이 더 많은 https 요청이 있는 정적 페이지 클래스에는 더 많은 CPU 리소스가 필요합니다. 이러한 제한으로 인해 리소스가 완전히 활용되지 못하고 리소스 준비가 더욱 어려워집니다. 예를 들어 비디오 버스트는 주로 비디오 버퍼를 사용하지만 다운로드 및 웹 페이지 버퍼는 직접 사용할 수 없으므로 버퍼 크기가 제한됩니다. 동일한 유형의 자원을 재사용하더라도 여러 비즈니스 자원의 조정이 필요하기 때문에 일반적으로 준비 시간이 2일을 초과하며 이는 일시적인 긴급 상황에 대처할 수 없습니다.

b) 비용 절감 불가능: 또한 일부 경우 게임 애플리케이션 다운로드 등 예상치 못한 서비스, 대역폭이 가장 높은 시간대는 오전과 정오입니다. 본 플랫폼의 리소스만 사용하면 결제 대역폭이 크게 증가하여 비용이 증가합니다. 다른 서비스의 비첨두시간 특성을 이용하여 결제대역폭을 줄일 수는 없습니다.

2. 솔루션

Tencent Cloud CDN은 가상화를 통해 기존 리소스를 재사용하여 모든 서비스에 공통적인 버스트 풀을 구축하고 모든 플랫폼이 버퍼를 공유합니다. 버스트 풀의 장치는 Docker 가상 머신입니다. 가상 머신은 사양이 다르며 비즈니스에 필요한 한 요청 시 사용할 수 있습니다. 버스트 풀의 대역폭 예약은 10Tb에 달하며 이는 기본적으로 모든 비즈니스 버스트 요구 사항을 충족할 수 있습니다. 비즈니스에 갑작스러운 수요가 있는 경우 자동 목록 인터페이스를 통해 10Tb 버스트 풀을 10분 안에 확장할 수 있습니다.

버스트 풀 시스템 아키텍처


a) 버스트 풀: 각 플랫폼의 물리적 머신 상위 계층에서 Docker 가상 머신으로 구성된 리소스 풀은 CPU/메모리/디스크 등의 사용을 제한하여 손상을 방지합니다. 물리적 기계. 원래 비즈니스는 여전히 물리적 시스템에 배포되어 있으므로 조정할 필요가 없습니다.

b) 자동화된 배포 및 모니터링 시스템: 실제 비즈니스 요구 사항에 따라 자동으로 수요를 예측하고 용량을 확장할 수 있습니다. 갑작스런 요구사항은 10분 이내에 확장이 가능합니다. 주문형/다운로드 서비스의 경우 핫 파일이 자동으로 배포되어 소스로의 반환 대역폭을 줄입니다.

c) 예약 시스템: 갑작스럽고 대량의 갑작스러운 업무로 인해 도메인 이름 예약 시스템보다 기차를 통한 서비스가 더 유리합니다. 기차 일정을 통해 더욱 유연하고 신속하게 적용되어 분 수준에 도달합니다.

가상 머신과 물리적 머신은 리포팅 에이전트로 배포되며, 비즈니스 정보와 서버 부하가 1분마다 모니터링 시스템에 보고됩니다. 모니터링 시스템은 과거 대역폭을 기반으로 값을 예측하고 이를 현재 대역폭과 비교합니다. 현재 대역폭이 예측 값의 50%를 초과하면 버스트가 있는 것으로 간주됩니다. 대역폭 증가 비율에 따라 시스템은 버스트 풀의 해당 데이터로 장비를 자동으로 확장합니다. 사전에 대비한 긴급 상황의 경우 운영 및 유지 관리를 통해 대역폭 요구 사항을 지정할 수 있으며, 그러면 시스템이 자동으로 장비 요구 사항을 계산하고 용량을 확장합니다.

분 단위로 보고되는 서버 로드 정보는 모니터링 시스템이 일정 결정을 내리는 기초를 제공합니다. 시스템은 컴퓨터실의 남은 대역폭, 서버 대역폭, CPU 및 IO와 같은 포괄적인 정보를 기반으로 통과 열차에서 가상 머신을 활성화하거나 비활성화해야 하는지 여부를 결정합니다. 접속 시 사용자는 먼저 급행 열차 배차 시스템을 요청합니다. 급행 열차는 스케줄링 정책에 따라 302 주소를 반환합니다. 302 주소는 실제 CDN 리소스 주소입니다. 사용자는 302 주소로 점프하여 실제 콘텐츠를 얻습니다.

2. 기술적 최적화

가상화 기술을 사용하여 리소스를 재사용하기 위한 중요한 전제 조건은 기존 비즈니스에 영향을 미치지 않는다는 것입니다. 이를 위해서는 CPU/디스크, 대역폭 사용량 등 리소스를 충분히 격리해야 합니다. 구현 과정에서 발생하는 몇 가지 문제와 해결 방법은 다음과 같습니다.

● 단일 기계의 부하를 정확하게 제어: 과도한 부하가 서비스 품질에 영향을 미치므로 단일 기계의 부하를 정확하게 제어해야 합니다.

해결책:

a) 할당량 시스템: 급행 열차에는 CPU/IO 및 대역폭을 포함하여 각 가상 머신이 사용할 수 있는 리소스를 제한하는 할당량 시스템이 있습니다. 모니터링 시스템에 보고된 정보는 할당량 시스템과 결합되어 서버 로드가 분 단위로 지정된 범위로 제한되도록 할 수 있습니다.

b) 일부 요청은 302를 반환합니다. CPU/대역폭/IO 등을 제한한 후 애플리케이션은 호스트 시스템의 현재 로드를 기반으로 실시간으로 요청을 처리할지 여부를 결정할 수 있습니다. 부하가 한도 내에 있으면 직접 처리되고, 부하가 한도를 초과하면 302가 반환되므로 사용자는 통과 열차의 발송 주소로 점프할 수 있습니다. 이를 통해 서비스에 영향을 주지 않고 부하를 정확하게 제어할 수 있습니다. 품질은 최대한. 프로그램 수준에서 실시간 부하 제어는 할당량 시스템을 효과적으로 보완합니다.

c) 네트워크 카드 흐름 제어: 극단적인 경우 비즈니스 대역폭이 설정된 임계값을 초과하면 가상 네트워크 카드는 마더 시스템에 영향을 미치지 않도록 패킷을 적극적으로 삭제합니다.

● 디스크 크기 제한: Docker는 ext3/ext4 파일 시스템의 파일/디렉터리 수준에서 디스크 크기를 제한할 수 없습니다.

해결책:

Tencent Cloud CDN 비즈니스는 기본적으로 ext3/ext4 파일 시스템을 사용하기 때문에 이 경우 Docker는 사용자 또는 사용자 그룹을 기준으로 디스크만 제한할 수 있지만 기존 네트워크 서비스는 루트 환경에서 직접 아래를 사용합니다. 여기서는 디스크 크기 제한 문제를 해결하기 위해 루프 장치를 사용합니다. 가상 머신의 버스트 서비스는 루프 장치에 마운트된 디렉터리를 사용하므로 디스크 크기를 간접적으로 제한하고 너무 많은 디스크 사용이 다른 서비스에 영향을 미치는 것을 방지할 수 있습니다.

● CPU 바인딩: 기본값은 모든 CPU를 바인딩하는 것입니다. 일부 단일 CPU의 높은 로드는 마더 머신 비즈니스에 영향을 미칩니다.

해결 방법:

잦은 조정과 결함 데이터의 영향을 피하기 위해 1분마다 스크립트를 통해 시스템의 모든 단일 CPU 부하를 수집합니다. 평균값은 15분입니다. 마지막으로, 부하가 낮은 일부 코어가 선택되고 구성 파일 cpuset.cpus를 통해 동적으로 바인딩되어 가상 머신이 호스트 머신의 비즈니스에 미치는 영향을 최소화하고 리소스를 최대한 활용합니다.

버스트 풀이 온라인화 된 후 King of Glory 다운로드, NBA 생방송, KPL/LPL 게임 생방송 등 많은 대규모 버스트 이벤트를 효율적으로 지원하여 2천만 위안의 비용을 절약했습니다. 버퍼를 공유함으로써 버스트 풀을 구축하면 버스트 기능이 크게 향상되고 비용이 절감될 수 있습니다.

요약

Tencent Cloud CDN은 Docker 기술을 사용하여 리소스를 재사용하고 Tb 수준의 버스트 풀을 구축할 수 있으며 라이브 방송, 온디맨드, 정적 등 다양한 비즈니스 버스트를 지원할 수 있으며 비즈니스 버스트 요구 사항을 자동으로 감지하고 대응할 수 있습니다. 빠른 출시와 저렴한 비용의 특성으로 10분 이내에 완전한 자원 확장이 가능합니다. 리소스 재사용은 리소스 활용도를 향상시키고 서비스에 대한 대규모 버스트 풀을 제공할 수 있습니다. 그러나 다중화된 서비스는 서로 영향을 미칠 수 없다는 점에 유의해야 합니다. 이를 위해서는 서버의 실시간 모니터링과 적시 예약이 필요합니다. 다양한 서비스 조정을 용이하게 하기 위해 컨테이너 격리를 기반으로 하는 커널 매개변수와 같은 개선이 필요한 부분도 있습니다. 일부 비즈니스 클라이언트는 302 점프를 지원하지 않으며 예약 시스템은 도메인 이름 예약을 지원해야 합니다.

관련 권장 사항:

웹 개발의 높은 동시성 문제 해결

높은 동시성에서 PHP 및 Redis를 사용한 snap-up 및 플래시 판매 기능의 예에 대한 자세한 설명

PHP 읽기를 위한 높은 동시성 솔루션 요약 -파일 충돌 쓰기

위 내용은 King of Glory 개발 시 높은 동시성 문제 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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