序章


アプリケーションデプロイメントスタックのすべての要素の義務を注意深く宣言することで、問題が発生したときの診断の簡素化、迅速な拡張能力、関連するコンポーネントの管理範囲の明確化など、多くのメリットがもたらされます。 。

今日のWebサービスエンジニアリングの世界では、上記のシナリオを実現するための重要なコンポーネントには、メッセージングと作業(またはタスク)キューの利用が含まれます。 これらの通常は回復力があり柔軟なアプリケーションは、実装とセットアップが簡単です。 これらは、本番環境に関して、アプリケーションバンドルのさまざまな部分の間でビジネスロジックを分割するのに最適です。

このDigitalOceanの記事では、アプリケーションレベルの通信ソリューションに関するシリーズを続けて、Beanstalkdを見てこの断片の分離を作成します。

Beanstalkd


Beanstalkdは、人気のあるWebアプリケーション(FacebookのCauses)のニーズを解決するために最初に開発されました。 現在、これは絶対に信頼性が高く、インストールが簡単なメッセージングサービスであり、使い始めて使用するのに最適です。

前述のように、Beanstalkdの主なユースケースは、RabbitMQなどの他の一般的なソリューションと同様に、ワークキューとメッセージを介してアプリケーションデプロイメントスタックのさまざまな部分とワーカー間のワークフローを管理することです。 ただし、Beanstalkdが機能するように作成される方法は、他のBeanstalkdとは一線を画しています。

当初から、他のソリューションとは異なり、Beanstalkdは作業キューであり、多くのニーズをカバーする包括的なツールではないことを目的としていました。 この目的を達成するために、Cプログラミング言語に基づいた軽量で高速に機能するアプリケーションとして構築されました。 また、その無駄のないアーキテクチャにより、インストールと使用が非常に簡単になり、ほとんどのユースケースに最適です。

特徴


作成時に返されるIDが返されたジョブを監視できることは、他の機能とは一線を画すBeanstalkdの機能の1つにすぎません。 提供されるその他の興味深い機能は次のとおりです。

  • Persistence -Beanstalkdはメモリ内で動作しますが、永続性のサポートも提供します。

  • 優先順位付け-ほとんどの代替手段とは異なり、Beanstalkdは、必要なときに緊急のことを処理するために、さまざまなタスクに優先順位を付けます。

  • Distribution -Memcachedの動作と同様に、さまざまなサーバーインスタンスを分散できます。

  • Burying -ジョブを無期限に延期することが可能です(つまり、 タスク)それを埋めることによって。

  • サードパーティツール-Beanstalkdには、CLIやWebベースの管理コンソールなどのさまざまなサードパーティツールが付属しています。

  • Expiry -ジョブを期限切れにして後で自動キューに入れるように設定できます(TTR-実行時間)。

Beanstalkdのユースケースの例


Banstalkdのいくつかの典型的なユースケースは次のとおりです。

  • リソースを大量に消費する手順をその場で実行することを強制されるのではなく、Webサーバーが要求に迅速に応答できるようにする

  • 特定の間隔で特定のジョブを実行する(つまり、 ウェブをクロールする)

  • 処理のために複数のワーカーにジョブを配布する

  • オフラインクライアントを許可する(例: 切断されたユーザー)ワーカーを介してデータを完全に失うのではなく、後でデータをフェッチします

  • バックエンドシステムへの完全非同期機能の導入

  • タスクの順序付けと優先順位付け

  • 異なるワーカー間でアプリケーションの負荷を分散する

  • アプリケーションの信頼性と稼働時間を大幅に向上

  • CPUを集中的に使用するジョブ(ビデオ、画像など)を後で処理する

  • リストに電子メールを送信する

  • もっと。

Beanstalkd要素


ほとんどのアプリケーションと同様に、Beanstalkdには、そのパーツを説明するための独自の専門用語が付属しています。

チューブ/キュー


Beanstalkd Tubesは、他のメッセージングアプリケーションからキューに変換されます。 それらは、ジョブ(またはメッセージ)が消費者に転送される場所(つまり、 労働者)。

ジョブ/メッセージ


Beanstalkdは「ワークキュー」であるため、チューブを介して転送されるものはジョブと呼ばれます。これは送信されるメッセージに似ています。

プロデューサー/センダー


プロデューサーは、Advanced Message Queuing Protocolの定義と同様に、ジョブ(またはメッセージ)を作成して送信するアプリケーションです。 それらは消費者によって使用されます。

消費者/受信者


レシーバーは、処理のためにプロデューサーによって作成されたチューブからジョブを取得するスタックのさまざまなアプリケーションです。

Ubuntu13へのBeanstalkdのインストール


パッケージマネージャーaptitudeからBeanstalkdを簡単に入手して開始することができます。 ただし、いくつかのコマンドで、ダウンロードしてソースからインストールすることもできます。

注:さまざまな理由で、新しく作成されたドロップレットに対してインストールを実行し、ここにリストされているアクションを実行します。 クライアントに積極的にサービスを提供していて、システムを変更した可能性がある場合は、動作を中断したり、問題が発生したりしないように、新しいシステムで次の手順を試すことを強くお勧めします。

aptitudeを使用したインストール


次のコマンドを実行して、Beanstalkdをダウンロードしてインストールします。

aptitude install -y beanstalkd

nanoを使用してデフォルト構成を編集し、システムの起動時に起動します。

nano /etc/default/beanstalkd

ファイルを開いた後、一番下までスクロールして、#START=yesという行を見つけます。 次のように変更します。

START=yes

CTRL + Xを押し、Yで確定して保存して終了します。

アプリケーションの使用を開始するには、次のセクションにスキップするか、ソースからBeanstalkdをインストールする方法を確認してください。

ソースからのインストール


ソースからのインストールプロセスのための重要なツールであるGitが必要になります。

以下を実行して、Gitをドロップレットに追加します。

aptitude install -y git

重要な開発ツールパッケージをダウンロードします。

aptitude install -y build-essential

Gitを使用して、公式リポジトリのクローンを作成(ダウンロード)しましょう。

git clone https://github.com/kr/beanstalkd

ダウンロードしたディレクトリを入力します。

cd beanstalkd

ソースからアプリケーションをビルドします。

make

インストール:

make install

Beanstalkdの使用


インストールすると、Beanstalkdサーバーでの作業を開始できます。 デーモンを実行するためのオプションは次のとおりです。

 -b DIR   wal directory
 -f MS    fsync at most once every MS milliseconds (use -f0 for "always fsync")
 -F       never fsync (default)
 -l ADDR  listen on address (default is 0.0.0.0)
 -p PORT  listen on port (default is 11300)
 -u USER  become user and group
 -z BYTES set the maximum job size in bytes (default is 65535)
 -s BYTES set the size of each wal file (default is 10485760)
            (will be rounded up to a multiple of 512 bytes)
 -c       compact the binlog (default)
 -n       do not compact the binlog
 -v       show version information
 -V       increase verbosity
 -h       show this help

使用例:


# Usage: beanstalkd -l [ip address] -p [port #]
# For local only access:
beanstalkd -l 127.0.0.1 -p 11301 &

サービスの管理:


パッケージマネージャーを介してインストールされた場合(つまり aptitude)、Beanstalkdデーモンをサービスとして管理できるようになります。

# To start the service:
service beanstalkd start

# To stop the service:
service beanstalkd stop

# To restart the service:
service beanstalkd restart
    
# To check the status:
service beanstalkd status

Beanstalkdクライアントライブラリの取得


Beanstalkdには、さまざまなアプリケーション展開で動作するサポートクライアントライブラリの長いリストが付属しています。 このサポート言語のリスト-およびフレームワーク-には次のものが含まれます。

  • Python

  • Django

  • 行け

  • Java

  • Node.js

  • Perl

  • PHP

  • ルビー

  • もっと。

お気に入りのサポート言語とインストール手順の完全なリストについては、GithubforBeanstalkdのクライアントライブラリページを確認してください。

Beanstalkdでの作業


このセクションでは、記事を完了する前に、Beanstalkdの基本的な使用法について簡単に説明します。 この例では、Python言語とBeanstaldのPythonバインディング( beanstalkc)を使用します。

Beanstalkcをインストールするには、次のコマンドを実行します。

pip install pyyaml
pip install beanstalkc

基本操作


Beanstalkdでの作業を考えているすべてのPythonファイルで、beanstalkcをインポートして接続する必要があります。

import beanstalkc

# Connection
beanstalk = beanstalkc.Connection(host='localhost', port=11301)

ジョブをエンキューするには:

beanstalk.put('job_one')

仕事を受け取るには:

job = beanstalk.reserve()
# job.body == 'job_one'

処理後にジョブを削除するには:

job.delete()

特定のチューブを使用するには(つまり キュー/リスト):

beanstalk.use('tube_a')

利用可能なすべてのチューブを一覧表示するには:

beanstalk.tubes()
# ['default', 'tube_a']

最後の例(nano btc_ex.py):

import beanstalkc

# Connect
beanstalk = beanstalkc.Connection(host='localhost', port=11301)

# See all tubes:
beanstalk.tubes()

# Switch to the default (tube):
beanstalk.use('default')

# To enqueue a job:
beanstalk.put('job_one')

# To receive a job:
job = beanstalk.reserve()

# Work with the job:
print job.body

# Delete the job: 
job.delete()

CTRL + Xを押し、Yで確定して保存して終了します。

上記のスクリプトを実行すると、ジョブの本文が印刷されていることがわかります。

python btc_ex.py
# job_one

Beanstalkd(およびBeanstalkc)の操作の詳細については、はじめにチュートリアルをご覧ください。

投稿者: https ://twitter.com/ostezer