Slide 1

Slide 1 text

1 カラーミーショップの 可用性向上のための インフラ刷新 高橋 拓也 @ GMO ペパボ 2021/04/13 GMO Developers Night

Slide 2

Slide 2 text

2 2 アジェンダ ● 自己紹介 ● カラーミショップが抱える課題 ● 可用性向上への道 ○ 分離環境の誕生 ● ShopSet アーキテクチャ ○ 概念 ○ 実装 ○ 導入と課題 ● まとめ

Slide 3

Slide 3 text

3 自己紹介 3

Slide 4

Slide 4 text

4 4 高橋 拓也 (takutaka) 自己紹介 ● インフラエンジニア @ GMO ペパボ ● 所属: 技術部 技術基盤チーム ● 自宅サーバを飼っています ● https://github.com/takutakahashi ● https://www.takutakahashi.dev ● https://twitter.com/takutaka1220 写真

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

6 6 カラーミーショップ

Slide 7

Slide 7 text

7 7

Slide 8

Slide 8 text

8 解決したい課題 8

Slide 9

Slide 9 text

9 9 EC の需要が増加🏠

Slide 10

Slide 10 text

10 10 大量に売り上げる ショップが増えた🚀

Slide 11

Slide 11 text

11 11 システムへの 負荷がすごいことに🔥

Slide 12

Slide 12 text

12 12 システムへの負荷 解決したい課題 - 需要増加に伴う負荷の集中 - 人気商品に対する大量アクセス - bot を使った DDoS に近いアクセスも...

Slide 13

Slide 13 text

13 13 システムへの負荷 解決したい課題 - カラーミーはマルチテナント型アーキテクチャ - すべてのショップアクセスが同じサーバを通る - 人気ショップの負荷が他のショップに波及

Slide 14

Slide 14 text

14 14 システムへの負荷 解決したい課題 - カラーミーはマルチテナント型アーキテクチャ - すべてのショップアクセスが同じサーバを通る - 人気ショップの負荷が他のショップに波及 サービス全体がダウンしてしまう障害が 発生してしまった😢

Slide 15

Slide 15 text

15 15 流通増加による可用性への重要度の増加 解決したい課題 - カラーミーを利用した流通額の増加 - 数分のダウンが無視できない規模感へと成長 - ショップオーナーから可用性への期待値が上がる

Slide 16

Slide 16 text

16 16 流通増加による可用性への重要度の増加 解決したい課題 - カラーミーを利用した流通額の増加 - 数分のダウンが無視できない規模感へと成長 - ショップオーナーから可用性への期待値が上がる システムの安定性を 更に向上させる施策が必要になった

Slide 17

Slide 17 text

17 可用性向上への道 17

Slide 18

Slide 18 text

18 18 最初の施策: 分離環境 可用性向上への道 - とあるショップの負荷でサービスダウンが発生 カラーミー

Slide 19

Slide 19 text

19 19 最初の施策: 分離環境 可用性向上への道 - 既存のシステムのクローン(分離環境)を構築 カラーミー カラーミー 分離環境

Slide 20

Slide 20 text

20 20 最初の施策: 分離環境 可用性向上への道 - 対象ショップのみ向き先を変更 カラーミー カラーミー 分離環境

Slide 21

Slide 21 text

21 21 最初の施策: 分離環境 可用性向上への道 - 非常に効果的にワークした - 特定のショップの負荷による全体のダウンをある程度防げるように なった

Slide 22

Slide 22 text

22 22 最初の施策: 分離環境 可用性向上への道 - 非常に効果的にワークした - 特定のショップの負荷による全体のダウンをある程度防げるように なった 分離環境を応用して 多くの課題を解決できるのでは?🤔

Slide 23

Slide 23 text

23 23 分離環境の応用 カラーミー カラーミー 分離環境 カラーミー カラーミー カラーミー カラーミー カラーミー カラーミー カラーミー N 環境 ゼロコストで分離環境を作成し 高トラフィック対策以外でも利用する

Slide 24

Slide 24 text

24 ShopSet アーキテクチャ 分離環境改め 24 規約を盛り込んだ分離環境

Slide 25

Slide 25 text

25 25 ShopSet API ショップ ページ カート プロキシ LB https://hoge.shop-pro.jp ShopSet … ユーザーが決済完了までで通るコンポーネントをまとめたもの 複数のショップの 集合体だから ShopSet https://foo.shop-pro.jp

Slide 26

Slide 26 text

26 26 ShopSet API ショップページ カート プロキシ LB https://hoge.shop-pro.jp ShopSet API ショップページ カート プロキシ LB ひとつ以上の ShopSet で 冗長構成を取る

Slide 27

Slide 27 text

27 AWS On-Prem 27 ShopSet API ショップページ カート プロキシ LB https://hoge.shop-pro.jp ShopSet API ショップページ カート プロキシ LB ShopSet のポータビリティを高め マルチクラウド構成を取ることで プラットフォーム冗長を実現する

Slide 28

Slide 28 text

28 AWS On-Prem 28 ShopSet API ショップページ カート プロキシ LB https://hoge.shop-pro.jp ShopSet API ショップページ カート プロキシ LB ShopSet のポータビリティを高め マルチクラウド構成を取ることで プラットフォーム冗長を実現する 自律的構築運用と ポータビリティを実現するために Kubernetes 上に ShopSet を構築する

Slide 29

Slide 29 text

29 29 ShopSet アーキテクチャの要 ShopSet アーキテクチャ - 大量の環境を管理することは非常に大変 - 以下の指針を設定 - 人間による管理をしない - 規約を厳格に設計し、規約のもと自動化を徹底する

Slide 30

Slide 30 text

30 30 ShopSet が持つ規約 ShopSet アーキテクチャ 新たな概念を導入する - Tier - Configuration - Failure Domain

Slide 31

Slide 31 text

31 31 ShopSet が持つ規約 ShopSet アーキテクチャ 新たな概念を導入する - Tier - Configuration - Failure Domain Kubernetes Custom Resource として実装し 規約をシステムに強制する

Slide 32

Slide 32 text

32 - レベリングされた更新単位のこと - ShopSet は必ずひとつの Tier に所属する - 同じ Tier に属する ShopSet はすべて同タイミングで更新される 32 Tier ShopSet アーキテクチャ Tier 1 shopset shopset Tier 2 shopset shopset Tier 3 shopset shopset リリースは Tier 単位でトリガ

Slide 33

Slide 33 text

33 - すべての更新作業は自身より低い Tier より先に行われてはいけない 33 Tier が持つ制約 ShopSet アーキテクチャ

Slide 34

Slide 34 text

34 - すべての更新作業は自身より低い Tier より先に行われてはいけない dev 34 Tier ShopSet アーキテクチャ beta prod-beta prod prod-ha dev → beta → prod-beta … の順で更新する

Slide 35

Slide 35 text

35 - すべての更新作業は自身より低い Tier より先に行われてはいけない dev 35 Tier ShopSet アーキテクチャ beta prod-beta prod prod-ha 下位 Tier のリリースで デグレードした場合でも 上位 Tier に影響が波及しない

Slide 36

Slide 36 text

36 - すべての更新アセットは低い Tier で動作検証済みのものを使う 36 Tier ShopSet アーキテクチャ beta prod beta beta prod beta 値をコピーせず 同じものを参照 manifests, image, etc...

Slide 37

Slide 37 text

37 - 接続する環境を切り替えるためのもの - Dev, Staging, Production など - Helm でいう values.yaml, Kustomize でいう patches 37 Configuration ShopSet アーキテクチャ

Slide 38

Slide 38 text

38 38 Configuration ShopSet アーキテクチャ Tier 1 shopset 2 shopset 1 production staging 同じバージョンの stg, prod を設定

Slide 39

Slide 39 text

39 39 Configuration ShopSet アーキテクチャ Tier 1 shopset 2 shopset 1 production バージョンの異なる prod を 同時に稼働 Tier 2

Slide 40

Slide 40 text

40 - 障害ドメイン - ShopSet に所属するショップのスケジューリングに利用 - 複数 ShopSet を利用した冗長構成を組む 40 Failure Domain ShopSet アーキテクチャ

Slide 41

Slide 41 text

41 AWS On-Prem 41 ShopSet API ショップページ カート プロキシ LB https://hoge.shop-pro.jp ShopSet API ショップページ カート プロキシ LB クラウドやクラスタのレイヤで 障害が発生しても 冗長構成で動作を担保できるように ショップのスケジューリングをする

Slide 42

Slide 42 text

42 42 制約があることで よくなること

Slide 43

Slide 43 text

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) クラウドを跨いだ複数クラスタで 透過的に同一環境が動作する

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

45 45 クラスタ障害発生時

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

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

Slide 48

Slide 48 text

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

Slide 49

Slide 49 text

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 を変更して復旧

Slide 50

Slide 50 text

50 50 アプリケーション更新

Slide 51

Slide 51 text

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 順に更新する

Slide 52

Slide 52 text

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

Slide 53

Slide 53 text

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 で更新実施後 動作確認を行う

Slide 54

Slide 54 text

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 を 更新する

Slide 55

Slide 55 text

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 アラートがでなければ次へ

Slide 56

Slide 56 text

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 更新完了

Slide 57

Slide 57 text

57 57 クラスタアップグレード

Slide 58

Slide 58 text

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

Slide 59

Slide 59 text

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

Slide 60

Slide 60 text

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

Slide 61

Slide 61 text

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 別のクラスタから ショップを再配置する

Slide 62

Slide 62 text

62 62 ShopSet の実装

Slide 63

Slide 63 text

63 63 実装への課題 ShopSet の実装 - 制約をどのように実装するか? - オペレーションがソフトウェアにロックインされるのでは?

Slide 64

Slide 64 text

64 64 制約をどのように実装するか? ShopSet の実装 - Custom Resource と Controller を実装する - 自律的に動作させられる - 人間からわかりやすい単位に抽象化できる - フレームワークに乗れば実装も楽

Slide 65

Slide 65 text

65 65 オペレーションがソフトウェアにロックインされるのでは? ShopSet の実装 - 単体のシステムから抜けられないのはつらい - Kubernetes - Custom Controller - Custom Controller しかオペレーションできないと... - Controller を頻繁に更新できない - Controller の障害時に対策が何もできない - つらい

Slide 66

Slide 66 text

66 66 Controller から ロジックを分離する

Slide 67

Slide 67 text

67 67 Controller からロジックを分離する ShopSet の実装 - Controller でしかできないオペレーションをなくす - 人間が(多少大変でも)容易に再現可能とする

Slide 68

Slide 68 text

68 68 Controller からロジックを分離する ShopSet の実装 - Controller でしかできないオペレーションをなくす - 人間が(多少大変でも)容易に再現可能とする GitOps をベースに manifests の生成を自動化する

Slide 69

Slide 69 text

69 69 GitOps? ShopSet の実装 - Git Repository を唯一の成果物とするデプロイ方式 - リポジトリのマニフェストを Kubernetes Cluster に同期する - ArgoCD が有名

Slide 70

Slide 70 text

70 70 GitOps? ShopSet の実装 - ArgoCD は `git pull` して `kubectl apply -f ` するだけ - ArgoCD が apply できる = 人間が apply できる - ArgoCD を中間レイヤにすれば複雑性を吸収できる

Slide 71

Slide 71 text

71 71 GitOps? ShopSet の実装 - ArgoCD は `git pull` して `kubectl apply -f ` するだけ - ArgoCD が apply できる = 人間が apply できる - ArgoCD を中間レイヤにすれば複雑性を吸収できる ArgoCD が apply できるリポジトリを Controller で自動生成する

Slide 72

Slide 72 text

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

Slide 73

Slide 73 text

73 73 shopset-controller がやること ShopSet の実装 - Kustomization で使う差分ファイルの生成とプッシュ - base manifests の更新 - ArgoCD Application リソースの作成と apply

Slide 74

Slide 74 text

74 74 shopset-controller が操作するリポジトリ ShopSet の実装 - system-repository - overlays に相当するファイルを保存 - shopset-controller が生成したファイルをプッシュ - ArgoCD が参照して Cluster に Apply する - app-repository - base に相当するファイルを保存 - 人間が作成しプッシュ - system-repository から git submodule として参照される

Slide 75

Slide 75 text

75 75 リポジトリを tier.yaml に記述する ShopSet の実装

Slide 76

Slide 76 text

76 76 Kustomization で使う差分ファイルの生成とプッシュ ShopSet の実装

Slide 77

Slide 77 text

77 77 Git Submodule で最新の base を参照し続ける ShopSet の実装

Slide 78

Slide 78 text

78 78 ArgoCD の Custom Resource を生成 ShopSet の実装

Slide 79

Slide 79 text

79 79 shopset-controller + GitOps で制約を実装 ShopSet の実装 - Tier の実装 - tier ごとに branch を生やす - 最下位 tier で変更を実装する - tier branch の変更を上位 branch に push

Slide 80

Slide 80 text

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

Slide 81

Slide 81 text

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 を分ける

Slide 82

Slide 82 text

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 を出す

Slide 83

Slide 83 text

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 自動デプロイされるので 動作確認する

Slide 84

Slide 84 text

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 に 変更を反映する

Slide 85

Slide 85 text

85 85 shopset-controller + GitOps で制約を実装 ShopSet の実装 - Configuration の実装 - git repository + Tier branch で管理

Slide 86

Slide 86 text

86 86 shopset-controller + GitOps で制約を実装 ShopSet の実装 - ShopSet は tier と configuration を指定するだけ

Slide 87

Slide 87 text

87 87 shopset-controller + GitOps で制約を実装 ShopSet の実装 - Failure Domain の実装 - これから

Slide 88

Slide 88 text

88 88 現状と課題

Slide 89

Slide 89 text

89 89 ShopSet の開発体制 現状と課題 - プロジェクトとしてチーム開発中 - @takutaka1220 … shopset の設計、実装, etc - @MITLicense … App の k8s-convert, ログ転送基盤の構築, etc - @ch11aki … Middleware の k8s-convert, クラスタ設計, etc - @takapi86 … App の k8s-convert, セキュリティ, etc

Slide 90

Slide 90 text

90 90 ShopSet の開発体制でうまくいったこと 現状と課題 - 一時間ほど集合するわいわいタイムを毎日開催 - 作業やってもいいし、雑談してもいいし、来なくてもいい - MTG や同期的に作業をやる場合はこの時間をあてがう

Slide 91

Slide 91 text

91 91 ShopSet の開発体制でうまくいかなかったこと 現状と課題 - 一時間ほど集合するわいわいタイムを毎日開催 - 作業やってもいいし、雑談してもいいし、来なくてもいい - MTG や同期的に作業をやる場合はこの時間をあてがう

Slide 92

Slide 92 text

92 92 ShopSet のマイルストーン 現状と課題 - 検証環境にて長期安定稼働中 - 約半年くらいトラブルなし - 制約の設計は概ねうまくいった

Slide 93

Slide 93 text

93 93 ShopSet のマイルストーン 現状と課題 - ShopSet で構築した環境をプロダクションに一部導入済み - 本日の午前中にリリースしました🎉 - 単一クラスタ、単一 ShopSet 構成

Slide 94

Slide 94 text

94 94 ShopSet 開発の課題 現状と課題 - k8s-convert がとても大変 - ドメイン知識豊富な専門家で 1 month/app くらいかかる - 構成の共通化や cluster-wide の機能提供で対応 - ログ収集 (fluentd) や、監視とアラート(prometheus) など

Slide 95

Slide 95 text

95 95 ShopSet 開発の課題 現状と課題 - プロダクト開発体制の構築 - k8s に慣れた人だけがプロダクト開発するわけじゃない - デバッグやリリースを補助するインターフェースが必要 - `shopctl` コマンドを現在設計中

Slide 96

Slide 96 text

96 96 ShopSet 開発の課題 現状と課題 - ShopSet で動作させるカラーミー環境の最適化 - キャパシティの把握 - どのくらいリクエストを食えるのかわからない - 1クラスタ上でどのくらい ShopSet をスケールさせるべきか?

Slide 97

Slide 97 text

97 97 ShopSet 開発の課題 現状と課題 - ShopSet で動作させるカラーミー環境の最適化 - Microservice のベストプラクティスの吸収 - rate limit & circuit breaker とか - observability とか

Slide 98

Slide 98 text

98 98 ShopSet 開発の課題 現状と課題 - ShopSet で動作させるカラーミー環境の最適化 - 次のボトルネックへの対処 - 無限に ShopSet を作るには? - おそらく DB Connection が枯渇しそう

Slide 99

Slide 99 text

99 99 ShopSet 開発の課題 現状と課題 - プロダクト運用の簡素化 - ショップの追加、 ShopSet の変更など - どの ShopSet を使えばいいの?などの迷いを無くす - 規約を用いて自動化する方針

Slide 100

Slide 100 text

100 100 ShopSet 開発の今後 現状と課題 - ShopSet に内包する Service の拡充 - k8s-convert との戦い - AWS EKS を用いたマルチクラウドの本番適用 - ほぼできるはず - マルチ k8s クラスタのハンドリングの実装 - クラスタライフサイクル管理、Failure Domain 実装、etc...

Slide 101

Slide 101 text

101 101 アジェンダ ● 可用性向上への道 ○ 分離環境の誕生 ● ShopSet アーキテクチャ ○ 概念 ■ Tier ■ Configuration ■ Failure Domain ○ 実装 ■ GitOps + ArgoCD ○ 導入と課題

Slide 102

Slide 102 text

102 102 おしまい