◉ 研究開発職 採用情報 募集中のポジションや関連記事など https://media.sansan-engineering.com/
◉ Sansan Tech Blog Sansanのものづくりを支えるメンバーのテックブログ(R&Dメンバーの連載も多数) https://buildersbox.corp-sansan.com/
Sansan株式会社部署 名前R&Dのアプリケーション基盤“Circuit”についてSansan技術本部Sansan技術本部ML Platform Team
View Slide
研修の⽬的1研究開発部のアプリケーション基盤 “Circuit” について知るQ1. Circuitってなに?Q2. Circuitは何のためにある?Q3. どんな設計?Q4. 開発の流れは?Q5. 何ができる?
Q1. Circuitってなに
A. R&Dのアプリケーション基盤の名前です技術:- Kubernetes(k8s)- コンテナオーケストレーション場所:- AWS EKS- k8sをいい感じにAWS上で使えるようにするサービスQ1. Circuitってなに3
コンテナ化したシステムをいい感じに空きのあるマシンに載せて実行してくれるヤツKubernetesとは
Q2. Circuitは何のためにある?
A.絶え間なく生まれる研究員による成果を最速でリリースするためQ2. Circuitは何のためにある?6
A.絶え間なく生まれる研究員による成果を最速でリリースするためQ2. Circuitは何のためにある?(背景)7
A.絶え間なく生まれる研究員による成果を最速でリリースするためQ2. Circuitは何のためにある?(背景)8
A.絶え間なく生まれる研究員による成果を最速でリリースするためQ2. Circuitは何のためにある?(背景)
最も大事なこと~最速でリリースするためにある~最も⼤事なこと~最速でリリースするためにある~
A.絶え間なく生まれる研究員による成果を最速でリリースするため手段としてEKS(K8s)を選んだに過ぎないQ2. Circuitは何のためにある?11
A.絶え間なく生まれる研究員による成果を最速でリリースするためKubernetes使ってるって言いたい小難しいことをして仕事している感を出したい社内で扱っていない技術を使ってイキりたい研究員に仕事を押し付けたいQ2. Circuitは何のためにある?12
A.絶え間なく生まれる研究員による成果を最速でリリースするためKubernetes使ってるって言いたい小難しいことをして仕事している感を出したい社内で扱っていない技術を使ってイキりたい研究員に仕事を押し付けたいQ2. Circuitは何のためにある?13
A.絶え間なく生まれる研究員による成果を最速でリリースするため[よろしくない例]Circuit使っても全然リリース出来ないんだが?Q2. Circuitは何のためにある?14
絶え間なく生まれる研究員による成果を最速でリリースするため[よろしくない例]ECS, App Runner使ったほうが速いんだが?Q2. Circuitは何のためにある?15
絶え間なく生まれる研究員による成果を最速でリリースするため[よろしくない例]とにかく使いにくいんだが?何のために⽣まれた?16
絶え間なく生まれる研究員による成果を最速でリリースするためユーザの声を教えてくれ!もっともっと良くなるぞ!Q2. Circuitは何のためにある?17
最も大事なこと~最速でリリースするためにある~こんなような話どこかで聞いたな?
機械学習が組み込まれたサービスを利⽤する⼈の視点- お金を払って利用する顧客,フリーでアプリを利用するユーザ重要視すること- 自分の環境における精度(全体ではない).体験が全て- 使い心地> 予測結果が使いやすいものか?直感に沿うか?> レイテンシなどの UI/UX に関連する部分- 自分のデータが勝手に使われていないか?感覚的に気持ち悪くないか?重要視しないこと- どのようなアルゴリズムが使われているか- 機械学習が使われているかどうかユーザの視点R&D研修より抜粋
Q2. Circuitは何のためにある?20https://speakerdeck.com/jacopen/platform-engineeringhenozhao-dai“Platform Enginerringへの招待”というスライドにいいことが書いてある
Q2. Circuitは何のためにある?21https://speakerdeck.com/jacopen/platform-engineeringhenozhao-dai❝プラットフォームにとって、価値があるかないかを判断するのは『プラットフォームの利用者』開発者に価値を提供できなければ、そのプラットフォームは失敗している❞
Q3. どんな設計?
最も大事なこと~最速でリリースするためにある~Kubernetes⽤語整理
コンテナ化したシステムをいい感じに空きのあるマシンに載せて実行してくれるヤツ(再掲)Kubernetesとは
PodとはContainerContainerKubernetesアプリケーションの最小実行単位。Podの中に複数コンテナをいれることもできる。
Podが実行される環境。実体はEC2インスタンスやGoogleComputeEngineNodeとは
Nodeの集合Clusterとは
既存のノードに空きがあるならそこに入る新しくPodを実⾏したいNodeのvCPU: 40vCPU: 10vCPU: 10vCPU: 10vCPU: 10 Pending Pods
既存のノードに空きが無いならPodの要求リソースに見合うノードが自動で立ち上がる(Cluster Autoscalerが機能している場合)新しくPodを実⾏したいNodeのvCPU: 40vCPU: 10vCPU: 10vCPU: 10vCPU: 10NodeのvCPU: 20vCPU: 10vCPU: 10New
マニフェストを書いてクラスターに適用するマニフェストはリソース定義のことマニフェストはyaml (json)で記述できるどうやってPodをクラスターに追加するのか
定期バッチのPodをクラスターに追加するマニフェスト例
最も大事なこと~最速でリリースするためにある~リソース管理の話
マニフェスト(リソースを定義したYAML)はほぼ全てGitHubで管理されている宣⾔的なリソース管理33GitHubにないリソースをこっそり作るなよぉという話
名前空間/アプリ名/アプリタイプ/…..ディレクトリ構成34名前空間アプリ名アプリタイプ(batch,api..)環境
環境間で共通設定と独⾃設定を分けているKustomizeというツールを用いて設定のマージを実現ディレクトリ構成35共通設定(マニフェスト)本番環境独自の設定(マニフェスト)
最も大事なこと~最速でリリースするためにある~デプロイの話
Gitを「信頼できる唯一の情報源」とするプルリクエストをmainにマージ=デプロイArgoCDというツールでGitOpsを実現GitOps37今からリリースします!(どきどき)というお遊戯がないという話
Gitを「信頼できる唯一の情報源」とする。プルリクエストをmainにマージ=デプロイ。ArgoCDというツールでGitOpsを実現。GitOps38このタコが定期的にGitHubを監視差分があればCircuitにデプロイする私、監視されている
ArgoCDのUIはCircuitの状態確認に便利。GitOps39画像はArgoCDのドキュメントから引用
最も大事なこと~最速でリリースするためにある~クラスタ⾃体の話
1つのクラスタで運用「どのクラスタ使えばいいんだろう」が基本無い(ようにしたい)開発者はクラスタを気にしなくて良い設計Circuitは環境毎に1つバージョンアップ時は一時的に2つになる名前空間でプロダクトを分離するシングルクラスタマルチテナント41
概ねプロダクト単位になっている- eight- sansan- ︙名前空間42
K8sは年3回リリースがある雑に言うと2種の更新方法- in-place- ブルーグリーンデプロイ ← CircuitはこっちEKSのバージョン更新(アーキテクト向け)43
in-place失敗しても前の家には戻れないin-placeなバージョン更新44リフォーム
ブルーグリーンデプロイ失敗したら前の家に戻れるブルーグリーンデプロイなバージョン更新45新しい家を建てて引っ越す
ブルーグリーンデプロイなバージョン更新
最も大事なこと~最速でリリースするためにある~機密情報管理
ブルーグリーンデプロイなバージョン更新マニフェストに機密情報を書かないExternal Secrets OperatorなるものでAWSのSecrets Managerに保存するGitHubに機密情報はNG
Q3. 開発の流れは?
最も大事なこと~最速でリリースするためにある~アプリ構築初回
A.研究員とArchitectが連携して開発するよQ3. 開発の流れは?51
A.研究員とArchitectが連携して開発するよQ3. 開発の流れは?52↑ボトルネックになりがちな所↑デプロイ作業がマージであることに注目↑テンプレートで楽ちん
最も大事なこと~最速でリリースするためにある~継続的なアルゴリズム修正
イメージをECRにプッシュすると自動でPRができるぞQ3. 開発の流れは?54↑自動!
Q5. 何ができる?
できる- 単発のバッチ- 定期実行バッチ- データの集計とか学習とか- 変則的な手動実行もできる- API、Webアプリケーション- オートスケール- 使用量が増えたらPodを増やす- 負荷分散- まんべんなくリクエストをPodに割り振るQ5. 何ができる?56
できない、まだイマイチ- GPUインスタンスの利用- できなくはないが不整備- サーバーレス化- 利用がないシステムはPodを0個までスケールイン- 主にコスト削減- Comming Soon!Q5. 何ができる?57※我々ML PlatformチームなのでGPU対応は今後必ずやります
選べるデプロイ⽅法について語る
新しいバージョンのコードを本番環境にリリースのは不安- ちゃんと起動するかな?- 利用負荷に耐えられるかな?- 失敗したら過去のバージョンにすぐ戻せるかな?- 精度は改善するかな?Q5. 何ができる?59
ローリングアップデート基本はコレ起動を確認して1つ1つPodが入れ替わっていく(人要らず)Q5. 何ができる?60new versions old versionsシフト交代の時間や帰りまーす
ブルーグリーンデプロイ古いバージョンはデプロイ後もしばらく待機待ってる間は古いバージョンにすぐ戻せる(要人間)Q5. 何ができる?61new versions old versions仕事は交代するけど店長のNGでたらすぐ戻ってきてええよArgo Rolloutsを利用※ここでの店長とは運用者を指す
カナリアリリース任意の割合で部分的にリリース確認しながら少しずつリリースが進められる(要人間)Q5. 何ができる?62new version old versionsとりあえず1人だけ交代するわ店長のOKでたら次のPod呼ぶわArgo Rolloutsを利用※ここでの店長とは運用者を指す
プログレッシブデリバリー任意の割合で部分的にリリース何らかの指標を確認して少しずつリリースが進む(人要らず)Q5. 何ができる?63new version old versionsとりあえず1人だけ交代するわ精度のメトリクス見て、良さそうだったら次Pod呼ぶわArgo Rolloutsを利用
研究開発をドライブするCircuit 🚗=33
- 仮説検証を高速ぐるぐるしたい- 研究開発をドライブしたい- Gokart(研究開発部でよく使っているOSS)が走る場所Appendix: なんでCircuit?65
ArgoCD Image Updater追加Appendix: Circuitの歴史662021/10 2022/05 2022/07 2022/12 2023/02アプリ初リリースSTG環境のCircuit誕生MLPチーム誕生Argo Rollouts追加初のクラスタ更新開始EKS作成を決意 本番環境のCircuit誕生