goでマイクロサービスを作る:その1

Posted on 2018年11月12日 Under Go 0 Comments
Pocket
LINEで送る

こんにちは、有安です。今回はGoについてです。
この前Goの本を読んでアプリケーションを作ったのですが、自分の理解を深めるためにも内容をまとめたいと思います。
作ったアプリの内容ですが、一言で言うと「全世界のTwitterの投稿で、ある単語がどのくらい呟かれているか」を可視化するアプリです。twitterで特定の単語を呟くことで投票が出来るようにしたいんだとか。
まずは完成形を見てみます。

11111111.mov

単語のコレクションに名前をつけてDBに保存し、単語ごとのTweet数をリアルタイムで計測し、可視化出来ます。

いくつかの小さなアプリケーションを組み合わせてこの機能を実現させていくのですが、今回は全体のアーキテクチャについての説明までにしておきたいと思います。
外部のサービスも含め、全体の設計に出てくる登場人物を以下に挙げます。
【Twitter】
SNS。TwitterのストリーミングAPIを利用すれば、リアルタイムでツイートを取得することが出来る。
【twittervotes】
これから作成するアプリ。ツイートを読み込み、メッセージキューにプッシュする。必要なツイートのデータを取得し、内容をもとに投票対象を判別してNSQに書き込む。
【NSQ】
オープンソースのリアルタイム分散メッセージングプラットフォーム。
【counter】
こちらもこれから作るプログラム。メッセージキュー上で投票結果を監視し、受け取ったデータを定期的にMongoDBに格納する(MongoDB使います)。NSQから受け取ったツイートのデータをメモリ上で集計し、定期的にDBのデータも更新する。
【web】
これも作るやつ。上のgifのやつ。リアルタイムのツイートの結果を視覚化するwebアプリ。あと探索したい単語のコレクションを作成も出来る。

こんな感じです!作るアプリケーションはtwittervotesとcounterとwebの3つです。
Twitterでみんなが呟く -> twittervotesで特定の文字列が含まれているつぶやきを検知、NSQにプッシュ -> NSQでストックする -> counterがNSQを監視、カウントしてMongoDBにインサートという処理の流れがあります。
また、それと並行してwebがMongoDBを監視してデータを可視化します。
次回の記事ではまずはtwittervotesを作ります。
主だった処理としては
1, MongoDBにアクセスし、検知する文字列(上のgifでいうhappyやsad)を取得。
2, TwitterAPIを利用して文字列を含んだTweetを検知。
3, 検知した情報をNSQにプッシュ。
といった感じですここまでがtwittervotesの役割。
NSQやgoでNSQ操作するためのドライバー、MongoDB、MongoDBのドライバーなどが入っていない場合はインストールしておく必要があります。ということで今回はここまでにして、次回からGoでマイクロサービス作っていきましょう!ではでは!

Pocket
LINEで送る