Carpe Diem

備忘録

マイクロサービスでのSidecarパターンとは何か

概要

マイクロサービス化したシステムを運用する上で出てくる課題を解決するパターンとしてService Meshというものがあります。
このService Meshというものは以下の2つのコンポーネントで構成されます。

  • Data plane
  • Control plane
    • Data planeの管理

このData planeのproxyはSidecarパターンという形で構築します。
今回はそれが生まれた背景などをEnvoyを用いて説明していこうと思います。

Sidecarパターンは何が嬉しいの?

そもそもどういった問題背景から生まれたのかを考えます。

モノリス

最初はシンプルな機能であったため、モノリシックなAPIで十分でした。 f:id:quoll00:20180701011333p:plain

しかし機能が増え、チーム人数も増えたためドメイン毎に機能を分けてマイクロサービス化する事を考えます。
また通信のレイテンシを下げるため、gRPCの導入も考えます。

続きを読む

EnvoyのFrontProxyを用意してgRPCの負荷分散をする

概要

gRPCはHTTP/2プロトコルをベースとしたRPCです。
なのでコネクションが永続化され、その中で複数のストリームがリクエスト・レスポンスを取り扱うため負荷分散に注意する必要があります。
今回はEnvoyというgRPCに向いたproxyを使うことでそれを実現します。

環境

  • envoy 1.7.0

成果物

今回のソースはこちらにあります。

github.com

続きを読む

curlのresolvオプションで名前解決

背景

ドメイン移管の関係でCloudFrontのDNSレコードをDNSimpleからRoute53へ移そうとしていたのですが、完全な移管手続前にRoute53側のレコードでエッジサーバにちゃんとアクセスできるか確認する必要がありました。
digのNS指定を使えばエッジサーバのIPは確認できますが、CloudFrontを直IP指定でアクセスしても403が返るだけです。
そこでcurlresolvオプションを使うことで、IPを指定しつつドメイン名でアクセスするようにしました。

環境

手順

エッジサーバのIPを取得

まずCloudFrontのエッジサーバを見つけます。

続きを読む

GoでGraceful Shutdown

概要

以前はGraceful shutdownをするために以下のようなライブラリを使用していました。

github.com

しかしながらGo 1.8 からGraceful Shutdown機能が標準で提供されるようになりました。
今回はその導入方法を紹介します。

環境

続きを読む

Consulを支える技術

概要

ConsulではSWIMやRaftといった技術を使っています。
今回はそれらを説明します。

環境

  • Consul 1.1.0

SWIM

Gossip Protocol

SWIMはGossip Protocolの一種で、主に

  • クラスタのメンバ管理機能
  • メンバの障害検出機能
  • イベント伝播

で使われています。

続きを読む

Dockerの埋め込みDNSサーバを使ったService Discovery

概要

Docker 1.10からユーザ定義のネットワークでは内蔵DNSサーバが用意され、名前解決ができるということを以下の記事で述べました。

christina04.hatenablog.com

実は単に名前解決ができるだけでなく、Service Discoveryとしても機能するのでその紹介をします。

環境

  • Docker 18.03.1-ce
  • docker-compose 1.21.1
続きを読む