Developers Summit 2020 - 13-A-5

F726c60218757a2e4b82a09c491af75a?s=47 k.yanagimoto
February 13, 2020

Developers Summit 2020 - 13-A-5

F726c60218757a2e4b82a09c491af75a?s=128

k.yanagimoto

February 13, 2020
Tweet

Transcript

  1. 楽天が モノリス→マイクロサービス & オンプレ→クラウド で経験した光と闇 Feb 13th, 2020 Koichi Yanagimoto,

    EC Incubation Development Dept., Rakuten, Inc. Yosuke Arai, Microsoft Japan Co., Ltd.
  2. 2 Who are we? Koichi Yanagimoto (@kyanagimoto) 楽天株式会社 Software Engineer

    Ruby好き スノボ好き Nikotama.rbを主催 Yosuke Arai (@yosukearai) ⽇本マイクロソフト Cloud Solution Architect 動画配信技術勉強中 ベースを弾いてます ノドにポリープができました、、
  3. 3 About Our Team and Today’s topics Service Operation Kaizen

    Group Our mission “少ない⼈数でより多くのサービスの運⽤を︕” 11 Services/Group Today’s Target Service DMC (画像Storage/APIs) Get / Store / Delete… About 10 Functions
  4. 4 1.Current Structures and problems 2.Network Cost Issue 3.Database Issue

    4.Data Transfer issue 5.Microservice from Monolith 6.CI/CD Pipeline 7.Next Actions
  5. 5 Old Structure ⾊々な問題点が… • Squid/VarnishのLayerのメンテナンス • 10以上あるFunctions, Version Up…

    • アクセス負荷増のときの増強 • MogileFSのDisk交換 などなど
  6. 6 Old Structure -> New Structure

  7. 7 Try 1 – Network Cost Issue

  8. 8 How to cost on Azure? - Network Azureの外に出るときに課⾦される…。 VarnishでCacheしてる意味ないやん…。

  9. 9 Old Structure -> New Structure ?????

  10. 10 Takeaway • 課⾦の仕組みをしっかり確認すること。 • Architectureはシンプルに保つ。 • Cacheを置くなら効率的に…。 (Consulでの⾃動化の仕組みは使うことができなかったけど、どこかで使いたい…)

  11. 11 Try 2 – Database issue いくつか問題点が出てきてしまった… 1. Azure MySQLは、HW障害などにより、予告なしに中断する

    2. Azure MySQLは、⽉イチ程度メンテナンスのため停⽌→再起動 (停⽌時間10数秒、不定回数、事前予告なし、⽇時指定も不可) 完璧に想定外︕w (その当時は…) 楽天DCのMySQL, スケジュール調整もできるし、⽉イチでは落ちない… (あと、AzureMySQLより値段安め…)
  12. … Azure Storage MySQL Server Secure container X MySQL Server

    Secure container PostgreSQL: 5432 MySQL: 3306 MySQL Client Azure 3 copies of data for data reliability Azure Database for MySQL ⾼可⽤性、計画メンテナンス • Built-in HA – 冗⻑ノードへのfail-over実施 – アプリケーションは通常最⼤で 60 秒 未満の間、Databaseへの接続を失う • 通知 – [Preview in East US and UK South] Service health事前通知 • メンテナンスWindow – 現状機能無し – (参考) メンテナンスwindowを指定できる 他サービス SQL Datawarehouse, Azure Redis, Azure VM (Dedicated host) https://docs.microsoft.com/ja-jp/azure/mysql/howto-troubleshoot-common-connection-issues https://docs.microsoft.com/ja-jp/azure/mysql/concepts-monitoring#service-health
  13. 14 Takeaway • Databaseも落ちるものだという前提で。 • 前段にMessagingの仕組みとかを⼊れると冗⻑性↑。

  14. 15 Try 3 – Data Transfer issue 約260TB 約15億 Records

    Azure Data Box
  15. 16 OFFLINE data transfer: Azure Databox Family 80TB \28,000+\1,680/⽇+送料 GA

    At Japaneast/west Not GA At Japaneast/west 7TB \5,600+\1,120/⽇+送料 770TB \448,000+\11,200/⽇+送料 https://azure.microsoft.com/ja-jp/services/databox/data/
  16. 17 Gave up to use Azure Databox… ⾊々と気をつかって原始的な感じでゴリゴリ… • Networkの帯域を使い切っちゃう恐れがあるの

    で、LoadBalancerに紐づけて、必要以上に負荷 をかけないように • ActiveStorageがmetadataの更新している間、 Imageを掴んでいて、メモリリーク… • ActiveStorage側でheaderの値を渡していないの で、今azure-core側のdefaultのheader情報⼊って る…w (PRチャンス?) • Long Long Journey…
  17. Azure ポータルから申し込める⽉額課⾦ のマネージド ハードウェア サービス Azure Storage オンプレミス データ SMB/NFS

    Share Storage Gateway Azure IoT Edge Azure Stack Edge ONLINE data transfer: Azure Stack Edge https://azure.microsoft.com/ja-jp/pricing/details/databox/edge/
  18. 19 Takeaway • Network Overheadがあるので、単純計算ではいかない • Schemaの変更の有無で状況が⼀変… • 完璧に違うVersionで作ってしまって、利⽤サービスに徐々に 切り替えていってもらうのが許容できれば、そうした⽅が…

  19. 20 Try 4 – Microservice from Monolith Microservice︖ Single purpose

    / Loose Coupling / High cohesion
  20. 21 Why shifted to Microservices? Reasons 1.それぞれのFunctionでリクエスト量が全然違う 2.テスト⼯数の削減 (将来的な) 3.トラブル時、範囲を最⼩限に

    4.起動するときの速さ 5.開発の独⽴性
  21. 22 Service Mesh - Istio • With Helm2 • AZ-AKS

    with Kubenet CNI => Failed… => azure CNIを利⽤ • 今後、istioのInstall周り、変化あり? • Kiali : Network周り確認できるので便利。 • Jaeger, ElasticAPM • Prometheus / Grafana / AlertManager / Slack
  22. 23 Flagger / Canary deployment https://docs.flagger.app/usage/progressive-delivery

  23. 24 Flagger / Canary deployment https://docs.flagger.app/usage/progressive-delivery

  24. Dapr: Build apps using any language with any framework Any

    code or framework… Functions S e r v i c e s w r i t t e n i n .NET Core Microservice application Service-to- service invocation State management Publish and subscribe Resource bindings & triggers Actors Distributed tracing Extensible… HTTP/gRPC APIs Any cloud or edge infrastructure https://www.publickey1.jp/blog/19/dapr.html https://github.com/dapr/dapr/wiki/FAQ#how-does-dapr-work-with-service-meshes
  25. 26 Takeaway • Microserviceにするのであれば、 Service Meshで管理することをオススメ。 • Istioで持っているCanary deploymentの機能もいいけど、 Flaggerもいいですよ。

    • Observabilityをちゃんとしないと痛い⽬に…。
  26. 27 Try 5 – Multi Region

  27. Resiliency and SLA in Azure VM SLA 99.9% 可⽤性セット •

    冗⻑構成のためのVMグ ループ。複数の更新ド メインと障害ドメイン を備える 可⽤性ゾーン(AZ) • 独⽴した電源、冷却⼿段、 ネットワークを備えた、 1以上のデータセンター ペアリージョン • ペアリージョンの両⽅を 同時にメンテナンスしない • 複数リージョン障害時、各 ペアの少なくとも⽚⽅を 優先復旧 VM SLA 99.95% VM SLA 99.99% Regions 54 Azure VM SLA: https://azure.microsoft.com/ja-jp/support/legal/sla/virtual-machines/v1_9/ 障害ドメイン • 電源とNW switchを共有す るVMグループ。最⼤3ドメ イン 更新ドメイン • 同時に再起動されるVMグ ループ。5~最⼤20ドメイ ン n データセンターの 全体障害への対応 n データセンターの 部分障害への対応 n マルチリージョン 構成 n シングルVM構成 での可⽤性
  28. Multi-region architecture in Azure • 負荷分散 – マルチリージョン負荷分散 • Azure

    Front door (Managed Global L7 LB) • Azure Traffic Manager (Managed DNS LB) – リージョン内負荷分散 • Application Gateway (Managed L7 LB) – Internal load balancing • Azure Load Balancer (Managed L4 LB) • レプリケーション – VM: Azure Site Recovery – Storage: Geo冗⻑Storage(GRS) – Database (MySQL): Azure MySQL geo replication (Geo backup & restore) Azure Front Door https://docs.microsoft.com/ja-jp/azure/frontdoor/front-door-overview https://docs.microsoft.com/ja-jp/azure/traffic-manager/traffic-manager-overview https://docs.microsoft.com/ja-jp/azure/application-gateway/application-gateway-faq https://docs.microsoft.com/ja-jp/azure/site-recovery/azure-to-azure-common-questions https://docs.microsoft.com/ja-jp/azure/storage/common/storage-redundancy https://docs.microsoft.com/ja-jp/azure/mysql/concepts-backup
  29. 30 Try 6 – CI/CD Pipeline

  30. 31 Takeaway • CircleCI + GithubEnterprise + Kaniko + Artifactory

    • GitのTagを中⼼にpipeline作成 極⼒シンプルにしたつもり • kubectlでは-k optionを利⽤して、kustomizeを利⽤。 yml地獄からの脱出 • Canary⽤のmanifestもkustomize配下に配置
  31. 32 Try X – New challenges from now • Database

    – Vitess • Messaging – Nats • Observability – Open Telemetry • Chaos Engineering – Chaos Toolkit
  32. Azure 参考情報 #1 Azure Architecture Center https://docs.microsoft.com/ja-jp/azure/architecture/reference-architectures/microservices/aks

  33. Azure参考情報 #2. AKS best practice • Applying best practices to

    Azure Kubernetes Service (AKS) – https://myignite.techcommunity.microsoft.com/sessions/81598?source=schedule • 可⽤性ゾーン (Availability Zone) とAKS – https://docs.microsoft.com/ja-jp/azure/aks/availability-zones • AKS BCP and DR Best practice – https://docs.microsoft.com/ja-jp/azure/aks/operator-best-practices-multi-region
  34. https://aka.ms/13-A-5 QRコードからアンケートにお答えいただいた⽅に ロゴ⼊りトートバックをプレゼント︕ ※ ノベルティを引き換えする時に、アンケート送信後の画⾯を スタッフにお⾒せいただけますようお願いします。 ※ ノベルティの数量に限りがございます。表⽰と異なるノベル ティになることがございますので予めご了承ください。 1

    分で 完了‼ 13-A-5
  35. None