Upgrade to Pro — share decks privately, control downloads, hide ads and more …

etcdについて

 etcdについて

2021.05.12 ANDPAD TechLive #16 Go初心者が業務、勉強会を通じて得た成長の話

ANDPAD inc

May 24, 2021
Tweet

More Decks by ANDPAD inc

Other Decks in Programming

Transcript

  1. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 Go初心者が社内勉強会を通じてkubernetesの内部コンポーネントを読み解いた話 株式会社 アンドパッド 開発部 横浜
  2. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 自己紹介 yokohama @hama45_hama • 名前はyokohamaですが出身は鳥取県です • 趣味は料理 • ITコンサル、Webサービス会社を経て 2020年5月アンドパッド入社 • 前職では人事部で人事データ分析用のデータ 基盤開発、人事データ活用推進などを担当 • アンドパッドでは施工管理機能のサーバーサ イド(Rails)を担当
  3. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 今日話すこと • アンドパッド社内の勉強会について • Kubernetesとetcdについて • どういう実装になっているのか • どうやって読み解いていったのか • 勉強会をやるメリット • まとめ
  4. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 社内の勉強会 • 2020年4月からリモートワークに突入 • => 良い面としてオンラインなので人が集まることの障壁が下がった • この状況を活用して勉強会をやろうという運動が活発になった 学習を歯磨きのように習慣 化していこう。 名付けて「歯磨きのような 10分勉強会」 CDO(Chief Development Officer)
  5. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 社内の勉強会 • Vue.js勉強会 • TypeScript勉強会 • Flutter勉強会 • 機械学習勉強会 • マイクロサービス勉強会 • プログラミング言語勉強会 • アルゴリズム勉強会 • gopher会 • 「Design It!」読書会 • WebAPIの設計読書会 • ... 技術系 ドメイン知識系 • ANDPAD機能について語り尽くす会 • 建設業界勉強会 • ... ※すでに終了したものも含む ※たぶんもっとたくさんある 自分が参加して いるもの
  6. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 勉強会の内容の紹介① 機械学習勉強会 • データ分析本のハンズオン • 自由研究(東京23区の賃貸物件情報のスクレイピング&賃料予測) • 筑波大学の機械学習講義視聴 • Kaggleの機械学習講座(Courses) • TensorFlowのチュートリアル • PyTorchのチュートリアル • データ分析コンペ ◦ 画像認識(道路部分の判定、レモンの等級判定) ◦ 時系列データ(仮想通貨) おすすめ 挑戦中 おすすめ
  7. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 勉強会の内容の紹介② マイクロサービス勉強会 • Kubernetes本の輪読 • マイクロサービス本の輪読 • 公式サイトの輪読(k8s、Istio、...) • ソースコードリーディング(k8s、linkerd、etcd、...) 今日話すもの k8sについては2月にテックブログを書いたので こちらも読んで頂けると泣いて喜びます https://tech.andpad.co.jp/entry/2021/02/18/170000
  8. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 Kubernetesとetcdについて • etcdはKubernetesの全てのクラスター 情報の保存場所になっている • k8sのコントロールプレーン内で動い ている • etcdはk8sの一部ではなく別レポジト リで管理されている別プロジェクト • k8s同様にCNCFのプロジェクト。多く の稼働実績が認められ2020年11月に Incubation Stageを卒業。 Kubernetesのコンポーネント群 Kubernetesのコンポーネント Kubernetes。 kubernetes.io 

  9. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 etcdがやっていること ▪etcdとは何か 「etcd は、強い一貫性を持つ分散型キーバリューストアで、分散システムやマシンクラスタからアクセス する必要のあるデータを保存するための信頼性の高い方法を提供します。ネットワークの分割時にリーダー の選出を優雅に行い、リーダーノードであってもマシンの故障を許容します。」 ▪必要なもの • 全ノードでデータの一貫性を保つ方法 • 特定のノードが停止しても動作を継続させる仕組み ▪実現方法 • 分散合意アルゴリズム(Raft)
  10. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 etcdがやっていること 分散合意アルゴリズムRaftの考え方 • 一貫性を保つために、リーダーがリクエ ストを受け取りフォロワーが追随する ルールにする • リーダーが動かなくなってしまったとき にどうするか? リーダー フォロワー etcd クライアント put hoge piyo リーダー フォロワー etcd 複製指示
  11. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 etcdがやっていること 分散合意アルゴリズムRaftの考え方 • 一貫性を保つために、リーダーがリクエ ストを受け取りフォロワーが追随する ルールにする • リーダーが動かなくなってしまったとき にどうするか? • フォロワー間で「投票」を行って新しい リーダーを選出する(Leader Election) リーダー フォロワー etcd クライアント put hoge piyo リーダー フォロワー etcd フォロワー etcd →新リーダー 複製指示
  12. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 follower follower follower election timeout term log length = 0 Leader Electionで行われていること election timeout term log length election timeout term log length 各ノードが保持している情報 election timeout: 立候補可能になるまでの時間 term: 何代目リーダーの任期なのか log length: 長い = 最新のデータを保持している etcdクラスタの各ノード
  13. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 follower follower follower election timeout = 20 term = 1 log length = 5 = 0 election timeout時間の設定(ノードの起動時) election timeout = 10 term = 1 log length = 5 election timeout = 30 term = 1 log length = 5 極力被らないよう ランダムに設定 各ノードで時間を カウント Leader この時点だと Leaderがいる
  14. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 follower follower follower リーダーが停止 election timeout = 20 term = 1 log length = 5 election timeout = 10 term = 1 log length = 5 election timeout = 30 term = 1 log length = 5 = 0 Leader リーダーが停止
  15. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 follower follower follower election timeoutが発生 election timeout = 20 term = 1 log length = 5 election timeout = 10 term = 1 log length = 5 election timeout = 30 term = 1 log length = 5 時間経過によってelection timeout発生 = 10 時間が経過 Leader リーダーが いない!
  16. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 follower follower → candidate follower フォロワーから候補者(candidate)に昇格 election timeout = 20 term = 1 log length = 5 election timeout = 10 term = 1 log length = 5 election timeout = 30 term = 1 log length = 5 = 10 出馬します!
  17. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 follower candidate follower ①自身に投票 ③投票呼びかけ (term = 2、log length = 5) 票数:1 自分に投票し、他のフォロワーに投票をリクエスト election timeout = 20 term = 1 log length = 5 election timeout = 10 term = 2 log length = 5 election timeout = 30 term = 1 log length = 5 ②Term(任期)を インクリメント = 10 投票お願いし ます!
  18. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 follower candidate follower 以下を確認 ①logの長さが自分より短くな いかどうか ②termが自分より進んでいる かどうか フォロワーは候補者と自分のステータスを比較して信任するかどうかを決める 投票呼びかけ (term = 2、log length = 5) election timeout = 20 term = 1 log length = 5 election timeout = 10 term = 2 log length = 5 election timeout = 30 term = 1 log length = 5 = 10 票数:1
  19. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 follower candidate follower 信任します 過半数の支持 獲得 候補者が過半数の票を獲得 = 10 票数:2
  20. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 follower candidate → Leader follower 当選 リーダーに当選 = 10
  21. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 follower Leader follower Heartbeat(心音)送信 フォロワーへ定期的にメッセージを送り続ける • Heartbeatの感覚はelection timeoutよりも短い • Heartbeatが届く限りLeader Electionは起こらない = 10〜 生きてます election timeout = 20 term = 2 log length = 5 election timeout = 30 term = 2 log length = 5
  22. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 ざっくりとどういう実装になっているか 各ノード内はものすごく大まかにいうと以下の処理の組み合わせで動いている • ①クライアントからのリクエスト用のリスナー • ②ノードからのリクエスト用のリスナー • ③Raftアルゴリズムのゴルーチン ←受け取ったリクエストはチャネル経由でここに送りつける • ④読み書き処理 クライアント ①クライアント 用リ スナー ③Raftアルゴリズム ②ノード間通信用リ スナー ④読み書き処理 put hoge piyo リーダー ノード フォロワー ノード ④読み書き処理 ③Raftアルゴリズム hoge:piyo log replication request log replication リーダー フォロワー etcd クライアント put hoge piyo 複製指示
  23. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 etcdをどうやって読み解いていったか k8s本を読んだときから気になっていた →ソースコードリーディングのテーマとして選定 →レポジトリ見てみる→Goで書かれている→なるほどわからん(初心者) →Goについて少し調べる→main()から実行されるらしい→main()を読む →辿れるところまで辿る →よく知らない記法が出てくる→調べる(e.g. struct, ゴルーチン, チャネル, for-select-case, gRPC, cobra, ...)→辿れるところまで辿る →迷子になる→公式サイトを漁る→概要を把握→再度読んでみる
  24. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 毎週少しずつ読み解き、notionでわかったところまで を整理して勉強会で共有。 etcdをどうやって読み解いていったか
  25. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 読み解いてみてよかったこと • Goが読めるようになった • アルゴリズムに興味が湧いた • Kubernetesの内部コンポーネントも頑張れば読み解けるという発見 • Kubernetesの仕様にも少し詳しくなった ◦ なぜHA構成は最低3台なのか → 過半数を取得できる状態じゃないと Leader Electionが成立しないため
  26. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 勉強会の利点 メリット • 学習に対する緩い強制力がある • アウトプットすることで思考が整理される 上手くいくためのポイント • 負荷がかかりすぎないコンテンツを選ぶ • 英語にビビらない • ツールを上手く使う ◦ notion ◦ Google日本語翻訳 ◦ DeepL ◦ Go PlayGround ◦ Google Colaboratory • とにかく出続ける chromeの拡張機能を使うと 範囲選択するだけで翻訳し てくれるので捗る 環境構築が楽なの は大事
  27. Copyright © 2021 Present ANDPAD Inc. This information is confidential

    and was prepared by ANDPAD Inc. for the use of our client. It is not to be relied on by and 3rd party. Proprietary & Confidential 無断転載・無断複製の禁止 まとめ 入社前:Webの開発経験少(Javaを1年半 + Python1年) 
 
 入社後:Rails での開発(+ AngularJS/Vue.js) + Go/k8s/etcd + 機械学習 
 
 
 
 今後やっていきたいこと 
 • 勉強会の参加者を増やす(新しいマイクロサービス勉強会の立ち上げ) 
 • 勉強会を通じて得た知見を業務に還元していく 
 勉強会を通じて得た知識 業務を通じて得た知識