>  기사  >  백엔드 개발  >  PHP의 beanstalkd 메시지 대기열 및 클래스 공유에 대한 자세한 설명

PHP의 beanstalkd 메시지 대기열 및 클래스 공유에 대한 자세한 설명

黄舟
黄舟원래의
2018-05-19 16:10:592671검색

이 글은 주로 모든 사람을 위한 php-beanstalkd 메시지 큐 클래스 예제 코드를 공유하며, 관심 있는 친구들은 이를 참조할 수 있습니다.

개요:
Beanstalkd, 고성능 경량 분산 메모리 큐 시스템은 원래 설계되었습니다. 백그라운드에서 시간이 많이 걸리는 작업을 비동기적으로 실행하여 대용량 웹 애플리케이션 시스템의 페이지 액세스 지연을 줄이기 위해 950만 명의 사용자가 있는 Facebook Cause 애플리케이션을 지원했습니다. 나중에는 오픈 소스가 되었고 이제 PostRank가 대규모로 배포 및 사용되어 매일 수백만 개의 작업을 처리합니다. Beanstalkd는 전형적인 Memcached와 유사한 디자인으로 프로토콜과 사용법이 동일하므로 memcached를 사용해 본 사용자라면 Beanstalkd가 친숙하게 느껴질 것입니다.
Beanstalk 핵심 개념:
job: 비동기 처리가 필요한 작업을 튜브에 배치해야 합니다.
tube: 균일한 유형의 작업을 저장하는 데 사용되는 잘 알려진 작업 대기열
producer: 작업의 생산자
consumer: 작업의 소비자
간단히 말하면 프로세스는 단 한 문장으로 구성됩니다.
Producer는 작업을 생성합니다. task job을 작성하고 이를 튜브에 푸시하면 소비자가 튜브에서 작업을 가져와 실행합니다(물론 이 모든 작업의 ​​전제는 콩나무 서비스가 실행 중이라는 것입니다).

Job에는 READY(항상 소비자가 꺼낼 준비가 되어 있음), RESERVED(소비자가 작업을 처리하는 중), DELAYED(작업을 지연하고 설정된 지연 시간 후에 준비 상태로 진입), BURIED(휴면 상태)가 있습니다. , 필수 작업은 상태) 4개 상태를 전송한 후에만 수행할 수 있습니다. 생산자가 직접 작업을 넣으면 작업은 READY 상태가 되어 소비자가 처리할 때까지 기다립니다. 넣기를 지연하도록 선택하면 작업은 먼저 DELAYED 상태로 전환된 다음 완료 후 READY 상태로 마이그레이션됩니다. 대기 시간. 소비자가 현재 READY 작업을 얻은 후에는 작업 상태가 RESERVED로 마이그레이션되어 다른 소비자가 더 이상 작업을 수행할 수 없습니다. 소비자는 작업을 완료한 후 삭제, 릴리스 또는 삭제 작업을 선택할 수 있습니다. 삭제 후 작업은 시스템에서 종료되고 다시 가져올 수 없습니다. 릴리스 작업은 작업 상태를 다시 준비(READY)로 마이그레이션할 수 있습니다. 상태 마이그레이션 작업) 이를 통해 다른 소비자가 계속해서 작업을 획득하고 실행할 수 있습니다. 흥미로운 점은 작업을 절전 모드로 전환한 다음 필요할 때 휴면 작업을 다시 준비 상태로 되돌리거나 삭제할 수 있다는 것입니다. BURIED 상태의 작업입니다. 이러한 흥미로운 작업과 상태 덕분에 이를 기반으로 많은 흥미로운 애플리케이션을 만들 수 있습니다. 예를 들어 순환 대기열을 구현하려는 경우 작업을 RESERVED 상태로 잠자기 상태로 만든 다음 BURIED 상태 작업을 넣을 수 있습니다. READY 상태의 작업이 없을 때 작업이 한 번에 READY 상태로 돌아갑니다.

분석 예: Weibo는 매우 전형적인 예입니다.

1. Weibo 게시
2. 팬에게 푸시(100만명의 팬이 있으면 오랫동안 차단되며 사용자는 지연을 느낄 것입니다)
웨이보에 콘텐츠를 게시하려면 위 두 가지가 완료되어야 합니다. 웨이보를 게시하려면 간단한 데이터베이스 작업 하나만 필요합니다.
하지만 그에게 푸시하는 팬은 데이터베이스를 100만 번 작동해야 하므로 사용자가 게시하게 됩니다. a Weibo 결과가 성공적으로 반환되기까지 오랜 지연이 있습니다.
큐 방식을 사용하면 사용자가 Weibo 메시지를 보내고 결과가 즉시 반환됩니다. 메시지가 성공적으로 전송되면 푸시의 나머지 부분은 비동기 실행을 위해 대기열에 추가됩니다.
푸시는 특별히 시기적절할 필요가 없습니다. , 몇 초 또는 수십 초의 지연이 허용됩니다.

이 문서의 예제는 참고용으로 php beanstalkd 메시지 대기열 클래스의 특정 코드를 공유합니다.

위 내용은 PHP의 beanstalkd 메시지 대기열 및 클래스 공유에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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