postgresql-meet-your-queueを翻訳してみた

AMQP for PostgreSQLの紹介の資料を翻訳してみました。
http://www.slideshare.net/postwait/postgresql-meet-your-queue

RabbitMQやMQが理解できていな部分もあると思うので、おかしな部分があれば、
指摘頂けると幸いです。(他、意味がわからなかったところは英語のままです。)

タイトルは、若干微妙なので、英訳と両方のっけました。
おかしくなければ、ちゃんとしたスライドにして、slideshareにでものっけてみようかなと思っていたり。。。

                                                                                              • -

PostgreSQLは、キューになる

                                                                                              • -

PostgreSQL は素晴らしい

・速い
・拡張性
・テーブルスペース
・堅牢なデータ型
・パーティショニング(偽物にもかかわらず?)
・とてもコミュニティに支持されている
・極めてデータベース標準に準拠している

                                                                                              • -

PostgreSQL is not the “world”

・必然的に、我々は世界の残りの部分と対話する必要があります
・非SQLコンポーネント
・NoSQLのシステム
 -キャッシュシステム
 -検索システム(Solr/ lucene
 -管理プロセス

                                                                                              • -

■Appropiare Typicalis
(流用性 Typicalis(どういう意味?)

・アプリケーション強化
-プロダクトテーブルのプロダクトの対価か説明を更新するアプリケーションコード
-the application submits the updates to the search index system.
・不具合

 -psql#  UPDATE products
      SET description = REPLACE(description, ‘behaviour’, ‘behavior’);

 -管理上修正が必要な依存関係外のハンドリングはすべきでない
 
■ソリューション
・理想的に、データベースはこれらのシステムのすべてを通知します
・最も一般的なケースは: memcached.
- app: pull from memcached user::jesus@omniti.com
if not found:

        select * from users where email=‘jesus@omniti.com‘
        put row in memcached at user::jesus@omniti.com

 - app:
       update users set mood=‘happy‘ where email=‘jesus@omniti.com‘

(a) memcachedレコードをパージ
(b) 善行を取得しmemcachedで置き換え
- それって: pgmemcache
・問題:
- 各リモートコンポーネントのPostgresのモジュールが必要

                                                                                              • -

■Enter Queueing

・Queueing?
- PostgreSQLアーキテクチャ内の他のコンポーネントと汎用的なメッセージバスとの通信を許可
- AMQPの入力: “Advanced Message Queueing Protocol”
- なぜSTOMPではないのか?
- なぜStarlingではないのか?
- AMQPは長い期間を経て素晴らしい仕様となっている
- AMQPほぼすべての 中継サーバ(message broker)をサポートし、実装している

                                                                                              • -

■Setups: Installing
インストール方法

・svn export \
  https://labs.omniti.com/pgtreats/trunk/contrib/pg_amqp
・cd pg_amqp
・make USE_PGXS=1
・make install
・add to postgresql.conf:
   shared_preload_libraries = 'pg_amqp.so'
・(re)start postgres
・load the pg_amqp.sql file into your database.
                                                                                              • -

■Setup: configuring your broker
(中継サーバ(broker)の設定)

INSERT INTO amqp.broker (host,port,vhost,username,password)
VALUES (‘localhost’,5672,NULL,‘guest’,‘guest’)
RETURNING broker_id
                                                                                              • -

■Setup: declaring an exchange
メッセージ配送方法(Exchange)の宣言

・AMQPクライアント外で行うことが可能
- AMQPの管理プロセスを使用する
(that is just, in fact, an AMQP client)
・多くの場合、別のコンポーネントが配送方法(exchange)を作成済みである
・本当にPostgreSQLの中にそれを実行する必要がある場合は:

  SELECT amqp.declare_exchange(broker_id, exchange_name, exchange_type, passive, durable, auto_delete)
                                                                                              • -

■Usage: sending messages
メッセージの送信方法

・接続するには??
- 暗黙的に行われるので、必要ない
・接続を切るには?
- 中継サーバ(Broker)が接続をキャッシュしていて、トランザクションの間、生きている
- 明示的に接続を切るには:

    SELECT amqp.disconnect(broker_id);
                                                                                              • -

■Usage: sending messages for real
実際にメッセージを送る

トランザクションの一部としてメッセージを送信する

   SELECT amqp.publish(broker_id, exchange, routing_key, message);

- This will publish the “message” over the specified “exchange” using
指定された"routing_key"を使用して、指定した配送方法(exchange)でメッセージを発行しますが、
PostgreSQL内のトランザクションとしてです。

・メッセージのすぐに送信するには:

  SELECT amqp.autonomous_publish(broker_id, exchange,routing_key, message);

- Publish the same message, but do it immediately.
- すぐに同じメッセージを発行される。

                                                                                              • -

■A dark side: unsafe? WTF?
WTFの危険な側面

・現在、pg_amqpは、AMQP 0.8の仕様を使用しています

・AMQP 1.0の仕様は形式上二台のPCを導入する

・AMQPのトランザクションが失敗したとき、現在の実装の方法(postgresのtxnのcommitフック)では、コミットすることができない
これは痛い。


・これは、最後のトランザクションの間にAMQPのブローカーがクラッシュして呼び出し、データベース側でCOMMITを発行するときに発生します。

・RabbitMQがAMQP 1.0をサポートしたら、私は2PCを使用してドライバを更新していきます

                                                                                              • -