> 백엔드 개발 > PHP 튜토리얼 > PHP 앱의 수평 스케일링, 2 부

PHP 앱의 수평 스케일링, 2 부

Joseph Gordon-Levitt
풀어 주다: 2025-02-22 10:13:13
원래의
993명이 탐색했습니다.

Horizontal Scaling of PHP Apps, Part 2 1 부에서는 응용 프로그램 계층에서 수평 스케일링을 탐색했습니다. 이 부분은 데이터베이스 스케일링에 중점을 두어 응용 프로그램 성장을 수반하는 읽기/쓰기 요구가 증가합니다. 우리는 복제 기술과 일반적인 함정을 조사 할 것입니다.

주요 개념 :

PHP 응용 프로그램의 수평 스케일링은 더 높은 읽기/쓰기 부하를 관리하기 위해 데이터베이스를 스케일링해야합니다. 데이터베이스 최적화 (인덱싱, 최소 테이블, 원자 쿼리, 쿼리 캐싱) 성능에 중요합니다.

MSR (Master-Slave Replication)은 쓰기 작업 (마스터) 및 읽기 작업 (슬레이브)을 배포하여 서버 과부하 방지. MSR은 데이터 일관성에 영향을 미치는 잠재적 동기화 지연을 도입합니다. 그러나 새로 쓰여진 데이터에 대한 즉각적인 읽기 액세스가 항상 중요하지는 않기 때문에 이것은 종종 관리 가능합니다. 마스터 장애 조치 메커니즘은 존재하지만 (노예를 마스터로 홍보) 건축 변경과 잠재적 인 데이터 손실을 포함합니다. 실패한 마스터는 일반적으로 노예로 재건됩니다.

데이터베이스 최적화 : 최적화는 여전히 가장 중요합니다. 효과적인 전략에는 다음이 포함됩니다
    적절한 데이터베이스 인덱싱. 테이블 크기를 최소화하고 데이터베이스 샤딩 (별도의 토론을받을 수있는 복잡한 주제)을 사용하여 관련 데이터를 별도의 테이블 (예 : , )로 분리합니다. 복잡한 현대 계산 대신 소형 원자 쿼리를 사용합니다 쿼리 캐시를 활용하여 자주 액세스하는 데이터를 저장하고 재사용합니다. 그러나 캐시 크기 제한과 다양한 데이터 업데이트 주파수로 인해 신중한 튜닝이 필요합니다.
  • 컨텍스트 서버 그룹화는 쿼리 캐시 효과를 향상시킵니다. 응용 프로그램 기능 (예 : 채팅, 게임, 사용자 계정)을 기반으로 한 그룹 서버. 이를 통해 응용 프로그램의 다른 부분에 대한 맞춤형 리소스 할당 및 최적화 된 캐싱이 가능합니다. 예를 들어, 교통량이 많은 게임 섹션은 덜 자주 액세스하는 사용자 계정 섹션보다 더 많은 서버를받을 수 있습니다. 이 접근법은 또한 수요에 따라 동적 서버 재 할당을 용이하게합니다.
  • 마스터 슬레이브 복제 (MSR) :
  • MSR은 공통 데이터베이스 기능 (종종 내장)입니다. 과정에는 다음과 같습니다
  • 쓰기 작동 (예 : 프로필 업데이트)이 마스터 데이터베이스로 전송됩니다. 마스터가 쿼리를 실행하여 노예에게 복제합니다. 읽기 작업은 노예를 대상으로하며 하중을 분배합니다.
  • 이 노동 부서는 서버 과부하를 방지합니다. 많은 최신 데이터베이스 (MariaDB, MySQL)는 기본적으로 MSR을 활성화합니다 읽기 및 쓰기 : MSR을 활용하려면 별도의 읽기 및 쓰기 연결이 필요합니다. 이는 구성 관리를 통해 구현할 수 있습니다 (예 : 서비스 컨테이너를 사용하여 데이터베이스 연결을 관리). 읽기의 경우, 연속적인 작동을 보장하기 위해 오류 처리 및 장애 조치 메커니즘을 사용하여 임의의 슬레이브를 선택할 수 있습니다. 정교한 구현에는 슬레이브로드 모니터링이 통합되어 최소한 활용되지 않은 슬레이브를 선택할 수 있습니다. 예제 코드 (pseudocode)는 이것을 보여줍니다

    읽기/쓰기 동기화 지연 :

    마스터와 노예 간의 지연은 데이터 불일치를 유발할 수 있습니다. 해결 방법은 특히 즉각적인 읽기 정확도가 중요하지 않은 경우에 근사치 수락을 포함합니다. 마스터 실패 :
    // ... (Service container setup for database connections) ...
    
    // Slave selection with failover and load monitoring (pseudocode)
    $validSlaves = $this->getAvailableSlaves(); // Method to get healthy slaves
    $slave = null;
    while (!$slave && !empty($validSlaves)) {
      $randomSlave = array_rand($validSlaves);
      try {
        $slave = new PDO(...$validSlaves[$randomSlave]...);
      } catch (PDOException $e) {
        unset($validSlaves[$randomSlave]); // Remove unhealthy slave
        // Log error and potentially notify administrators
      }
    }
    if (!$slave) {
      throw new Exception("No available slaves"); // Handle critical error
    }
    // ... (Use $slave for read operations) ...
    로그인 후 복사
    마스터 실패는 장애 조치를 통해 처리됩니다. 노예가 마스터로 승진합니다. 이를 위해서는 건축 조정이 필요하며 데이터 손실이 최소화 될 수 있습니다. 그런 다음 실패한 마스터는 노예로 재구성됩니다

    결론 : 이 부분은 데이터베이스 복제 및 클러스터링을 다루었습니다. 파트 1과 결합하여 수평 스케일링에 대한 기본적인 이해를 제공합니다. 고급 기술에 대한 추가 탐색이 권장됩니다.

    자주 묻는 질문 (faqs) :

    (원래 입력의 FAQ는 이미 수정 된 답변과 확장 된 답변 내에서 적절하게 해결되므로 중복성을 피하기 위해 여기서 생략됩니다.)

위 내용은 PHP 앱의 수평 스케일링, 2 부의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿