> 백엔드 개발 > PHP 튜토리얼 > PHP 마스터 | Amazon DynamoDB :로드 밸런서로 PHP 세션을 저장하십시오

PHP 마스터 | Amazon DynamoDB :로드 밸런서로 PHP 세션을 저장하십시오

Lisa Kudrow
풀어 주다: 2025-02-25 10:05:09
원래의
430명이 탐색했습니다.

PHP 마스터 | Amazon DynamoDB :로드 밸런서로 PHP 세션을 저장하십시오

이 기사는 자매 사이트 중 하나 인 Cloudspring에서 공유됩니다. 도움이된다면 방문해주십시오!

이 튜토리얼은 Amazon DynamoDB를 PHP 세션의 저장 시설로 사용하는 방법을 보여줍니다. 이 방법은 응용 프로그램이 탄성로드 밸런싱 및 자동화 서비스를 활용할 때 매우 유용합니다. EC2, Elastic Load Balancer 및 DynamODB를 튜토리얼을 따라 재생할 수있는 전제 조건으로 사용하려면 Amazon AWS 계정이 필요합니다. 키 테이크 아웃

Amazon DynamoDB는 PHP 세션을위한 저장 시설로 사용될 수 있으며, 응용 프로그램이 탄성로드 밸런싱 및 자동화 서비스를 활용할 때 특히 유용합니다. 탄성로드 밸런서는 하나 또는 많은 가상 서버의 프론트 엔드 역할을하여 요청을 배포합니다. Autoscaling은 트래픽이 높을 때 시스템이 웹 서버의 더 많은 클론을 시작하고 트래픽이 떨어질 때 일부를 종료 할 수 있습니다. PHP 세션 데이터는 가상 서버 외부에 저장되어야합니다. 한 가지 옵션은 Amazon에서 관리하는 강력하고 빠른 NOSQL 데이터베이스 인 DynamoDB와 같은 데이터베이스에 세션을 저장하는 것입니다. 공식 PHP SDK의 AmazonDynamoDB 클래스는 세션 관리자로 등록 할 수 있습니다. PHP 용 AWS SDK는 개발자가 비용 효율적이고 확장 가능하며 안정적인 AWS 클라우드를 활용하는 응용 프로그램을보다 쉽게 ​​구축 할 수 있도록합니다.

탄성 하중 밸런서 란 무엇입니까? 탄성로드 밸런서는 하나 또는 많은 가상 서버의 프론트 엔드 역할을합니다. 요청을 수락하고 가상 서버간에 배포합니다. 가상 서버는 기계 템플릿 (AMI)을 복제하여 생성하거나 필요한 경우 파괴 할 수 있습니다. 가상 서버를 동적으로 추가하거나 줄임으로써 애플리케이션이 다양 할 수있는 경우 처리 전력. 및 자동화? Autoscaling이 게임에 결합하면 시스템도 다음과 같습니다.
    트래픽이 높을 때 웹 서버의 더 많은 클론을 시작하십시오
  • 트래픽이 사전 정의 된 임계 값 아래로 떨어지면 일부를 종료합니다. 건강에 해로운 사례를 종료하고 필요한 경우 교체하십시오
  • 어떻게해야하나요? 이 환경에서 응용 프로그램이 작동 할 수 있습니까? 예, 두 가지 중요한 요구 사항을 충족하면 :
  • 가상 서버가 동적으로 생성되므로 서버에는 데이터가 아닌 응용 프로그램 코드 만 포함해야합니다. 이것은 DB 서비스를 통해 쉽게 수행 할 수 있습니다.
  • 모든 사용자 세션 상태는 가상 서버 외부에서 유지되어야합니다. 기본적으로 PHP 모듈은 이러한 데이터를 Che Web Server의 파일 시스템에 저장하기 때문에 조금 더 까다 롭습니다.
그리고 이것은 우리가 이것에서 해결하려고 노력할 문제입니다… 음, 세션. 하지 말아야 할 것 : 끈적 끈적한 세션 Sticky Session은 사용자 세션을 특정 응용 프로그램 인스턴스에 바인딩하는 Elastic Load Balancer 서비스의 기능으로 세션 중에 사용자가 제공하는 모든 요청이 동일한 가상 서버로 전송됩니다. 세션 쿠키는로드 밸런서 또는 응용 프로그램에 의해 생성 될 수 있지만 : 이것은 나쁜 관행으로 간주됩니다. 이상적인 것은 응용 프로그램을 SANTESS로 설계하는 것이지만 항상 가능하지는 않습니다. 세션을 데이터베이스에 저장 다른 옵션은 다음과 같습니다. 세션을 데이터베이스 내에 저장하십시오. 응용 프로그램 또는 Memcache 인스턴스 또는 다른 NOSQL 데이터베이스에서 사용하는 동일한 외부 SQL 데이터베이스 일 수 있습니다. 이 경우 DynamoDB는 강력하고 빠른 NOSQL 데이터베이스이기 때문에 매우 흥미로워 보이며 Amazon 자체가 관리하며 가상 서버에서도 쉽게 액세스 할 수 있습니다. 또한 공식 PHP SDK의 AmazonDynamoDB 클래스는 이미 세션 관리자로 등록 할 수있는 장비가 있습니다. DynamodB에 대해 들어 본 적이 없다면이 입문 비디오를 보는 것이 좋습니다. 데모 애플리케이션 전체 메커니즘을 테스트하기 위해 간단한 응용 프로그램을 모았습니다. Github 저장소에서 소스 코드를 다운로드 할 수 있습니다. 탄성로드 밸런서와 최소 2 개의 인스턴스를 사용 하여이 응용 프로그램을 실행합니다. 우리는 지금은 자동화를 사용하지 않을 것입니다.

응용 프로그램은 사용자에게 현재 세션에 저장된 사용자 이름을 선택하고 "로그인"역할을합니다. 세션에 사용자 이름이있는 경우 응용 프로그램은 사용자가 일종의 "프로파일"을 삽입 할 수있게합니다. 본질적으로 이름, 성, 이메일 등과 같은 일련의 키/값 정보 (키 및 값은 문자열입니다). 이 모든 논리는 index.php 파일에 포함되어 있습니다.

세션 .php 파일에는 간단한 세션 라이브러리가 포함되어 있습니다. 이 라이브러리를 사용하면 $ session-> read ( 'some_var') 및 $ session-> write ( 'some_key', 'some_value')와 같은 친숙한 방법으로 세션 데이터를 관리 할 수 ​​있습니다. 이 세션 객체는 기본 PHP 세션 메커니즘 (로컬 테스트 서버 인 경우) 또는 사용자 정의 클래스를 사용하도록 구성 할 수 있습니다. 응용 프로그램 파일의 첫 번째 단계는 세션 시작입니다.
<span>require_once 'lib/session.php';
</span><span>try {
</span> <span>// Engine can be PHP or AmazonDynamoDB
</span> <span>$session = new Session($config['session']['engine'], $config['session']['params']);
</span><span>} catch (Exception $e) {
</span> <span>exit($e->getMessage());
</span><span>} // end try</span>
로그인 후 복사
기본 엔진 값은 PHP이며 매개 변수가 필요하지 않습니다. 'AmazondyNamoDB'엔진을 선택하면 세션 생성자가 추가 코드를 실행합니다.
<span>switch ($engine) {
</span><span>case 'AmazonDynamoDB':
</span><span>// Load AWS SDK
</span><span>require_once 'AWSSDKforPHP/sdk.class.php';
</span><span>// Create a list of credential sets that can be used with the SDK.
</span><span>CFCredentials<span>::</span>set($params['credentials']);
</span><span>// Instantiate a DynamoDB client
</span><span>$dynamodb = new AmazonDynamoDB();
</span><span>$dynamodb->set_region($params['region']);
</span><span>// Instantiate, configure, and register the session handler
</span><span>$this->handler = $dynamodb->register_session_handler(array(
</span><span>'table_name'       => $params['table_name'],
</span><span>'lifetime'         => $params['lifetime'],
</span><span>));
</span><span>break;</span>
로그인 후 복사
먼저 이미 설치하고 도달 할 수 있어야하는 AWS SDK를로드 한 다음 자격 증명이 AWS 환경에로드됩니다. 이 시점부터 우리는 AWS 클래스를 사용할 수 있으므로 AmazonDynamoDB의 새로운 인스턴스가 생성되고 테이블이있는 올바른 영역으로 설정됩니다. 마지막으로 우리는 DynamODB 객체에 사용할 테이블 이름을 전달하는 세션 관리자로 자신을 등록하도록 지시합니다. 이것이 바로 우리가 필요한 것입니다. config.php 파일은 우리가 사용하려는 엔진에 응용 프로그램을 알려주는 곳입니다. 또한 AWS 자격 증명 및 dynamodb 설정이 여기에 저장됩니다. Index.php에는 로컬 서버에 있지 않은 경우 현재 실행중인 인스턴스의 이름을 가져 오는 작은 유틸리티 기능도 포함되어 있습니다. 이는 세션이 서버에서 일관되게 유지되는지 확인하는 데 유용합니다.
<span>function getServerName() {
</span> <span>$host = $_SERVER['SERVER_NAME'];
</span> <span>if ('localhost' != $host) {
</span> <span>// Maybe we are on EC2, trying to catch the current instance ID
</span> <span>$ch = curl_init('http://169.254.169.254/latest/meta-data/instance-id');
</span> <span>curl_setopt($ch, CURLOPT_FAILONERROR, true);
</span> <span>curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
</span> <span>curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
</span> <span>if ($ret = curl_exec($ch)) {
</span> <span>$host .= ' (instance ' . $ret . ')';
</span> <span>} // end if
</span> <span>curl_close($ch);
</span> <span>} // end if
</span> <span>return $host;
</span><span>} // end function</span>
로그인 후 복사
getServername () 함수는 EC2 메타 데이터 API를 사용하여 인스턴스의 이름을 찾습니다. 함대에서 앱을 실행하십시오 이 응용 프로그램을 테스트하려면로드 밸런서 뒤에 두 개 이상의 웹 서버가 필요합니다. 내가 사용한 서버는 Ubuntu GNU/Linux 인스턴스가 장착 된 인스턴스입니다.
    Apache 웹 서버, PHP 5.3 (명령 줄 및 Apache 모듈 모두), CURL 프로그램 및 PHP 확장, 배 패키지 관리자 (SDK를 쉽게 설치해야 함),
  • PHP 용 AWS SDK (배로 설치하는 것이 좋습니다).
  • AMI를 구축하는 방법을 알고 있다면 처음부터 당신의 것을 구축 할 수 있습니다. 그러나 내가 준비하고 공개 한 것을 사용할 수도 있습니다 : AMI-4B42443F. 이 컴퓨터에는 이미 응용 프로그램의 PHP 소스 코드 및 기타 모든 종속성이 포함되어 있습니다. AMI가 준비되면… 세션 스토리지를 초기화
  • AWS 콘솔로 이동하여 DynamoDB 서비스와 좋아하는 지역 (광산은 EU West - Ireland)을 선택하십시오. "테이블 작성"버튼을 클릭하십시오.
  • "test_sessions"를 테이블 이름으로 입력하고 "id"라는 문자열 기본 키를 선택하십시오. 키 유형은 "해시"여야합니다. 다른 이름을 선택하면 나중에 config.php 파일에 복사해야합니다. 읽기 및 쓰기 용량 단위 필드 모두에 대해 "10"을 입력하십시오 (예 : 테이블 얼마나 빨리) 테스트하기에 충분합니다.
  • 이제 각 행에 필수 ID 필드가 있지만 유형 문자열, 번호, 문자열 세트 또는 숫자 세트의 기타 다양한 필드를 가변적으로 가질 수있는 NOSQL 테이블이 있습니다. 세션 관리자 객체는 "data"라는 문자열 필드를 사용하여 세션 변수를 저장하고 세션의 만료 타임 스탬프를 위해 "Fexires"라는 숫자 필드를 저장합니다. 서버를 시작하고 구성합니다

    이제 EC2 서비스와 DynamODB 테이블에서 선택한 동일한 영역을 선택하십시오. 대시 보드 또는 "인스턴스"섹션에서 "인스턴스 시작"버튼을 클릭하십시오. 사용자 정의 AMI를 선택하거나 클래식 마법사를 사용하여 "Community Amis"탭으로 이동하여 "AMI – 4B42443F"를 입력하십시오. 다음 화면에서 인스턴스 수에 대해 최소한 "2"를 입력하고 인스턴스 유형을 선택하면 Micro (t1.micro)를 선택했습니다. 가용성 구역 드롭 다운에 "선호도"를 남길 수 있지만 생산 환경에서는 다양한 인스턴스가 동일한 지역 내부의 둘 이상의 영역 사이에 배포되는 것이 좋습니다. "인스턴스 세부 사항"과 "저장 장치"구성 패널 모두에 대한 기본 설정을 수락 한 다음 계속하십시오. 원하는 경우 하나 이상의 선택적 태그를 입력하십시오. 키어를 선택하거나 새 제품을 만드십시오 포트 80에서 최소한 HTTP를 허용하고 포트 22에서 SSH를 허용하는 보안 그룹을 선택하십시오.

    PHP 마스터 | Amazon DynamoDB :로드 밸런서로 PHP 세션을 저장하십시오 설정을 검토 한 다음 인스턴스를 시작하십시오. 인스턴스 상태가 "실행"되면 SSH를 통해 구성 할 수 있습니다. 각 인스턴스에는 EC2-XXX-XXX-XX-XX.region.comPute.amazonaws.com과 유사한 공개 DNS 이름이 있습니다. 생성 된 각 인스턴스에서 config.php 파일을 편집해야합니다. 공개 키와 사용자 이름 "Ubuntu"(내 공개 AMI를 사용한 경우)를 사용하여 SSH 또는 SFTP 클라이언트와 인스턴스에 연결하십시오. $ ssh -i/path/to/key.pem ubuntu@ec2-x-x-x-x.region.compute.amazonaws.com 테스트 응용 프로그램이있는 /var /www로 현재 디렉토리를 변경하십시오. AWS 키와 비밀을 삽입하는 config.php 파일 편집. 그런 다음 DynamODB 테이블 설정이 일치하는지 확인하면이 참조에서 찾을 수있는 적절한 값으로 영역을 편집해야합니다. 그런 다음 ping.html 내부 /var /www라는 빈 파일을 만듭니다.이 파일은로드 밸런서에서 각 인스턴스의 도달 가능성을 테스트하는 데 사용됩니다. 로드 밸런서 설정 데이터베이스와 모든 인스턴스를 사용하면 이제 프론트 엔드로드 밸런서를 설정할 수 있습니다. EC2 Navigation 메뉴에서 "Network & Security"아래에서 "로드 밸런서"를 선택하고 "로드 밸런서 작성"버튼을 클릭하십시오.

    로드 밸런서의 이름을 선택하고 리스너 구성이 스크린 샷의 구성과 일치하는지 확인하십시오.

    PHP 마스터 | Amazon DynamoDB :로드 밸런서로 PHP 세션을 저장하십시오 건강 검사 패널에서 핑 경로 필드에 /ping.html을 입력하고 다른 설정을 기본값으로 남겨 둡니다. 이는 다음을 의미합니다. 30 초마다 각 인스턴스의 /ping.html 리소스를 호출하십시오. 응답 시간이 5 초가 더 길면 검사가 실패하면 인스턴스가 두 번 연속 건강 점검이 실패하면 인스턴스가 10 연속 체크인 경우 건강에 해로운 상태가됩니다. 건강한. 로드 밸런서는 트래픽을 건강에 해로운 인스턴스로 전달하지 않으며 자동 스케일이 마련된 경우 건강에 해로운 사례를 종료하여 새로운 신선한 사례로 대체 할 수 있습니다.

    다음 화면에서는 현재 실행중인 인스턴스를로드 밸런서에 추가 할 수있는 것을 선택할 수 있습니다. 이전에 생성 된 두 인스턴스를 선택하고 계속 진행하십시오. 최종 구성을 검토하고 괜찮은지 확인하십시오. 이제로드 밸런서의 세부 사항과 모든 연결된 인스턴스의 상태를 볼 수 있어야합니다. PHP 마스터 | Amazon DynamoDB :로드 밸런서로 PHP 세션을 저장하십시오

    로드 밸런서의 DNS 이름 (YourName-12345678.region.elb.amazonaws.com과 같은)을 브라우저에 넣어 응용 프로그램을 테스트 할 수 있습니다. 로드 밸런서 URL을 가리키는 DNS 패널에 cname을 추가하여 도메인 또는 하위 도메인 (예 : Dynamo.yourdomain.com)을 구성 할 수도 있습니다. IP가 초과 근무를 변경할 수 있으므로 A 레코드와 함께 IP를 사용하는 것이 좋습니다.

    PHP 마스터 | Amazon DynamoDB :로드 밸런서로 PHP 세션을 저장하십시오양식을 제출하거나 요청 페이지를 새로 고칠 때마다 요청한 페이지는 다른 인스턴스로 처리 할 수 ​​있습니다. GetServerName () 유틸리티를 통해 표시된 이름으로 어떤 인스턴스를 제공하는지 확인할 수 있습니다.

    요약 그리고 지금은 그게 전부입니다. 우리는 AWS 생태계에서 중요한 주제를 다루었지만 이것이 시작일뿐입니다. 예를 들어이 모든 것들이 완전히 프로그래밍 가능합니다. 예를 들어, 자동화를 추가하고 인스턴스를 자체 구성 할 수 있도록 인스턴스를 설계하고 신뢰할 수있는 장소에서 AWS 자격 증명 및 기타 데이터를 다운로드 할 수 있습니다. 또는 클라우드 형성을 사용하여 전체 인프라에 대한 재사용 가능한 템플릿을 만들 수 있습니다. 확인의 시작점은 AWS 홈페이지입니다. 그리고 테스트를 마친 경우 행복한 코딩은 아니더라도 모든 것을 종료하는 것을 잊지 마십시오! Fotolia를 통한 이미지 Amazon DynamoDB 및 PHP 세션에서 자주 묻는 질문 (FAQ) Amazon DynamoDB 및 PHP 세션으로로드 밸런싱을 구현하려면 어떻게해야합니까?

    로드 밸런싱은 서버로드를 관리하고 최적의 성능을 보장하는 데 중요한 측면입니다. Amazon DynamoDB 및 PHP 세션을 사용하면 Amazon의 ELB (Elastic Load Balancing) 서비스를 사용하여이를 달성 할 수 있습니다. ELB는 Amazon EC2 인스턴스, 컨테이너 및 IP 주소와 같은 여러 대상에 걸쳐 들어오는 응용 프로그램 트래픽을 자동으로 배포합니다. 단일 가용성 영역 또는 여러 가용성 영역에서 애플리케이션 트래픽의 다양한 부하를 처리 할 수 ​​있습니다. PHP 세션에 Amazon DynamoDB를 사용하면 어떤 이점이 있습니까? Amazon Dynamodb는 몇 가지 이점을 제공합니다. PHP 세션의 경우. 원활한 확장 성으로 빠르고 예측 가능한 성능을 제공합니다. 가동 중지 또는 성능 저하없이 트래픽을 조정하기 위해 테이블을 위 또는 아래로 확장 할 수 있습니다. DynamoDB는 또한 인터넷 규모 애플리케이션을위한 내장 보안, 백업 및 복원 및 메모리 인 캐싱을 제공합니다.

    DynamodB와 함께 PHP에 AWS SDK를 어떻게 사용할 수 있습니까?

    AWS SDK PHP를 사용하면 개발자가 비용 효율적이고 확장 가능하며 안정적인 AWS 클라우드를 활용하는 응용 프로그램을보다 쉽게 ​​구축 할 수 있습니다. SDK에는 AWS PHP 라이브러리 및 Code Samples가 포함되어있어 AWS SDK를 사용하여 PHP를 사용하여 Amazon S3, Amazon EC2 및 DynamoDB와 같은 AWS 서비스가 제공하는 모든 기능을 활용하는 방법을 보여줍니다. PHP 코드 예제가있는 공통 DynamODB는? 여기에는 테이블 만들기, 테이블에 항목 쓰기, 테이블에서 항목 읽기, 테이블의 항목 업데이트 및 테이블에서 항목 삭제가 포함됩니다. 이러한 각 작업은 Php의 AWS SDK를 사용하여 수행 할 수 있습니다.Amazon Store 용 PHP 스크립트를 어디에서 찾을 수 있습니까?

    Codecanyon과 같은 다양한 온라인 플랫폼에서 Amazon Store 용 PHP 스크립트를 찾을 수 있습니다. 이 스크립트를 통해 Amazon의 서비스를 PHP 응용 프로그램에 통합하여 제품 검색 및 디스플레이, 쇼핑 카트 관리 및 주문 처리와 같은 기능을 제공 할 수 있습니다.

    PHP를 사용한 DynamODB에 대한 완전한 예가 있습니까? 예, PHP와 함께 DynamoDB를 사용하기위한 완전한 예가 있습니다. 이 예제에는 일반적으로 테이블 작성 코드, 테이블에 항목 작성, 테이블에서 항목 읽기, 테이블의 항목 업데이트 및 테이블에서 항목 삭제가 포함됩니다. 그들은 종종 오류와 예외를 처리하는 방법의 예를 포함합니다.

    Dynamodb 및 PHP로 작업 할 때 Dynamodb에서 오류 및 예외를 어떻게 처리 할 수 ​​있습니까? 오류 및 예외를 처리 할 수 ​​있습니다. 트리 캐치 블록 사용. PHP 용 AWS SDK는 작업이 실패 할 때 예외를 제외하고 응용 프로그램에 적합한 방식으로 이러한 예외를 처리 할 수 ​​있습니다.

    DynamODB 및 PHP를 사용하여 성능을 최적화 할 수있는 방법? DynamODB 및 PHP를 사용하여 성능을 최적화하는 몇 가지 방법이 있습니다. 여기에는 프로비저닝 된 처리량을 사용하여 용량을 관리하고, 글로벌 보조 색인을 사용하여 쿼리 속도를 높이고, Dax (Dynamodb Accelerator)를 사용하여 메모리 인 캐싱을 제공합니다.

    Dynamodb에서 내 데이터를 어떻게 보호 할 수 있습니까? DynamoDB는 데이터를 보호하기위한 몇 가지 보안 기능을 제공합니다. 여기에는 REST에서의 암호화가 포함되어 있으며, 기본 스토리지에 대한 무단 액세스로부터 데이터를 보호하고, 출원과 DynamODB 사이에 데이터가 이동할 때 데이터를 보호하는 트랜지 트의 암호화가 포함됩니다. Dynamodb?

    DynamoDB는 데이터 백업 및 복원에 대한 내장 지원을 제공합니다. 언제든지 주문형 백업을 생성하고 필요할 때 이러한 백업에서 테이블 데이터를 복원 할 수 있습니다. 이를 통해 실수로 삭제 또는 수정으로부터 데이터를 보호하고 실패한 경우에도 애플리케이션을 원활하게 실행할 수 있습니다.

위 내용은 PHP 마스터 | Amazon DynamoDB :로드 밸런서로 PHP 세션을 저장하십시오의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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