DiaryExceptionスマートフォン用の表示で見るDiaryExceptionこの広告は、90日以上更新していないブログに表示しています。APIを持っている(0.9.6にはない)。HTTPクライアント(PerlのHTTPクライアントライブラリでもcurlでもWebブラウザでも)を用いて、DRPCサーバに処理リクエストを投げ、トポロジの処理結果をレスポンスとして受け取ることができる。Callの略だが、Stormのトポロジの入力を外部から受け付け、トポロジを通して得られた処理結果を外部に返すためのものである。Stormのトポロジは、入力データを流す始点となるSpoutと、データを処理するBoltに分けられるが、DRPCアプリケーションの場合、Spoutは外部からの入力データを受け付け次のBoltに流し、Boltはデータに処理を行いその結果を次のBoltに渡し、最後のBoltが最終的な処理結果のデータを外部に返す。させたい部分の並列数を増やす指定をすることで、実行するスレッド(あるいはプロセス、マシン)を増やしたり、逆に処理を分散させたくない部分の並列数を1にしたりもできる。クラスタを構成するマシンの台数を増やすことで、アプリケーション内の並列分散処理の性能を高めることができる。マシンを増やした際の作業は、Stormの仕組みのおかげで、非常に簡単で、アプリケーションに変更は必要ない。APIを用いることで、このStormの並列分散処理の仕組みをそのまま、HTTPリクエストに対する処理に適用することができる。このメリットのイメージ図を551の肉まん風に書いてみた。マイクロサービスを作りやすい1つのStormクラスタに、複数のDRPCアプリケーションをデプロイすることができる。Netflixなどがよく言っている、マイクロサービスのアーキテクチャ実装のために、この仕組みは適している。1つのDRPCアプリケーションにリクエストに対する重厚長大な処理をさせるよりも、複数のDRPCアプリケーションを1つのクラスタの中に並べ、それぞれのDRPCアプリケーションに小さな処理を担当させた方が、より変化に対応しやすい環境となる。スケールアウトしやすかったり、処理のある一部分の変更が容易になる。http://DRPCサーバ名:DPRCのHTTPポート番号/drpc/関数名[/]、リクエストボディに引数となっていることがわかる。引数を省略した場合、空文字が関数に渡される。GETとPOSTの両APIに実行時の違いは無さそうなので、クライアントの都合でどちらを使うかを選択すれば良いようだ。Stormクラスタのセットアップ最低限の設定として、ZookeeperとNimbus、DRPCサーバのアドレスを指定する(すべてlocalhost)。それを使ってコンポーネントを起動する。DRPCアプリケーションのデプロイDRPCストリームを含むStormトポロジを、Stormクラスタにデプロイする。今回はapache-storm-0.10.0.tar.gzに同梱されている、storm-starterから2つ拝借する。APIにアクセスTridentWordCountは時間が経つにつれストリームに流れた文の量が増え、単語カウントが大きくなっていく。適当なタイミングでアクセスしてみた。対象関数はwordsで、引数として2つ「the」と「eat」をそれぞれGETとPOSTで渡してみた。http://localhost:3774/drpc/words/[[536]]DRPCクライアントを用いた時と同様の返り値であるようだ。次に、BasicDRPCTopologyについて。対象関数はexclamationで、引数として「eat」と「Hello」をそれぞれGETとPOSTで渡してみた。http://localhost:3774/drpc/exclamationHello!こちらも想定通り。ちなみに、空白を含む文字列などを引数に渡す際にはURLエンコードして渡してやればStormの方でデコードしてくれて、結果もデコードされた文字列で返される。moon!DRPCはStormの機能の中でも割とマイナな方だと思っていたが、かなり実用的な進化をしていて嬉しい。設定項目があることから、セキュアな環境もサポートしているようだ。用のDockerfileを作ったリセットピンをIOピンとして使うESP8266であれこれする本を書いた月別アーカイブはてなブログをはじめよう!LaclefYoshiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。