面接官「えーではまず『マイクロサービス』とはなにか、あなたなりの言葉で説明してみてください」
ぼく「アッアッ、マイクロ、アッ、マイクロサービスアッアッ、マイクロサーッアッアッ」
※ ラッパーではなくテンパっている様子です
手に汗握る展開ですね。
マイクロサービスとはなにか。こう聞かれたときに
ぼく「はい、私の考えるマイクロサービスとは(ペラペラペラペラ)」
こうなりたくはないですか!?!?
というわけで今回からしばらく マイクロサービス is ナニ?? を勉強していきます!
はじめに
なにはともあれまずは Google 先生に聞いてみましょう。
「マイクロサービス 勉強」で検索してみると、お、1ページ目から良さそうなサイトが見つかりました!!
ぼく「アッアッ、カックさアッ、ブログメンタッアッ、今週のノルマアッアッ」
閑話休題。
我が師、カックさんが書かれた上記の記事では、Sock Shop という靴下ECサイトの構築を通じてマイクロサービスを体験できるとのことです。
しかも Docker Compose を使ってローカルで動かすことも可能!素晴らしいですね!
藍より青く
ですが今回はその Sock Shop よりちょっと良さそうなサンプルアプリケーションを発見しましたので、あえてそちらの紹介をしたいと思います。
その名も Hipster Shop。
ちなみに weblio の解説によると Hipster とは以下のような意味だそうです。
通(つう)、ジャズ通、ジャズファン、流行の先端を行く人、新しがり屋
要はイケイケな商品を扱うシャレオツECサイトですね!
コチラから実際に動いているサイトにアクセスして動作を確認することも可能です。
トップページのスクショをみても、ぼくには全然興味のない商品が羅列されています。
しかもサービス連携の図がもうなんかパッと見ただけでブラウザバックしたくなるような仕上がりになっていますね。
逃げたい。
こんなときぼくの脳裏では弊チームの Mng である @katsuhisa__ が顔をのぞかせます。
――まずは、スタディストさんの会社紹介をしていただけますでしょうか? 北野 まず社名の由来から説明いたします。「スタディ=学習する、勉強する」という意味の言葉と、 人を表す接尾辞の「イスト」。それを繋げて、「スタディスト」という社名になりました。
…… 勉強をすることから逃げて、「私はスタディストの社員です」などとどうして言えようか!!!(自らの首をギュッ♥)
というわけでまずはなぜ「こちらのほうが良さそうかも?」と思ったのかをご紹介〜
ひとことでいうと、マイクロサービスまわりのエコシステムが充実してそうだなという印象を受けたのでした!
Hipster Shop の特徴
README から本サービスの特徴を抜粋し、自分なりに噛み砕いて説明します。
- Kubernetes のうえで動かすことができるらしい
- gRPC (+ Protocol Buffers) を使用し、スキーマ定義をしているらしい
- Istio を使用し、サービスメッシュを実現しているらしい
- OpenCensus Tracing を使用し、分散トレーシングをしているらしい
- Stackdriver APM を使用し、リクエスト / レスポンス の性能監視もできるらしい
- Skaffold を使用し、コマンド一発で Kubernetes クラスタのデプロイが可能らしい
- Locust を使用し、実際のユーザアクセスを模した負荷試験を実施できるらしい
よくわからない!!逃げたい!!!
でも、よくわからないけどなんかすごそうじゃないですか!?!?
とはいえこれは絶対今回の記事だけじゃ紹介しきれないやーつ!!!
と、いうわけで今回は「とりあえずローカルで動かす」までの手順をご紹介します!
前提
Hipster Shop の動作環境としては Docker for Desktop 上の Kubernetes クラスタか、GKE 上で動かすという二択があるようです。
今回はより手軽にできるほうをということで Docker for Mac + Kubernetes 上で検証しました。その手順の説明となっております。また Docker for Mac は導入済みとします。
1. 必要なコマンドのインストール
以下ふたつのコマンドをインストールしておく必要があります。
MacOS であれば、brew
コマンドで一発です。
なんの説明も要らないですね。ステキな世の中ですよ、ほんとにさ。
2. Docker for Mac で Kubernetes を有効化
Docker for Mac の設定画面から Kubernetes タブを参照し、Enable にします。
そして Advanced タブからDocker Engiine に割り当てる CPUs を3 以上に、メモリを 6.0 GiB 以上に設定します(ぼくはとりあえず全振りしてます)
最後に、Disk タブからディスク容量を32GB 以上に設定します。
3. いざ、インストール!
git clone https://github.com/GoogleCloudPlatform/microservices-demo.git
cd microservices-demo
さてそして skaffold run
というコマンドを実行!
すると、こんな感じで各コンテナのビルドが始まります。
❯ skaffold runGenerating tags...- emailservice -> emailservice:v0.1.2-4-ga95997b- productcatalogservice -> productcatalogservice:v0.1.2-4-ga95997b- recommendationservice -> recommendationservice:v0.1.2-4-ga95997b- shippingservice -> shippingservice:v0.1.2-4-ga95997b- checkoutservice -> checkoutservice:v0.1.2-4-ga95997b- paymentservice -> paymentservice:v0.1.2-4-ga95997b- currencyservice -> currencyservice:v0.1.2-4-ga95997b- cartservice -> cartservice:v0.1.2-4-ga95997b- frontend -> frontend:v0.1.2-4-ga95997b- loadgenerator -> loadgenerator:v0.1.2-4-ga95997b- adservice -> adservice:v0.1.2-4-ga95997bTags generated in 56.060822msChecking cache...- emailservice: Not found. Building- productcatalogservice: Not found. Building- recommendationservice: Not found. Building- shippingservice: Not found. Building- checkoutservice: Not found. Building- paymentservice: Not found. Building- currencyservice: Not found. Building- cartservice: Not found. Building- frontend: Not found. Building- loadgenerator: Not found. Building- adservice: Not found. BuildingCache check complete in 21.739171717sStarting build...Found [docker-desktop] context, using local docker daemon.Building [emailservice]...Sending build context to Docker daemon 101.9kBStep 1/14 : FROM python:3.7-slim as base::
emailservice -> emailservice:v0.1.2-4-ga95997bproductcatalogservice -> productcatalogservice:v0.1.2-4-ga95997brecommendationservice -> recommendationservice:v0.1.2-4-ga95997bshippingservice -> shippingservice:v0.1.2-4-ga95997bcheckoutservice -> checkoutservice:v0.1.2-4-ga95997bpaymentservice -> paymentservice:v0.1.2-4-ga95997bcurrencyservice -> currencyservice:v0.1.2-4-ga95997bcartservice -> cartservice:v0.1.2-4-ga95997bfrontend -> frontend:v0.1.2-4-ga95997bloadgenerator -> loadgenerator:v0.1.2-4-ga95997badservice -> adservice:v0.1.2-4-ga95997b
抜粋すると、全部で 11 個のマイクロサービスから構成されるWebアプリなんですね!
脱線脱線〜
20 〜 30分ほどでインストールが終わります。
その間に以下の記事でも読んでお待ち下さい ☕
記事中から一部を抜粋します。
: : いや、それは実に簡単だ。Kubernetesのクラスタをセットアップすればいい。 クラスタが必要なのか? Kubernetesクラスタだ。君の全てのサービスのデプロイを管理してくれる。 僕は1個しかサービスを持ってないよ。 どういう意味だ?アプリがあるんだろ?それなら少なくとも8個から12個のサービスがあるはずだ。 なんだって?いや、1個だけだ。サービスがどんな意味であれ、1個だけだ。 ノー。マイクロサービスについて調べてみろ。未来だ。今はみんなそうやっている。 君のモノリシックなアプリを12個のマイクロサービスに分割しろ。1個のジョブにつき1個のサービスだ。 それはやりすぎじゃないか。 それが信頼性を高める唯一の方法だ。認証サービスがダウンしたとしよう… : :
ぼくは数年前にこの記事を読んだとき、完全なるネタ記事かと思っていました。
が、しかし。もう一度言います。
実際に Hipster Shop は 11 個のマイクロサービスから構成されるWebアプリなのです!
原題は "It's The Future" という2015年に書かれた記事ですが、ぼくたちはいま、この未来に立っているわけです!Amazing!!!
You've made it!
さて、そうこうしているうちにインストールは終わったでしょうか?
以下のコマンドを実行してみて、 12個の pod
が稼働していればOKです!
❯ kubectl get podsNAME READY STATUS RESTARTS AGEadservice-56d6b86b69-ps58x 1/1 Running 0 12mcartservice-5b769fbcd-vghph 1/1 Running 0 12mcheckoutservice-76cf7d66c4-9cn26 1/1 Running 0 12mcurrencyservice-676c45cbd8-sbndb 1/1 Running 0 12memailservice-554cd4f969-lt5hz 1/1 Running 0 12mfrontend-b8454cdfd-s7whb 1/1 Running 0 12mloadgenerator-545785998f-b78cx 1/1 Running 0 12mpaymentservice-7945c44864-8jtsb 1/1 Running 0 12mproductcatalogservice-dc8b5785-2grmp 1/1 Running 0 12mrecommendationservice-b64fdd8c5-7gpw8 1/1 Running 0 12mredis-cart-5f5479d755-ncsfn 1/1 Running 0 12mshippingservice-64c4994bdd-xhlw9 1/1 Running 0 12m
http://localhost:80 にアクセスしてみましょう。
以下のようなトップページが表示されていれば構築完了!です!
(実は上の画像には一箇所だけおかしなところがあります。ど〜こだ??)
おわりに
というわけで、今回は Hipster Shop をとりあえず動かす!ところまでやってみました。
次回から一歩ずつ遊びつつ、マイクロサービスや Kubernetes の中身を学んでいきましょう!
なにはなくともモニタリング ということで、次回は監視設定の導入を行う予定です!
ちなみに Hipster Shop を動かし続けていると、ぼくの MacBook Pro ちゃんはホットプレートと化します。一通り遊んだら skaffold delete
コマンドで終了させておきましょう。
最後に、間違い探しの正解はこの子でした〜
いまなら 251,011.05円 と大変お買い得!!
というわけで(?)次回もおたのしみに、やぁん♥