복붙노트

[REDIS] 왜 우리는 PostgreSQL을 같은 데이터베이스를 통해 RabbitMQ 같은 메시지 브로커가 필요합니까?

REDIS

왜 우리는 PostgreSQL을 같은 데이터베이스를 통해 RabbitMQ 같은 메시지 브로커가 필요합니까?

나는 우리가 셀러리와 같은 스케줄링 시스템 작업 / 메시지 큐를 만드는 데 사용할 수있는 RabbitMQ 같은 메시지 브로커에 새로운입니다.

자, 여기 질문은 :

지금, 나는 PostgreSQL을 같은 우리의 데이터베이스는 분산 환경에서 작업 할 수 있기 때문에 크기 조절이 해답이 될 수 없다 생각합니다.

나는 특정 문제에 대한 데이터베이스 포즈 무엇을 문제를 인터넷 검색, 내가 발견

이제, 어떻게 RabbitMQ 또는 해결할 수있는 문제 이러한 문제와 같은 다른 메시지 브로커합니까?

또한, 나는 AMQP 프로토콜은 다음과 무엇 것을 알아 냈다. 점에서 큰 무엇입니까?

레디 스도 메시지 브로커로 사용할 수 있습니까? 나는 RabbitMQ보다 Memcached가에 더 유사 찾을 수 있습니다.

이 되거주세요!

해결법

  1. ==============================

    1.토끼의 큐는 메모리에 상주하기 때문에 훨씬 빠르게 데이터베이스에이를 구현하는 것보다 될 것입니다. A (좋은) 전용 메시지 큐는 / 등의 제한으로 필수 대기열 관련 기능을 제공, 흐름 제어 및 (토끼보다이 제공) 몇 가지 이름을, 다른 라우팅 알고리즘을 선택할 수있는 능력해야한다. 프로젝트의 크기에 따라, 당신은 또한 그래서 하나의 구성 요소 경험을 부하하는 경우, 그것은의 다른 작업을하지을 방해 필요, 데이터베이스에서 별도의 구성 요소를 메시지 전달을 할 수 있습니다.

    토끼의 큐는 메모리에 상주하기 때문에 훨씬 빠르게 데이터베이스에이를 구현하는 것보다 될 것입니다. A (좋은) 전용 메시지 큐는 / 등의 제한으로 필수 대기열 관련 기능을 제공, 흐름 제어 및 (토끼보다이 제공) 몇 가지 이름을, 다른 라우팅 알고리즘을 선택할 수있는 능력해야한다. 프로젝트의 크기에 따라, 당신은 또한 그래서 하나의 구성 요소 경험을 부하하는 경우, 그것은의 다른 작업을하지을 방해 필요, 데이터베이스에서 별도의 구성 요소를 메시지 전달을 할 수 있습니다.

    당신이 언급 한 문제에 관해서는 :

    AMQP에 관해서, 나는 정말 멋진 기능은 "교환"및 기타 교환 노선에이를 수있는 기능입니다 말할 것입니다. 이것은 당신에게 더 많은 유연성을 제공하고 매우 편리 할 때 스케일링을에 올 수있는 정교한 라우팅 유형학의 다양한 배열을 만들 수 있습니다. 좋은 예를 들어, 참조 :

    (출처 : springsource.com)

    과 : http://blog.springsource.org/2011/04/01/routing-topologies-for-performance-and-scalability-with-rabbitmq/

    마지막으로, 레디 스에 관해서, 그래, 그것은 메시지 브로커로 사용할 수 있습니다, 잘 할 수 있습니다. rabbitmq는 모든 기능을 갖춘 엔터프라이즈 급 전용 메시지 큐로 처음부터 만들어진 그러나, Rabbitmq는 레디 스보다 더 큐 기능 이상의 메시지가 있습니다. 반면에 레디 스는 주로 (; 그 심지어 스위스 군용 칼이라 훨씬 더 지금보다 않습니다하지만) 인 메모리 키 - 값 저장소로 만들었습니다. 그럼에도 불구하고, 나는 작은 크기의 프로젝트 레디 스로 좋은 결과를 달성 / 듣고 많은 사람들이 읽고했지만 큰 애플리케이션에서 많이 그것에 대해 들어하지 않았습니다.

    여기에 긴 폴링 채팅 구현에 사용되는 레디 스의 예는 다음과 같습니다 http://eflorenzano.com/blog/2011/02/16/technology-behind-convore/

  2. ==============================

    2.PostgreSQL의 9.5 SELECT ... FOR UPDATE를 통합 ... SKIP은 잠겨 있습니다. 훨씬 간단하고 쉽게 작업 큐잉 시스템을 구현하고 있습니다. 더 이상은 다른 세션이 잠겨 것을 'N'행을 가져 오기 위해 지금은 간단하기 때문에 외부 대기 행렬 시스템을 필요로하지 않으며, 당신이 작업이 수행되는 것을 확인 커밋 될 때까지 잠겨 유지할 수 있습니다. 심지어 외부 조율이 필요할 때 두 개의 상 거래와 함께 작동합니다.

    PostgreSQL의 9.5 SELECT ... FOR UPDATE를 통합 ... SKIP은 잠겨 있습니다. 훨씬 간단하고 쉽게 작업 큐잉 시스템을 구현하고 있습니다. 더 이상은 다른 세션이 잠겨 것을 'N'행을 가져 오기 위해 지금은 간단하기 때문에 외부 대기 행렬 시스템을 필요로하지 않으며, 당신이 작업이 수행되는 것을 확인 커밋 될 때까지 잠겨 유지할 수 있습니다. 심지어 외부 조율이 필요할 때 두 개의 상 거래와 함께 작동합니다.

    외부 큐잉 시스템은 다른 시스템과 통조림 기능, 검증 된 성능, 통합을 제공, 유용 남아, 수평 확장 및 연맹 등의 옵션은 그럼에도 불구하고, 간단한 경우에 당신은 정말 더 이상 필요하지 않습니다.

    당신은 같은 도구가 필요하지만, 하나의 인생을 더 쉽게 만들 수 있습니다 사용하지 않습니다. 이렇게 쉽게 데이터베이스 외모에 대기,하지만 당신은 높은 성능, 신뢰성 동시 대기를 잘 관계형 데이터베이스에서 할 정말 열심히 것을 실제로 발견 할 것이다.

    그 이유는 도구 PGQ의 존재처럼.

    당신은 LISTEN와 NOTIFY 사용하여 PostgreSQL의 폴링을 제거 할 수 있지만, 고도의 동시 작동을 보존하고 삽입을 차단하지 않으면 서 그 단 하나의 소비자에게 큐의 맨 오프 항목 밖으로 안정적으로 나눠의 문제를 해결하지 않습니다. 당신이 그 문제를 해결할 생각하는 모든 간단하고 확실한 솔루션은 실제로 현실 세계에서하지 않으며, 단일 작업자 큐 페칭의 효율성이 떨어 버전으로 변질 경향이있다.

    그런 다음 사용하는 고도의 동시 다중 작업자 큐 페치이 필요하지 않은 경우 PostgreSQL의 단일 큐 테이블은 완전히 합리적이다.

  3. from https://stackoverflow.com/questions/13005410/why-do-we-need-message-brokers-like-rabbitmq-over-a-database-like-postgresql by cc-by-sa and MIT license