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

カラーミーショップの 可用性向上のための インフラ刷新

Defdf943f6e9bfc3d3cd856d9d9e0f9b?s=47 Takuya TAKAHASHI
April 13, 2021
150

カラーミーショップの 可用性向上のための インフラ刷新

GMO Developers Night で発表した内容です

Defdf943f6e9bfc3d3cd856d9d9e0f9b?s=128

Takuya TAKAHASHI

April 13, 2021
Tweet

Transcript

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

    GMO Developers Night
  2. 2 2 アジェンダ • 自己紹介 • カラーミショップが抱える課題 • 可用性向上への道 ◦

    分離環境の誕生 • ShopSet アーキテクチャ ◦ 概念 ◦ 実装 ◦ 導入と課題 • まとめ
  3. 3 自己紹介 3

  4. 4 4 高橋 拓也 (takutaka) 自己紹介 • インフラエンジニア @ GMO

    ペパボ • 所属: 技術部 技術基盤チーム • 自宅サーバを飼っています • https://github.com/takutakahashi • https://www.takutakahashi.dev • https://twitter.com/takutaka1220 写真
  5. 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 6 カラーミーショップ

  7. 7 7

  8. 8 解決したい課題 8

  9. 9 9 EC の需要が増加🏠

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

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

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

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

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

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

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

    システムの安定性を 更に向上させる施策が必要になった
  17. 17 可用性向上への道 17

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

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

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

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

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

    分離環境を応用して 多くの課題を解決できるのでは?🤔
  23. 23 23 分離環境の応用 カラーミー カラーミー 分離環境 カラーミー カラーミー カラーミー カラーミー

    カラーミー カラーミー カラーミー N 環境 ゼロコストで分離環境を作成し 高トラフィック対策以外でも利用する
  24. 24 ShopSet アーキテクチャ 分離環境改め 24 規約を盛り込んだ分離環境

  25. 25 25 ShopSet API ショップ ページ カート プロキシ LB https://hoge.shop-pro.jp

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

    API ショップページ カート プロキシ LB ひとつ以上の ShopSet で 冗長構成を取る
  27. 27 AWS On-Prem 27 ShopSet API ショップページ カート プロキシ LB

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

    https://hoge.shop-pro.jp ShopSet API ショップページ カート プロキシ LB ShopSet のポータビリティを高め マルチクラウド構成を取ることで プラットフォーム冗長を実現する 自律的構築運用と ポータビリティを実現するために Kubernetes 上に ShopSet を構築する
  29. 29 29 ShopSet アーキテクチャの要 ShopSet アーキテクチャ - 大量の環境を管理することは非常に大変 - 以下の指針を設定

    - 人間による管理をしない - 規約を厳格に設計し、規約のもと自動化を徹底する
  30. 30 30 ShopSet が持つ規約 ShopSet アーキテクチャ 新たな概念を導入する - Tier -

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

    Configuration - Failure Domain Kubernetes Custom Resource として実装し 規約をシステムに強制する
  32. 32 - レベリングされた更新単位のこと - ShopSet は必ずひとつの Tier に所属する - 同じ

    Tier に属する ShopSet はすべて同タイミングで更新される 32 Tier ShopSet アーキテクチャ Tier 1 shopset shopset Tier 2 shopset shopset Tier 3 shopset shopset リリースは Tier 単位でトリガ
  33. 33 - すべての更新作業は自身より低い Tier より先に行われてはいけない 33 Tier が持つ制約 ShopSet アーキテクチャ

  34. 34 - すべての更新作業は自身より低い Tier より先に行われてはいけない dev 34 Tier ShopSet アーキテクチャ

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

    beta prod-beta prod prod-ha 下位 Tier のリリースで デグレードした場合でも 上位 Tier に影響が波及しない
  36. 36 - すべての更新アセットは低い Tier で動作検証済みのものを使う 36 Tier ShopSet アーキテクチャ beta

    prod beta beta prod beta 値をコピーせず 同じものを参照 manifests, image, etc...
  37. 37 - 接続する環境を切り替えるためのもの - Dev, Staging, Production など - Helm

    でいう values.yaml, Kustomize でいう patches 37 Configuration ShopSet アーキテクチャ
  38. 38 38 Configuration ShopSet アーキテクチャ Tier 1 shopset 2 shopset

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

    1 production バージョンの異なる prod を 同時に稼働 Tier 2
  40. 40 - 障害ドメイン - ShopSet に所属するショップのスケジューリングに利用 - 複数 ShopSet を利用した冗長構成を組む

    40 Failure Domain ShopSet アーキテクチャ
  41. 41 AWS On-Prem 41 ShopSet API ショップページ カート プロキシ LB

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

  43. 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 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 45 クラスタ障害発生時

  46. 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 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 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 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 50 アプリケーション更新

  51. 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 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 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 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 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 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 57 クラスタアップグレード

  58. 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 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 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 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 62 ShopSet の実装

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

  64. 64 64 制約をどのように実装するか? ShopSet の実装 - Custom Resource と Controller

    を実装する - 自律的に動作させられる - 人間からわかりやすい単位に抽象化できる - フレームワークに乗れば実装も楽
  65. 65 65 オペレーションがソフトウェアにロックインされるのでは? ShopSet の実装 - 単体のシステムから抜けられないのはつらい - Kubernetes -

    Custom Controller - Custom Controller しかオペレーションできないと... - Controller を頻繁に更新できない - Controller の障害時に対策が何もできない - つらい
  66. 66 66 Controller から ロジックを分離する

  67. 67 67 Controller からロジックを分離する ShopSet の実装 - Controller でしかできないオペレーションをなくす -

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

    人間が(多少大変でも)容易に再現可能とする GitOps をベースに manifests の生成を自動化する
  69. 69 69 GitOps? ShopSet の実装 - Git Repository を唯一の成果物とするデプロイ方式 -

    リポジトリのマニフェストを Kubernetes Cluster に同期する - ArgoCD が有名
  70. 70 70 GitOps? ShopSet の実装 - ArgoCD は `git pull`

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

    して `kubectl apply -f ` するだけ - ArgoCD が apply できる = 人間が apply できる - ArgoCD を中間レイヤにすれば複雑性を吸収できる ArgoCD が apply できるリポジトリを Controller で自動生成する
  72. 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 73 shopset-controller がやること ShopSet の実装 - Kustomization で使う差分ファイルの生成とプッシュ -

    base manifests の更新 - ArgoCD Application リソースの作成と apply
  74. 74 74 shopset-controller が操作するリポジトリ ShopSet の実装 - system-repository - overlays

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

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

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

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

  79. 79 79 shopset-controller + GitOps で制約を実装 ShopSet の実装 - Tier

    の実装 - tier ごとに branch を生やす - 最下位 tier で変更を実装する - tier branch の変更を上位 branch に push
  80. 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 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 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 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 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 85 shopset-controller + GitOps で制約を実装 ShopSet の実装 - Configuration

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

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

    Domain の実装 - これから
  88. 88 88 現状と課題

  89. 89 89 ShopSet の開発体制 現状と課題 - プロジェクトとしてチーム開発中 - @takutaka1220 …

    shopset の設計、実装, etc - @MITLicense … App の k8s-convert, ログ転送基盤の構築, etc - @ch11aki … Middleware の k8s-convert, クラスタ設計, etc - @takapi86 … App の k8s-convert, セキュリティ, etc
  90. 90 90 ShopSet の開発体制でうまくいったこと 現状と課題 - 一時間ほど集合するわいわいタイムを毎日開催 - 作業やってもいいし、雑談してもいいし、来なくてもいい -

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

    MTG や同期的に作業をやる場合はこの時間をあてがう
  92. 92 92 ShopSet のマイルストーン 現状と課題 - 検証環境にて長期安定稼働中 - 約半年くらいトラブルなし -

    制約の設計は概ねうまくいった
  93. 93 93 ShopSet のマイルストーン 現状と課題 - ShopSet で構築した環境をプロダクションに一部導入済み - 本日の午前中にリリースしました🎉

    - 単一クラスタ、単一 ShopSet 構成
  94. 94 94 ShopSet 開発の課題 現状と課題 - k8s-convert がとても大変 - ドメイン知識豊富な専門家で

    1 month/app くらいかかる - 構成の共通化や cluster-wide の機能提供で対応 - ログ収集 (fluentd) や、監視とアラート(prometheus) など
  95. 95 95 ShopSet 開発の課題 現状と課題 - プロダクト開発体制の構築 - k8s に慣れた人だけがプロダクト開発するわけじゃない

    - デバッグやリリースを補助するインターフェースが必要 - `shopctl` コマンドを現在設計中
  96. 96 96 ShopSet 開発の課題 現状と課題 - ShopSet で動作させるカラーミー環境の最適化 - キャパシティの把握

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

    のベストプラクティスの吸収 - rate limit & circuit breaker とか - observability とか
  98. 98 98 ShopSet 開発の課題 現状と課題 - ShopSet で動作させるカラーミー環境の最適化 - 次のボトルネックへの対処

    - 無限に ShopSet を作るには? - おそらく DB Connection が枯渇しそう
  99. 99 99 ShopSet 開発の課題 現状と課題 - プロダクト運用の簡素化 - ショップの追加、 ShopSet

    の変更など - どの ShopSet を使えばいいの?などの迷いを無くす - 規約を用いて自動化する方針
  100. 100 100 ShopSet 開発の今後 現状と課題 - ShopSet に内包する Service の拡充

    - k8s-convert との戦い - AWS EKS を用いたマルチクラウドの本番適用 - ほぼできるはず - マルチ k8s クラスタのハンドリングの実装 - クラスタライフサイクル管理、Failure Domain 実装、etc...
  101. 101 101 アジェンダ • 可用性向上への道 ◦ 分離環境の誕生 • ShopSet アーキテクチャ

    ◦ 概念 ▪ Tier ▪ Configuration ▪ Failure Domain ◦ 実装 ▪ GitOps + ArgoCD ◦ 導入と課題
  102. 102 102 おしまい