楽天がモノリスー>マイクロサービスとオンプレー>クラウドで経験した光と闇

楽天モノリスー>マイクロサービスとオンプレー>クラウドで経験した光と闇

​- デブサミの話

概要

自己紹介

  • R Aさん
  • Mソフト Aさん ​

    楽天で自分のサービス紹介

  • 各サービスが横断的に使用するファンクションを開発運用
  • サービスオペレーション改善グループに所属
  • そのなかでDMCというサービスをしている
  • 内容は、画像をためたり取得するのを引き受けるサービス ​

    CurrentStructures and problems

    過去のアーキテクトの話

  • 11年継続中で新規に変更中
  • Squid/VarnishというLayerのメンテナンス
  • 10以上あるFunctionsのVersionUP
  • アクセス負荷増加の増強
  • MogileFSのDisk交換<ーオンプレのディクスで壊れやすいから交換がいる ​

    変更後

  • ExpressRouteでAzureから楽天CDNへデータ転送
  • Squid/VarnishをAzure上に構築していたが、課金されるのでCDNで受け付けるように変更
  • Azureのキャッシュを外に提供するときに課金されるため ​

    DatabaseIssue

    AzureのMySQLの問題

  • 一月に一回定期再起動をすることが発覚
  • 楽天データセンターについてはスケジュール調整していたので問題なかった
  • Azureに移行したことでこれが発生
  • 一つのノード障害が発生時に冗長ノードへのフェールオーバが発生する
  • アプリケーションはその間60秒間のDB接続停止を伴う
  • 現在この仕組みは改善考えている(BYマイクロソフト
  • 前段にメッセージングの仕組みとかを入れる必要性があった ​

    DataTransfer Issue

    15億レコードの移行

  • そのままネットワーク経由は難しい
  • そこで、オフラインデータ移行するサービスー>AzureDataBoxを使った
  • 小中大の3プランある
  • ところが、Railsアプリケーションのアクティブストレージがネックになった
  • RailsAPIには、どこにデータを保管しているかというメタデータをもっており、それを更新する必要が発生した
  • マイクロソフトで最近GAになった機能で、AzureStackEdgeをつかったからこれを改善できる
  • オンプレからはNFSのストレージにみえるが、裏ではAzure上のストレージにあがっている
  • 学んだ点:データトランスファーが発生するアプリに関してはネットワークオーバヘッドの工数を考慮する ​

    Microservice from monolith

    マイクロサービスにした理由

  • それぞれのリクエスト量がちがったGETがはるかに多い
  • テスト工数の削減
  • トラブル時範囲を最小限
  • 起動するときの速さー>コード量が少ない方がPODの起動が早い
  • 開発の独立性 ​

    ISTIOを活用

  • マイクロサービスが多くなるので、サービスメッシュ必須
  • ISTIOをいれたHELM2を利用して
  • 最近HELM3がでている
  • availabilityゾーンで、KUBENET?があがらなかった
  • AZUREのCLIを使うと、
  • Kialiー>Network周りの確認ができる
  • Jaeger,ElasticAPMで監視がらく
  • PrometheusとGrahanaでK8sを管理
  • AlertManger/Slackも活用
  • IStio自体にもカナリアリリース機能はあるがFlaggerを使った方が楽
  • カナリアリリースをしてくれるSupenakerはむずかしかった
  • ブルーグリーンデプロイメントもしてくれる
  • 最近マイクロソフトからサービスメッシュ向けのDaprというミドルウェアが出た。
  • L7階層でなくもっと下の階層で制御できる ​

    マルチリージョン

  • 日本の西と東の2リージョン
  • availabilityゾーンを使っている<-必ず使った方が良い ​

    マイクロソフトのマルチリージョンによる負荷分散のサービス

  • マルチリージョンの負荷分散
  • リージョン内部の負荷分散
  • レプリケーション

    CI/CDPipeLIne

  • CircleCI + Kaniko + Artifactory + GitHubEnterPrise
  • Gitのタグを中心にPIPELINE作成 ​

    NextActions

    今後挑戦したいもの

  • DB:>Vitess->分散型MYSQLー>YOUTUBEで使われている
  • Messaging-> Nats -> Kafkaより楽
  • Obsevability->OpenTelemetryとイエーガー使うと、ネットワークトラフィックのトレースが簡単
  • Chaos Engineering->ChaosToolkit -> ノードを落とすサービス