@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Consul のチュートリアルをやった

Introduction to Consul | Consul - HashiCorp Learn

概要を説明する動画が分かりやすかった。ハンズオンは、やっても別に学びが深くなった感じはしなかった。

大事なコンセプトまとめ

Intro to Consul | Consul by HashiCorp

モノリシックなアプリケーションはデプロイに苦労する。そこでアプリケーションを分割して相互通信させるマイクロサービスアーキテクチャが生まれた。しかし多数のマイクロサービスを協調して動作させるにはサービス検出やサービス間の認証などの新たな問題が出てきた。Consul はそれらの問題を解決する。

Service Discovery

各サービスを Consul に登録し、他のサービスは Consul を通じて他サービスへの通信方法を知る。これによって、各サービスが通信先サービスの IP アドレスやポート番号をあらかじめ設定として持つ必要がなくなる。

Health Checking

Consul は各サービスの死活監視をして、生きてるサービスの接続情報を「通信先サービス」として返却する。これによって、サービスの一時的なダウンがシステム全体のダウンにつながるような依存を減らせる。

Secure Service Communication (and Service Mesh)

Consul の管理下にあるサービスは Sidecar 方式でプロキシサーバを持つ。サービス間の通信はプロキシサーバが中継する。プロキシサーバは Consul が発行する TLS 証明書を使う。これによって、サービス間の通信は暗号化され、認証される。

さらに、サービス間の通信可否を定義できる。これによって、適切なアクセス制御ができる(例: mysql サービスへの通信は、 rails サービスからは許可するが nginx サービスからは許可しない)

KV Store

Consul は汎用 Key Value Store も提供する。

(Consul 自身が使ってそうだし、使えたら便利なこともあるとは思うが、あえて提供する意味がわからなかった)

Multi Datacenter

Consul は複数データセンターで動作する。これによって、単一障害点になりやすい(そして役割が役割なだけにダウンすると致命的な)Consul 自身の高可用性を担保する。

Emacs Lisp: 関数のトレースを出力する

edebug-trace に nil 以外の値をセットする。

Edebug Options (GNU Emacs Lisp Reference Manual)

(setq edebug-trace t) ;; <- これを評価する (C-M-x or カーソルを末尾に置いて C-x C-e)

(defun fact (n)
  (if (zerop n) 1
    (* n (fact (1- n))))) ;; <- edebug を有効にして評価する (C-u C-M-x)

(fact 5) ;; <- 評価する (C-M-x or カーソルを末尾に置いて C-x C-e

*edebug-trace* というバッファが開き、 edebug によるデバッガモードが開始する。c を押してとりあえず関数を実行させて(== トレースをすべて展開出力させて)からじっくり眺める。

{ fact args: (5)
:{ fact args: (4)
::{ fact args: (3)
:::{ fact args: (2)
::::{ fact args: (1)
:::::{ fact args: (0)
:::::} fact result: 1
::::} fact result: 1
:::} fact result: 2
::} fact result: 6
:} fact result: 24
} fact result: 120