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
カラーミーショップの 可用性向上のための インフラ刷新
Search
Takuya TAKAHASHI
April 13, 2021
1
480
カラーミーショップの 可用性向上のための インフラ刷新
GMO Developers Night で発表した内容です
Takuya TAKAHASHI
April 13, 2021
Tweet
Share
More Decks by Takuya TAKAHASHI
See All by Takuya TAKAHASHI
顧客の画像データをテラバイト単位で配信する 画像サーバを WebP にした際に起こった課題と その対応策 ~継続的な取り組みを添えて~
takutakahashi
4
1.4k
実例から学ぶ Kubernetes Custom Controller の状態管理
takutakahashi
0
1.6k
しきい値監視からの卒業! Prometheus による機械学習を用いた異常検知アラートの実装
takutakahashi
0
2.2k
15年以上動くECシステムをクラウドネイティブにするためにやっていること
takutakahashi
1
2.1k
ペパボが求める「守って攻める」インフラとは?
takutakahashi
4
670
Rook/Ceph on ZFS
takutakahashi
1
2k
Site Reliability を向上するためにやったことすべて
takutakahashi
11
2.2k
Deep-dive KubeVirt
takutakahashi
2
1.8k
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Building an army of robots
kneath
306
45k
RailsConf 2023
tenderlove
30
1.2k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
710
Become a Pro
speakerdeck
PRO
29
5.4k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
8
360
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.7k
4 Signs Your Business is Dying
shpigford
184
22k
Transcript
1 カラーミーショップの 可用性向上のための インフラ刷新 高橋 拓也 @ GMO ペパボ 2021/04/13
GMO Developers Night
2 2 アジェンダ • 自己紹介 • カラーミショップが抱える課題 • 可用性向上への道 ◦
分離環境の誕生 • ShopSet アーキテクチャ ◦ 概念 ◦ 実装 ◦ 導入と課題 • まとめ
3 自己紹介 3
4 4 高橋 拓也 (takutaka) 自己紹介 • インフラエンジニア @ GMO
ペパボ • 所属: 技術部 技術基盤チーム • 自宅サーバを飼っています • https://github.com/takutakahashi • https://www.takutakahashi.dev • https://twitter.com/takutaka1220 写真
5 5 高橋 拓也 (takutaka) 自己紹介 • 所属: 技術部 技術基盤チーム
◦ 事業部のお手伝いをしたり、 ◦ 全社的なインフラ基盤を開発したりするチーム • 自宅サーバを飼っています • https://github.com/takutakahashi • https://www.takutakahashi.dev • https://twitter.com/takutaka1220 写真 WS 兼 k8s node k8s node k8s master Backup HDD ルーター (VyOS) おもちゃ箱 10G Switch
6 6 カラーミーショップ
7 7
8 解決したい課題 8
9 9 EC の需要が増加🏠
10 10 大量に売り上げる ショップが増えた🚀
11 11 システムへの 負荷がすごいことに🔥
12 12 システムへの負荷 解決したい課題 - 需要増加に伴う負荷の集中 - 人気商品に対する大量アクセス - bot
を使った DDoS に近いアクセスも...
13 13 システムへの負荷 解決したい課題 - カラーミーはマルチテナント型アーキテクチャ - すべてのショップアクセスが同じサーバを通る - 人気ショップの負荷が他のショップに波及
14 14 システムへの負荷 解決したい課題 - カラーミーはマルチテナント型アーキテクチャ - すべてのショップアクセスが同じサーバを通る - 人気ショップの負荷が他のショップに波及
サービス全体がダウンしてしまう障害が 発生してしまった😢
15 15 流通増加による可用性への重要度の増加 解決したい課題 - カラーミーを利用した流通額の増加 - 数分のダウンが無視できない規模感へと成長 - ショップオーナーから可用性への期待値が上がる
16 16 流通増加による可用性への重要度の増加 解決したい課題 - カラーミーを利用した流通額の増加 - 数分のダウンが無視できない規模感へと成長 - ショップオーナーから可用性への期待値が上がる
システムの安定性を 更に向上させる施策が必要になった
17 可用性向上への道 17
18 18 最初の施策: 分離環境 可用性向上への道 - とあるショップの負荷でサービスダウンが発生 カラーミー
19 19 最初の施策: 分離環境 可用性向上への道 - 既存のシステムのクローン(分離環境)を構築 カラーミー カラーミー 分離環境
20 20 最初の施策: 分離環境 可用性向上への道 - 対象ショップのみ向き先を変更 カラーミー カラーミー 分離環境
21 21 最初の施策: 分離環境 可用性向上への道 - 非常に効果的にワークした - 特定のショップの負荷による全体のダウンをある程度防げるように なった
22 22 最初の施策: 分離環境 可用性向上への道 - 非常に効果的にワークした - 特定のショップの負荷による全体のダウンをある程度防げるように なった
分離環境を応用して 多くの課題を解決できるのでは?🤔
23 23 分離環境の応用 カラーミー カラーミー 分離環境 カラーミー カラーミー カラーミー カラーミー
カラーミー カラーミー カラーミー N 環境 ゼロコストで分離環境を作成し 高トラフィック対策以外でも利用する
24 ShopSet アーキテクチャ 分離環境改め 24 規約を盛り込んだ分離環境
25 25 ShopSet API ショップ ページ カート プロキシ LB https://hoge.shop-pro.jp
ShopSet … ユーザーが決済完了までで通るコンポーネントをまとめたもの 複数のショップの 集合体だから ShopSet https://foo.shop-pro.jp
26 26 ShopSet API ショップページ カート プロキシ LB https://hoge.shop-pro.jp ShopSet
API ショップページ カート プロキシ LB ひとつ以上の ShopSet で 冗長構成を取る
27 AWS On-Prem 27 ShopSet API ショップページ カート プロキシ LB
https://hoge.shop-pro.jp ShopSet API ショップページ カート プロキシ LB ShopSet のポータビリティを高め マルチクラウド構成を取ることで プラットフォーム冗長を実現する
28 AWS On-Prem 28 ShopSet API ショップページ カート プロキシ LB
https://hoge.shop-pro.jp ShopSet API ショップページ カート プロキシ LB ShopSet のポータビリティを高め マルチクラウド構成を取ることで プラットフォーム冗長を実現する 自律的構築運用と ポータビリティを実現するために Kubernetes 上に ShopSet を構築する
29 29 ShopSet アーキテクチャの要 ShopSet アーキテクチャ - 大量の環境を管理することは非常に大変 - 以下の指針を設定
- 人間による管理をしない - 規約を厳格に設計し、規約のもと自動化を徹底する
30 30 ShopSet が持つ規約 ShopSet アーキテクチャ 新たな概念を導入する - Tier -
Configuration - Failure Domain
31 31 ShopSet が持つ規約 ShopSet アーキテクチャ 新たな概念を導入する - Tier -
Configuration - Failure Domain Kubernetes Custom Resource として実装し 規約をシステムに強制する
32 - レベリングされた更新単位のこと - ShopSet は必ずひとつの Tier に所属する - 同じ
Tier に属する ShopSet はすべて同タイミングで更新される 32 Tier ShopSet アーキテクチャ Tier 1 shopset shopset Tier 2 shopset shopset Tier 3 shopset shopset リリースは Tier 単位でトリガ
33 - すべての更新作業は自身より低い Tier より先に行われてはいけない 33 Tier が持つ制約 ShopSet アーキテクチャ
34 - すべての更新作業は自身より低い Tier より先に行われてはいけない dev 34 Tier ShopSet アーキテクチャ
beta prod-beta prod prod-ha dev → beta → prod-beta … の順で更新する
35 - すべての更新作業は自身より低い Tier より先に行われてはいけない dev 35 Tier ShopSet アーキテクチャ
beta prod-beta prod prod-ha 下位 Tier のリリースで デグレードした場合でも 上位 Tier に影響が波及しない
36 - すべての更新アセットは低い Tier で動作検証済みのものを使う 36 Tier ShopSet アーキテクチャ beta
prod beta beta prod beta 値をコピーせず 同じものを参照 manifests, image, etc...
37 - 接続する環境を切り替えるためのもの - Dev, Staging, Production など - Helm
でいう values.yaml, Kustomize でいう patches 37 Configuration ShopSet アーキテクチャ
38 38 Configuration ShopSet アーキテクチャ Tier 1 shopset 2 shopset
1 production staging 同じバージョンの stg, prod を設定
39 39 Configuration ShopSet アーキテクチャ Tier 1 shopset 2 shopset
1 production バージョンの異なる prod を 同時に稼働 Tier 2
40 - 障害ドメイン - ShopSet に所属するショップのスケジューリングに利用 - 複数 ShopSet を利用した冗長構成を組む
40 Failure Domain ShopSet アーキテクチャ
41 AWS On-Prem 41 ShopSet API ショップページ カート プロキシ LB
https://hoge.shop-pro.jp ShopSet API ショップページ カート プロキシ LB クラウドやクラスタのレイヤで 障害が発生しても 冗長構成で動作を担保できるように ショップのスケジューリングをする
42 42 制約があることで よくなること
43 43 k8s Cluster A (On-Prem) k8s Cluster B (EKS)
ShopSet A-1 A-2 B-1 B-2 C-1 C-2 k8s Cluster C (On-Prem) クラウドを跨いだ複数クラスタで 透過的に同一環境が動作する
44 44 k8s Cluster A k8s Cluster B Prod A-1
Prod A-2 Prod B-1 Prod B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) 2ドメイン冗長 冗長なし k8s Cluster B Prod C-1 Prod C-2 k8s Cluster C (On-Prem) ShopSet 間冗長を行うように ショップを配置する ShopSet A-1 A-2 B-1 B-2 C-1 C-2
45 45 クラスタ障害発生時
46 46 k8s Cluster A k8s Cluster B Prod A-1
Prod A-2 Prod B-1 Prod B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) 2ドメイン冗長 冗長なし k8s Cluster B Prod C-1 Prod C-2 k8s Cluster C (On-Prem) とあるクラスタが動作不能になる ShopSet A-1 A-2 B-1 B-2 C-1 C-2
47 47 k8s Cluster A k8s Cluster B Prod A-1
Prod A-2 Prod B-1 Prod B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) 2ドメイン冗長 冗長なし k8s Cluster B Prod C-1 Prod C-2 k8s Cluster C (On-Prem) このユーザーが サービス利用不可能になる ShopSet A-1 A-2 B-1 B-2 C-1 C-2
48 48 k8s Cluster A k8s Cluster B Prod A-1
Prod A-2 Prod B-1 Prod B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) 2ドメイン冗長 冗長なし k8s Cluster B Prod C-1 Prod C-2 k8s Cluster C (On-Prem) これらのユーザーのアクセスは 守られる ShopSet A-1 A-2 B-1 B-2 C-1 C-2
49 49 k8s Cluster A k8s Cluster B Prod A-1
Prod A-2 Prod B-1 Prod B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) 2ドメイン冗長 冗長なし k8s Cluster B Prod C-1 Prod C-2 k8s Cluster C (On-Prem) ShopSet A-1 A-2 B-1 B-2 C-1 C-2 利用する ShopSet を変更して復旧
50 50 アプリケーション更新
51 51 k8s Cluster A k8s Cluster B A-1 A-2
B-1 B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) 2ドメイン冗長 冗長なし k8s Cluster B C-1 C-2 k8s Cluster C (On-Prem) Tier 順に更新する
52 52 k8s Cluster A k8s Cluster B A-1 beta-prod
A-2 prod B-1 prod B-2 beta-prod k8s Cluster A (On-Prem) k8s Cluster B (EKS) 2ドメイン冗長 冗長なし k8s Cluster B C-1 beta C-2 dev k8s Cluster C (On-Prem) 更新順: 1. dev 2. beta 3. beta-prod 4. prod
53 53 k8s Cluster A k8s Cluster B Prod A-1
Prod A-2 Prod B-1 Prod B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) 2ドメイン冗長 冗長なし k8s Cluster B Prod C-1 Prod C-2 k8s Cluster C (On-Prem) 更新順決定: 1. C-2 2. C-1 3. A-2, B-1 4. A-1, B-2 Prod A-1 beta-prod Prod A-2 prod Prod B-1 prod Prod B-2 beta-prod Prod C-1 beta Prod C-2 dev 更新順: 1. dev 2. beta 3. beta-prod 4. prod A-1 beta-prod A-2 prod B-1 prod B-2 beta-prod C-1 beta C-2 dev 低レベルの Tier で更新実施後 動作確認を行う
54 54 k8s Cluster A k8s Cluster B Prod A-1
Prod A-2 Prod B-1 Prod B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) 2ドメイン冗長 冗長なし k8s Cluster B Prod C-1 Prod C-2 k8s Cluster C (On-Prem) 更新順決定: 1. C-2 2. C-1 3. A-2, B-1 4. A-1, B-2 Prod A-1 beta-prod Prod A-2 prod Prod B-1 prod Prod B-2 beta-prod Prod C-1 beta Prod C-2 dev 更新順: 1. dev 2. beta 3. beta-prod 4. prod A-1 beta-prod A-2 prod B-1 prod B-2 beta-prod C-1 beta C-2 dev 問題なければ次のレベルの Tier を 更新する
55 55 k8s Cluster A k8s Cluster B Prod A-1
Prod A-2 Prod B-1 Prod B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) 2ドメイン冗長 冗長なし k8s Cluster B Prod C-1 Prod C-2 k8s Cluster C (On-Prem) 更新順決定: 1. C-2 2. C-1 3. A-2, B-1 4. A-1, B-2 Prod A-1 beta-prod Prod A-2 prod Prod B-1 prod Prod B-2 beta-prod Prod C-1 beta Prod C-2 dev 更新順: 1. dev 2. beta 3. beta-prod 4. prod A-1 beta-prod A-2 prod B-1 prod B-2 beta-prod C-1 beta C-2 dev アラートがでなければ次へ
56 56 k8s Cluster A k8s Cluster B Prod A-1
Prod A-2 Prod B-1 Prod B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) 2ドメイン冗長 冗長なし k8s Cluster B Prod C-1 Prod C-2 k8s Cluster C (On-Prem) 更新順決定: 1. C-2 2. C-1 3. A-2, B-1 4. A-1, B-2 Prod A-1 beta-prod Prod A-2 prod Prod B-1 prod Prod B-2 beta-prod Prod C-1 beta Prod C-2 dev 更新順: 1. dev 2. beta 3. beta-prod 4. prod A-1 beta-prod A-2 prod B-1 prod B-2 beta-prod C-1 beta C-2 dev 更新完了
57 57 クラスタアップグレード
58 58 k8s Cluster A k8s Cluster B Prod A-1
Prod A-2 Prod B-1 Prod B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) k8s Cluster B Prod C-1 Prod C-2 k8s Cluster C (On-Prem) Cluster A をアップグレードする Prod A-1 beta-prod Prod A-2 prod Prod B-1 prod Prod B-2 beta-prod Prod C-1 beta Prod C-2 dev A-1 beta-prod A-2 prod B-1 prod B-2 beta-prod C-1 beta C-2 dev
59 59 k8s Cluster A k8s Cluster B Prod A-1
Prod A-2 Prod B-1 Prod B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) k8s Cluster B Prod C-1 Prod C-2 k8s Cluster C (On-Prem) 同一 Tier の ShopSet へ ショップを割り振る Prod A-1 beta-prod Prod A-2 prod Prod B-1 prod Prod B-2 beta-prod Prod C-1 beta Prod C-2 dev B じゃない どこか Cluster B は Failure Domain の条件を満たせないため 別のクラスタに移る A-1 beta-prod A-2 prod B-1 prod B-2 beta-prod C-1 beta C-2 dev
60 60 k8s Cluster A k8s Cluster B Prod A-1
Prod A-2 Prod B-1 Prod B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) k8s Cluster B Prod C-1 Prod C-2 k8s Cluster C (On-Prem) クラスタをアップグレードする Prod A-1 beta-prod Prod A-2 prod Prod B-1 prod Prod B-2 beta-prod Prod C-1 beta Prod C-2 dev B じゃない どこか A-1 beta-prod A-2 prod B-1 prod B-2 beta-prod C-1 beta C-2 dev
61 61 k8s Cluster A k8s Cluster B Prod A-1
Prod A-2 Prod B-1 Prod B-2 k8s Cluster A (On-Prem) k8s Cluster B (EKS) k8s Cluster B Prod C-1 Prod C-2 k8s Cluster C (On-Prem) Prod A-1 beta-prod Prod A-2 prod Prod B-1 prod Prod B-2 beta-prod Prod C-1 beta Prod C-2 dev B じゃない どこか A-1 beta-prod A-2 prod B-1 prod B-2 beta-prod C-1 beta C-2 dev 別のクラスタから ショップを再配置する
62 62 ShopSet の実装
63 63 実装への課題 ShopSet の実装 - 制約をどのように実装するか? - オペレーションがソフトウェアにロックインされるのでは?
64 64 制約をどのように実装するか? ShopSet の実装 - Custom Resource と Controller
を実装する - 自律的に動作させられる - 人間からわかりやすい単位に抽象化できる - フレームワークに乗れば実装も楽
65 65 オペレーションがソフトウェアにロックインされるのでは? ShopSet の実装 - 単体のシステムから抜けられないのはつらい - Kubernetes -
Custom Controller - Custom Controller しかオペレーションできないと... - Controller を頻繁に更新できない - Controller の障害時に対策が何もできない - つらい
66 66 Controller から ロジックを分離する
67 67 Controller からロジックを分離する ShopSet の実装 - Controller でしかできないオペレーションをなくす -
人間が(多少大変でも)容易に再現可能とする
68 68 Controller からロジックを分離する ShopSet の実装 - Controller でしかできないオペレーションをなくす -
人間が(多少大変でも)容易に再現可能とする GitOps をベースに manifests の生成を自動化する
69 69 GitOps? ShopSet の実装 - Git Repository を唯一の成果物とするデプロイ方式 -
リポジトリのマニフェストを Kubernetes Cluster に同期する - ArgoCD が有名
70 70 GitOps? ShopSet の実装 - ArgoCD は `git pull`
して `kubectl apply -f ` するだけ - ArgoCD が apply できる = 人間が apply できる - ArgoCD を中間レイヤにすれば複雑性を吸収できる
71 71 GitOps? ShopSet の実装 - ArgoCD は `git pull`
して `kubectl apply -f ` するだけ - ArgoCD が apply できる = 人間が apply できる - ArgoCD を中間レイヤにすれば複雑性を吸収できる ArgoCD が apply できるリポジトリを Controller で自動生成する
72 72 ShopSet の実装 Kubernetes Cluster GitHub (Enterprise) shopset-controller Kubernetes
API apply -f tier.yaml apply -f shopset.yaml push assets fetch apply fetch shopset deploy API Cart Proxy
73 73 shopset-controller がやること ShopSet の実装 - Kustomization で使う差分ファイルの生成とプッシュ -
base manifests の更新 - ArgoCD Application リソースの作成と apply
74 74 shopset-controller が操作するリポジトリ ShopSet の実装 - system-repository - overlays
に相当するファイルを保存 - shopset-controller が生成したファイルをプッシュ - ArgoCD が参照して Cluster に Apply する - app-repository - base に相当するファイルを保存 - 人間が作成しプッシュ - system-repository から git submodule として参照される
75 75 リポジトリを tier.yaml に記述する ShopSet の実装
76 76 Kustomization で使う差分ファイルの生成とプッシュ ShopSet の実装
77 77 Git Submodule で最新の base を参照し続ける ShopSet の実装
78 78 ArgoCD の Custom Resource を生成 ShopSet の実装
79 79 shopset-controller + GitOps で制約を実装 ShopSet の実装 - Tier
の実装 - tier ごとに branch を生やす - 最下位 tier で変更を実装する - tier branch の変更を上位 branch に push
80 80 ShopSet の実装 リポジトリの関係性 開発者 shopset-system (branch:tier-0) overlays/shopset1 base
shopset-system (branch:tier-1) overlays/shopset2 base shopset-apps (branch:tier-0) api cart proxy shopset-system (branch:tier-4) overlays/shopset3 base shopset-apps (branch:tier-1) api cart proxy shopset-apps (branch:tier-4) api cart proxy PR/Merge submodule argocd
81 81 ShopSet の実装 リポジトリの関係性 開発者 shopset-system (branch:tier-0) overlays/shopset1 base
shopset-system (branch:tier-1) overlays/shopset2 base shopset-apps (branch:tier-0) api cart proxy shopset-system (branch:tier-4) overlays/shopset3 base shopset-apps (branch:tier-1) shopset-apps (branch:tier-1) shopset-apps (branch:tier-4) api cart proxy shopset-apps (branch:tier-4) api cart proxy PR/Merge submodule argocd ブランチで Tier を分ける
82 82 ShopSet の実装 リポジトリの関係性 開発者 shopset-system (branch:tier-0) overlays/shopset1 base
shopset-system (branch:tier-1) overlays/shopset2 base shopset-apps (branch:tier-0) api cart proxy shopset-system (branch:tier-4) overlays/shopset3 base shopset-apps (branch:tier-1) api cart proxy shopset-apps (branch:tier-4) api cart proxy submodule argocd PR/Merge 一番下の Tier branch に PR を出す
83 83 ShopSet の実装 リポジトリの関係性 開発者 shopset-system (branch:tier-0) overlays/shopset1 base
shopset-system (branch:tier-1) overlays/shopset2 base shopset-apps (branch:tier-0) api cart proxy shopset-system (branch:tier-4) overlays/shopset3 base shopset-apps (branch:tier-1) api cart proxy shopset-apps (branch:tier-4) api cart proxy submodule argocd PR/Merge 自動デプロイされるので 動作確認する
84 84 ShopSet の実装 リポジトリの関係性 開発者 shopset-system (branch:tier-0) overlays/shopset1 base
shopset-system (branch:tier-1) overlays/shopset2 base shopset-apps (branch:tier-0) api cart proxy shopset-system (branch:tier-4) overlays/shopset3 base shopset-apps (branch:tier-1) api cart proxy shopset-apps (branch:tier-4) api cart proxy submodule argocd PR/Merge 動作確認できたら 次の tier branch に 変更を反映する
85 85 shopset-controller + GitOps で制約を実装 ShopSet の実装 - Configuration
の実装 - git repository + Tier branch で管理
86 86 shopset-controller + GitOps で制約を実装 ShopSet の実装 - ShopSet
は tier と configuration を指定するだけ
87 87 shopset-controller + GitOps で制約を実装 ShopSet の実装 - Failure
Domain の実装 - これから
88 88 現状と課題
89 89 ShopSet の開発体制 現状と課題 - プロジェクトとしてチーム開発中 - @takutaka1220 …
shopset の設計、実装, etc - @MITLicense … App の k8s-convert, ログ転送基盤の構築, etc - @ch11aki … Middleware の k8s-convert, クラスタ設計, etc - @takapi86 … App の k8s-convert, セキュリティ, etc
90 90 ShopSet の開発体制でうまくいったこと 現状と課題 - 一時間ほど集合するわいわいタイムを毎日開催 - 作業やってもいいし、雑談してもいいし、来なくてもいい -
MTG や同期的に作業をやる場合はこの時間をあてがう
91 91 ShopSet の開発体制でうまくいかなかったこと 現状と課題 - 一時間ほど集合するわいわいタイムを毎日開催 - 作業やってもいいし、雑談してもいいし、来なくてもいい -
MTG や同期的に作業をやる場合はこの時間をあてがう
92 92 ShopSet のマイルストーン 現状と課題 - 検証環境にて長期安定稼働中 - 約半年くらいトラブルなし -
制約の設計は概ねうまくいった
93 93 ShopSet のマイルストーン 現状と課題 - ShopSet で構築した環境をプロダクションに一部導入済み - 本日の午前中にリリースしました🎉
- 単一クラスタ、単一 ShopSet 構成
94 94 ShopSet 開発の課題 現状と課題 - k8s-convert がとても大変 - ドメイン知識豊富な専門家で
1 month/app くらいかかる - 構成の共通化や cluster-wide の機能提供で対応 - ログ収集 (fluentd) や、監視とアラート(prometheus) など
95 95 ShopSet 開発の課題 現状と課題 - プロダクト開発体制の構築 - k8s に慣れた人だけがプロダクト開発するわけじゃない
- デバッグやリリースを補助するインターフェースが必要 - `shopctl` コマンドを現在設計中
96 96 ShopSet 開発の課題 現状と課題 - ShopSet で動作させるカラーミー環境の最適化 - キャパシティの把握
- どのくらいリクエストを食えるのかわからない - 1クラスタ上でどのくらい ShopSet をスケールさせるべきか?
97 97 ShopSet 開発の課題 現状と課題 - ShopSet で動作させるカラーミー環境の最適化 - Microservice
のベストプラクティスの吸収 - rate limit & circuit breaker とか - observability とか
98 98 ShopSet 開発の課題 現状と課題 - ShopSet で動作させるカラーミー環境の最適化 - 次のボトルネックへの対処
- 無限に ShopSet を作るには? - おそらく DB Connection が枯渇しそう
99 99 ShopSet 開発の課題 現状と課題 - プロダクト運用の簡素化 - ショップの追加、 ShopSet
の変更など - どの ShopSet を使えばいいの?などの迷いを無くす - 規約を用いて自動化する方針
100 100 ShopSet 開発の今後 現状と課題 - ShopSet に内包する Service の拡充
- k8s-convert との戦い - AWS EKS を用いたマルチクラウドの本番適用 - ほぼできるはず - マルチ k8s クラスタのハンドリングの実装 - クラスタライフサイクル管理、Failure Domain 実装、etc...
101 101 アジェンダ • 可用性向上への道 ◦ 分離環境の誕生 • ShopSet アーキテクチャ
◦ 概念 ▪ Tier ▪ Configuration ▪ Failure Domain ◦ 実装 ▪ GitOps + ArgoCD ◦ 導入と課題
102 102 おしまい