Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Envoy.なんか / Kyoto.なんか #5
Search
cohalz
August 24, 2019
Programming
1
230
Envoy.なんか / Kyoto.なんか #5
Kyoto.なんか #5
https://kyoto-nanka.connpass.com/event/141982/
の発表資料です
cohalz
August 24, 2019
Tweet
Share
More Decks by cohalz
See All by cohalz
toittaにOpenTelemetryを導入した話 / Mackerel APM リリースパーティ
cohalz
1
630
はてなにおけるfujiwara-wareの活用やecspressoのCI/CD構成 / Fujiwara Tech Conference 2025
cohalz
3
6.9k
はてなのSRE組織2024 / Road to SRE NEXT@福岡
cohalz
2
1.9k
SREのキャリア、 あるいは生態 / #ya8
cohalz
11
1.7k
カンファレンスのボランティアスタッフって何やるの? / DAIMYO Meetup #4
cohalz
0
170
小さなものでも Step Functions / Serverless Meetup Fukuoka Re:boot
cohalz
0
210
ECSのCI/CD改善と標準化の取り組み / JAWS FESTA 2023 in Kyushu
cohalz
8
7.3k
ecspressoへの貢献を振り返る / JAWS-UG コンテナ支部 #24 ecspresso MeetUp
cohalz
1
7.4k
はてなフォトライフをECSに移行した話 / Hatena Engineer Seminar #20
cohalz
1
19k
Other Decks in Programming
See All in Programming
Azure AI Foundryではじめてのマルチエージェントワークフロー
seosoft
0
190
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
1k
AIと”コードの評価関数”を共有する / Share the "code evaluation function" with AI
euglena1215
1
180
The Modern View Layer Rails Deserves: A Vision For 2025 And Beyond @ RailsConf 2025, Philadelphia, PA
marcoroth
2
670
『自分のデータだけ見せたい!』を叶える──Laravel × Casbin で複雑権限をスッキリ解きほぐす 25 分
akitotsukahara
2
650
Git Sync を超える!OSS で実現する CDK Pull 型デプロイ / Deploying CDK with PipeCD in Pull-style
tkikuc
4
240
ふつうの技術スタックでアート作品を作ってみる
akira888
1
1.1k
NEWT Backend Evolution
xpromx
1
110
PostgreSQLのRow Level SecurityをPHPのORMで扱う Eloquent vs Doctrine #phpcon #track2
77web
2
560
たった 1 枚の PHP ファイルで実装する MCP サーバ / MCP Server with Vanilla PHP
okashoi
1
280
新メンバーも今日から大活躍!SREが支えるスケールし続ける組織のオンボーディング
honmarkhunt
5
8.2k
PipeCDのプラグイン化で目指すところ
warashi
1
290
Featured
See All Featured
Docker and Python
trallard
45
3.5k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Making Projects Easy
brettharned
116
6.3k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.3k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
700
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Practical Orchestrator
shlominoach
189
11k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Transcript
Envoy.なんか Kyoto.なんか #5 id:cohalz
None
自己紹介 ・id:cohalz / @cohalz ・はてなインターン 2017 ・はてな SRE (~ 2018)
・最近異動してブログチームへ ・主戦場: AWS
Q. Envoyって知ってますか?
A. HAProxyみたいな便利なやつです
Envoy ・L4/L7プロキシ ・一通りのプロキシ・ロードバランサ機能 ・Circuit Breaker / Fault Injection ・API経由による設定更新 ・ログ・メトリック・トレーシング連携
Envoy 用語集 ・Cluster ・接続先をまとめた単位、Circuit Breakerはここに書く ・ Listener ・待受けポートとかアクセスログとかFault Injectionはここに書く ・Router
・ルーティング情報とかリトライ・タイムアウトはここに書く
Circuit Breaker ・閾値よりも多くなったら接続せず即エラーを返す機能 ・requestやpending, retryの数で設定できる ・目的としては、 ・レイテンシの悪化(カスケード障害)を防ぐ ・接続先の負荷軽減
Circuit Breaker ・遮断時は超過した分だけエラーを返す ・つまりは最大値の設定 ・遮断したらすべてがエラーになるわけではない
Fault Injection ・障害時の挙動を再現できる機能 ・レスポンスを遅延 ・503など特定のステータスコードを返す ・確率やヘッダベースで条件を決める
Fault Injection ・思ってた以上に便利 ・書いたエラー処理が適切にハンドリングできてるかわかる ・ヘッダベースで注入は色々可能性がありそう
メトリック ・統計情報を出すエンドポイントが用意されている ・レスポンス時間等のヒストグラム ・Circuit BreakerやFault Injection ・種類が多すぎて困るレベルにある
Mackerelプラグイン ・社内でプロトタイプ作成中、そのうち公開されるかも
API経由での更新 ・Envoyサーバに設定を持たずAPI経由で情報を取得できる ・xDS APIと呼ばれREST・gRPCで更新できる ・エンドポイントやルーティングといった単位
API経由での更新方法 ・適切なレスポンスを返せるAPIサーバの実装が必要 ・公式のライブラリはあるが手間
サーバを立てずに外部から更新したい ・設定ファイル入れ替えるためにコンテナ入れ替えは重い ・Fargateとか使ってるとなおさら時間かかる ・コンテナ入れ替えず外部から更新できないか?
サーバを立てずに外部から更新したい ・ローカルファイル経由で読み込む方法を使う ・実は指定したファイルの更新を検知して自動リロードする https://medium.com/grensesnittet/file-based-dynamic-configuration-of-routes-in-envoy-proxy-6234dae968d2
S3に置いたファイルをマスターにできないか ・ファイル置き場といったらS3 ・毎分s3 syncするだけのDockerイメージを作っていた
S3に置いたファイルをマスターに ・これをサイドカーにしてEnvoyとボリュームを共有 ・毎分S3 から設定をpollingできるEnvoyサーバの完成!! ・Pros: コンテナ入れ替えなくとも簡単に更新できる ・Cons: 更新まで最大一分の遅延がある
Envoyのハマりどころ
X-Rayと一緒に使うとき ・X-Rayのサービスマップはホストヘッダを見ている ・Envoyのエンドポイントでまとめられてしまう
X-Rayと一緒に使うとき ・AppにEnvoy用に接続先書き換えるロジックを入れて解決 ・EnvoyのX-Ray連携早く入って欲しい
設定のバリデーション ・ファイル分割してるとバリデーション難しい ・ミスっても設定更新されないだけで落ちない ・これをCIで検知 ・ログレベルいじって数秒だけ起動させファイルに書く ・そのファイルが作られてたらアウトに ・一応バリデーションツールはあるが動かせてない
timeout周り ・いろんなtimeoutがあって混乱する ・connect_timeout (Cluster) ・timeout (Router) ・per_try_timeout (Router) ・request_timeout (Listener)
・レスポンスを見てるのはtimeoutとper_try_timeout
Fault Injection・timeout ・遅延注入しつつ timeout を調整するの難しい ・response timeout は遅延とは独立 ・ログや統計から適切な timeout
を設定したほうがいい
Retry・Circuit Breaker ・timeout を短め・retry を多め ・何回も接続しようとしてDoSになってしまう ・Circuit Breakerの閾値が低め ・リソース余ってるのにエラーになる ・でも閾値緩めると設定が意味なくなる
・いい感じにやっていくしかない
その他 ・MySQLプロキシやHTTP_PROXY相当の機能もある ・まだ安定版ではないので注意 ・公式ブログからのドキュメントがリンク切れしててだるい ・あとApp Meshは機能がなさすぎる
HAProxy 2.0 ・Envoyにある機能どんどん取り込んでいて気になっている https://www.haproxy.com/blog/haproxy-2-0-and-beyond/
感想 ・マイクロサービスやっていくために便利に使える ・アプリから通信周りの知識を剥がせるだけでも便利 ・メトリック可視化しないと設定むずすぎる!! ・導入知見が全然流れてこなくて困る