Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

オイラ大地の18年拡張し続けているECサイトをSpring Bootとk8s on Azureでマイクロサービス化する事例

1,465 views

Published on

JJUG CCC 2018 Fall (2018/12/15 http://www.java-users.jp/ccc2018fall )の登壇スライドです。 #ccc_a6

Oisixはオイシックス・ラ・大地株式会社(通称「オイラ大地」)の生鮮食品ネットショップです。Oisixでは2000年のブランド開設時よりECサイトを自社開発のJavaアプリケーションで運用しています。 本セッションでは、Java 1.3の時代からシステム拡張が続けられるモノリシックなJavaアプリケーションをSpinrg Boot/Kubernetesに切り出してマイクロサービス化し、既存のデータセンターとMicrosoft Azureのマルチクラウドで運用する取り組みについてお話します。

Published in: Engineering
  • Be the first to comment

オイラ大地の18年拡張し続けているECサイトをSpring Bootとk8s on Azureでマイクロサービス化する事例

  1. 1. オイシックス・ラ・大地株式会社 小林弘明 JJUG2018Fall オイラ大地の  18年拡張し続けているECサイトを   Spring Bootとk8s on Azureで    マイクロサービス化する事例
  2. 2. 1. 自己紹介・会社紹介 2. OisixのECサイト紹介 3. Oisixのマイクロサービスの方針 4. Oisixのマイクロサービス事例 5. 今後の計画
  3. 3. 小林弘明(こばやし ひろあき) 自己紹介 くらいからJavaプログラマ フリーでオイシックスにジョイン オイシックス 入社 システム本部 システム基盤部 基盤刷新セクション マネージャ ECサイトのマイクロサービス推進担当 ・2001年 ・2010年 ・2013年 ・2018年
  4. 4. 会社紹介 日本語表記だと
  5. 5. 略称(弊社公式)
  6. 6. 今日はこのブランドの お話になります
  7. 7. Oisixは2000年創業の 生鮮食品のネットショップ Oisixの会社紹介
  8. 8. 18年間サービス規模を拡大中 近年は年23.5%のペースで会員が増加 Oisixの会社紹介
  9. 9. Oisixの会社紹介 定期宅配 おいしっくすくらぶ 毎週木曜日に カートを準備 その週の締切日までサイト 上で自由にお買い物 カートの中身を何度でも変 更可能 キャンセル自由 海老名の 自社配送センターから 出荷 お届け日に ヤマト便で ご自宅にお届け
  10. 10. Oisixの会社紹介
  11. 11. 数人分の下ごしらえされた食材、調 味料、レシピのセット商品 近年は、 従来の生鮮食品単品ごとの販売から、 「プレミアム時短」をキーワードにシフト。 より楽しい食生活をサポートする新商品やサービスの 開発に注力。 Kit Oisix(ミールキット) Oisixのサービス紹介
  12. 12. Oisixのサービス紹介 日配品のうち3品が毎週無料に なる定額サービス 牛乳飲み放題
  13. 13. Oisixのサービス紹介
  14. 14. Oisixのサービス紹介 ブースでVegeel 配ってます!!
  15. 15. 1. 自己紹介・会社紹介 2. OisixのECサイト紹介 3. Oisixのマイクロサービスの方針 4. Oisixのマイクロサービス事例 5. 今後の計画
  16. 16. Java web app since 2000 OisixのECサイト紹介 ・OisixのECサイトは2000年の  創業当時からJavaで作成 ・ソース上のコメントで確認できる  最古の日付は2000年6月1日
  17. 17. OisixのECサイト紹介 2000/6/1 JDK 1.0 (January 23, 1996) JDK 1.1 (February 19, 1997) J2SE 1.2 (December 8, 1998) J2SE 1.3 (May 8, 2000) J2SE 1.4 (February 6, 2002) J2SE 5.0 (September 30, 2004) Java SE 6 (December 11, 2006) Java SE 7 (July 28, 2011) Java SE 8 (March 18, 2014) Java SE 9 (September 21, 2017) Java SE 10 (March 20, 2018) Java SE 11 (September 25, 2018)
  18. 18. 流石に色々古くなった部分は 都度リフォーム ・Javaのバージョンアップ  1.3 → ? → 5.0? → 8 ・文字コード  Shift-JIS → UTF-8 ・バージョン管理システム  なし? → CVS? → SVN → Git ・構成管理  なし? → Ant → Maven → Gradle OisixのECサイト紹介 バージョン管理システムの最古の履歴は2008年のためそれ以前のことは一部推測
  19. 19. 開発フローや組織体制は半年ごとに見直し  ・Growth Hack  ・DevOps  ・SRE(Site Reliability Engineering)  ・Infrastructure as code  ・The Twelve-Factor App   OisixのECサイト紹介
  20. 20. 近年のECサイトの成長により、 アプリケーション/インフラの両面で問題が発生 1. 品質の維持 2. ローンチスピード 3. スケーラビリティ ECサイトの問題点
  21. 21. 1.品質の維持 ユーザへ提供したいサービスのレベルが高度化 より複雑なプログラムが必要になっているが、設計当初には想 定していない要件を後付けで追加することも増加 システム全体が巨大で複雑になり続けており、 品質を維持したまま開発を継続していくことが次第に困難に なっている ECサイトの問題点
  22. 22. 2.ローンチスピード より多くのサービスを提供したい より早くPDCAを回したい そのためローンチまでの期間をより短縮したい しかしながら ・ECサイトが巨大で複雑になっている ・CI/CDの短縮が限界にきている このままでは、開発とリリース時間の短縮は無理 ECサイトの問題点
  23. 23. 3.スケーラビリティ サイトをご利用されるお客様の数が増加。 今後も増加が見込まれる。 サーバーパフォーマンスを維持していく必要があるが、シス テムの巨大化によりボトルネックの特定に時間がかかるよう になっている。 また、ボトルネックが見つかってもその部分だけをスケール アップすることも困難。 ECサイトの問題点
  24. 24. 画像出典:https://martinfowler.com/articles/microservices.html monolithic microservies マイクロサービス 全体が一つの大きな状態 複数の 小さなシステムに分割
  25. 25. OisixのECサイト紹介 これまでのシステムは伝統的なモノリシックな構成であり、 このままの構成だとECサイトの成長に限界  1. 品質の維持  2. ローンチスピード  3. スケーラビリティ これらの問題を解消のためマイクロサービスを導入する
  26. 26. 1. 自己紹介・会社紹介 2. OisixのECサイト紹介 3. Oisixのマイクロサービスの方針 4. Oisixのマイクロサービス事例 5. 今後の計画
  27. 27. 国内のクラウドデータセンター オンプレミス マイクロサービス化前のサーバー構成 ×20台 Oracle RAC これまでは、 ・国内のデータセンターのクラウドサービスを利用 ・20台のJavaサーバを常時運用 ・データベースはOracle RAC
  28. 28. 国内クラウドデータセンター マイクロサービス化後のサーバー構成 マイクロサービス導入後は、 国内のデータセンターは 継続して利用 Oracle RACを 継続して利用 マイクロサービス基盤 として新たな クラウドサービスの 利用を開始 ・ ・ ・ AKS Azure
  29. 29. 国内クラウドデータセンター AKS Azure ストラングラーパターン Azureを使用した マルチクラウド構成 共有データベースの 段階的な分離 1. 2. 3. マイクロサービス化後のサーバー構成
  30. 30. 1. ストラングラーパターン ストラングラーパターンとは、 「機能の特定の部分を新しいアプリケーションやサービスに 徐々に置き換えることで、レガシ システムを段階的に移行しま す。 レガシ システムからの機能が置き換えられていくと、新し いシステムは最終的に古いシステムの機能すべてを置き換 え、古いシステムを抑圧して使用停止できるようにします。」 https://docs.microsoft.com/ja-jp/azure/architecture/patterns /strangler より引用
  31. 31. ・ ・ システムは24時間365日稼働中 全てを一気にマイクロサービス化 する事は不可能 1. ストラングラーパターン 既存のECサイトを稼働させながら、 徐々にマイクロサービス部分に切り出し ている
  32. 32. 国内クラウドデータセンター 2. Azureを使用したマルチクラウド構成 AKS Azure 当初は既存のECサイトを全て コンテナ上で動作させる リフト&シフト を検討した
  33. 33. 国内クラウドデータセンター 現在のサーバー構成を前提とした設定ファイルが多く更新頻度も 高い CI&CDが独自の作り込みが多い Oisix18年の歴史の積み重ねのノウハウの結晶 そのままではKubenetesのコンテナにリフト&シフトすることは難し いことが判明 2. Azureを使用したマルチクラウド構成
  34. 34. 国内クラウドデータセンター AKS Azure リフト&シフトでの移行を断念 既存のデータセンターの構成は そのまま残す 徐々にAzure上のKubernetesに 移動させる方針に転換 2. Azureを使用したマルチクラウド構成
  35. 35. 国内クラウドデータセンター ECサイトが使う情報は 基本的に全て1つのDatabaseに格納されている 3. 共有データベースの段階的な分離
  36. 36. 国内クラウドデータセンター Azure マイクロサービスでは、 各サービスが使用する 情報はそのサービスからだ けアクセスされる データベースに分割するの が原則。 DBの分割を検討。 3. 共有データベースの段階的な分離
  37. 37. 国内クラウドデータセンター 3. 共有データベースの段階的な分離 検討の結果ApplicationとDatabaseは 密結合で分割が難しいことが判明。 ・SELECTで複雑なjoinを多用 ・多数のドメインの更新を1トランザクションで更新 DB分割はすぐには無理と判断
  38. 38. 国内クラウドデータセンター Azure ・最初にApplicationを分割 ・Databaseは既存の共有データベースをそのまま使用 3. 共有データベースの段階的な分離 段階的に マイクロサービス化
  39. 39. 国内クラウドデータセンター Azure 3. 共有データベースの段階的な分離 移行が完了した時点でDatabaseを分割する方針 applicationからのみ共有 データベースの特定の テーブルが参照・更新さ れる様に徐々に移行
  40. 40. Oisixのマイクロサービスの方針 ストラングラーパターン Azureを使用した マルチクラウド構成 共有データベースの 段階的な分離 1. 2. 3.
  41. 41. Why Azure?
  42. 42. Why Azure? 2018年初めの マイクロサービスアーキテクチャの選択肢 アプリケーション インフラストラクチャー
  43. 43. Why Azure? 説明は省略 Spring Boot
  44. 44. Why Azure? コンテナのオーケストレーション環境 AWS、GCP、Azureの3大クラウドで全て採用が決定 ディファクトスタンダードとなる 社内調査でも運用可能と判断 ただし、Kubernetesの運用にリソースをさくのは難しいためマ ネージドの環境で利用したい 初めての挑戦のため相談できる方が欲しい Kubernetes
  45. 45. Why Azure? 様々な方に相談する中で Azureに Kubernetesのマネージドサービスが あることを教えていただく でも Azure?
  46. 46. Why Azure? 様々な方に相談する中で Kubernetesのマネージドのサービスがある Azureを紹介していただく Azureといえば Microsoft MicrosoftといえばC# うちはJavaの会社。大丈夫?
  47. 47. Why Azure? 引用元 https://github.com/yoshioterada もともとは Sun Java Champion 現在は Microsoft
  48. 48. Why Azure? 引用元 https://github.com/yoshioterada Cloud Developer Advocate Java Champion
  49. 49. Why Azure? システム部の主要メンバーがMacを片手に 品川のマイクロソフト本社を訪問 寺田さん 弊社 Mac Pro 弊社MacBook 弊社MacBook
  50. 50. Why Azure? 引用元 https://www.slideshare.net/tyoshio2002/java-on-microsoft-a zure-57397771 https://start.spring.io/
  51. 51. Why Azure? 寺田さん ハックフェストを開催していたき、 KubernetesとAzureのレクチャーをしていただき 手応えを掴む 引用元 http://creators.oisix.co.jp/entry/2018/05/15/180000
  52. 52. Why Azure? その後マイクロサービスプロジェクトを 本格的に開始する時に 日本サーバでマネージドのKubernetesサービス AKSが 正式に開始されることがアナウンスされた Azure採用を決定 既存のデータセンターとAzureのデータセンターの 間に専用のネットワーク回線を引き運用を開始
  53. 53. WWW 監視系国内クラウドデータセンター 既存のデータセンターとAzureのマルチクラウド構成 AKS Azure Storage Queue Azure MySQL Azure Redis Cache ブラウザ iPhone App Android App Log Analytics Monitor
  54. 54. Spring Boot Azure Kubernetes Service(AKS) 導入後の開発フロー Java Kotlin Docker Hub コンテナ イメージ GitLab Swagger Nexus Azure docker push gradle bootJar docker build kubectl apply AKS git cloneSwagger Code Generator ’
  55. 55. 1. 自己紹介・会社紹介 2. OisixのECサイト紹介 3. Oisixのマイクロサービスの方針 4. Oisixのマイクロサービス事例 5. 今後の計画
  56. 56. Oisixのマイクロサービス事例 事例1 ログ検索サービス 事例2 受注確定バッチ 事例3 商品サービス
  57. 57. microservices 事例
  58. 58. ログ検索サービス ECサイトからは毎日大量のログが出力される ログの中から特定の条件のデータのみをピンポイントで取得す るサービス もともとは無かった機能 新規の小さな機能のため、マイクロサービスで作成 マイクロサービス事例1 ログ検索サービス
  59. 59. Azure AKS ログ検索サービス 国内クラウド データセンター WWW マイクロサービス事例1 ログ検索サービス log Elasticsearch AWS https:// https:// td-agent 社内システム https://https:// 社内担当
  60. 60. microservices 事例
  61. 61. マイクロサービス事例2 受注確定バッチ 受注確定バッチ 週1回の定期宅配サービスのため、 毎週特定の曜日に大規模なバッチが起動 お客様の増加によりサーバーが圧迫 特定のバッチにリソースを割り振理すぎると他のサービスが不 安定 リソースの切り替えにサーバーの再起動が必要 マイクロサービスに切り出して全体を安定させてたかった
  62. 62. 国内クラウド データセンター 起動バッチ マイクロサービス事例2 受注確定バッチ Azure AKS Storage Queue Azure MySQL 確定バッチ 対象受注 取得 受注確定 対象受注 保存 メトリクス収集 Log Analytics Monitor
  63. 63. 振替バッチ マイクロサービス事例2 受注確定バッチ AKS Storage Queue Azure MySQL 対象受注 取得 対象受注 保存 メトリクス収集 Log Analytics Monitor Azure 受注確定 確定バッチ 国内クラウド データセンター マイクロサービス化後 はマルチクラウド化に よりDatabaseとアプリ ケーションの通信時間 による遅延が発生。 k8s化によるメリットを いかしPodのレプリ ケーション数を増加。
  64. 64. 振替バッチ マイクロサービス事例2 受注確定バッチ AKS Storage Queue Azure MySQL 対象受注 取得 受注確定 対象受注 保存 メトリクス収集 Log Analytics Monitor 国内クラウド データセンター Azure レプリケーション数を増やしただけ 処理時間の短縮ができる見込みができる。 確定バッチ
  65. 65. 振替バッチ マイクロサービス事例2 受注確定バッチ AKS Storage Queue Azure MySQL 対象受注 取得 受注確定 対象受注 保存 メトリクス収集 Log Analytics Monitor 国内クラウド データセンター Azure と、思ったが、 SREチームよりコネクションを 使いすぎとの連絡があり。 確定バッチ
  66. 66. 国内クラウド データセンター 起動バッチ マイクロサービス事例2 受注確定バッチ Azure AKS Storage Queue Azure MySQL 確定バッチ 対象受注 取得 受注確定 対象受注 保存 メトリクス収集 Log Analytics Monitor 現在は、元の処理時間をやや短縮したくらいで 終わるレプリケーション数で安定動作中。
  67. 67. microservices 事例
  68. 68. 商品サービス 商品系マスタは最もアクセス頻度が高いテーブル。 過去にはサイトアクセスのピーク時にDatabase負荷が高くなり サイト全体が不安定になる原因となったことも。 商品マスタは参照情報のためトランザクションが発生せず切り 出しやすいためマイクロサービスに切り出した。 マイクロサービス事例3 商品サービス
  69. 69. Azure AKS 商品サービス 国内クラウド データセンター Azure Redis Cache WWW マイクロサービス事例3 商品サービス https:// 商品情報 API Redisから キャッシュを 取得 3,4でデータが無ければ monolithic databaseから取得 Redisに キャッシュ
  70. 70. AKS WWW Azure 商品サービス 国内クラウド データセンター Azure Redis Cache マイクロサービス事例3 商品サービス Redisにキャッシュできてい ない場合、クラウドを 2往復。遅い。 実際にやってみると
  71. 71. AKS WWW Azure 商品サービス データセンター Azure Redis Cache マイクロサービス事例3 商品サービス ステージング検証で ひどいと1ページの表示に 14秒
  72. 72. Azure AKS 商品サービス 国内クラウド データセンター Azure Redis Cache WWW マイクロサービス事例3 商品サービス 当面の対応として cronで先に キャッシュしている
  73. 73. Azure AKS 商品サービス 国内クラウド データセンター WWW マイクロサービス事例3 商品サービス Azure MySQL https:// ajax 将来的にはAzureに商品DBを分割して、 クラウド間の通信を無くしたい。
  74. 74. 1. 自己紹介・会社紹介 2. OisixのECサイト紹介 3. Oisixのマイクロサービスの方針 4. Oisixのマイクロサービス事例 5. 今後の計画
  75. 75. 監視系国内クラウドデータセンター AKS Azure Storage Queue Azure MySQL Azure Redis Cache Log Analytics Monitor 今後の計画 全てのJavaアプリケーションを マイクロサービスに移植して AKSで動作する状態に以降 WWW ブラウザ iPhone App Android App
  76. 76. WWW 監視系国内クラウドデータセンター AKS Azure Storage Queue Azure MySQL Azure Redis Cache ブラウザ iPhone App Android App Log Analytics Monitor 今後の計画 API Management API Managementを介して ブラウザとAzureが直接通信する 状態に以降
  77. 77. WWW 監視系 AKS Azure Storage Queue Azure MySQL Azure Redis Cache ブラウザ iPhone App Android App Log Analytics Monitor 今後の計画 API Management オンプレミスで 運用しているDBを マネージドの サービスへ移行 (具体的な選択肢は調査中)
  78. 78. WWW 監視系 AKS Azure Storage Queue Azure MySQL Azure Redis Cache ブラウザ iPhone App Android App Log Analytics Monitor 今後の計画 API Management Vue.js フロントエンドを Vue.jsに移行
  79. 79. WWW 監視系 AKS Azure Storage Queue Azure MySQL Azure Redis Cache ブラウザ iPhone App Android App Log Analytics Monitor 今後の計画 API Management Vue.js
  80. 80. 今後の計画
  81. 81. 今日のまとめ Oisixはオイラ大地のECサイト 2000年の創業時からJavaで運営 さらなるサービス規模拡大に向け Spring BootとKubernetesで マイクロサービスを推進 プラットフォームとして Microsoft AzureとAKSを使用 これからも積極的に新技術を導入 ・ ・ ・ ・ ・
  82. 82. エンジニアリングで 食卓と畑を変える 仲間を募集中

×