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

開発者向けの基盤をつくる

 開発者向けの基盤をつくる

ハッカーズチャンプルー2019( http://hackers-champloo.org/2019 )の発表資料です

taichi nakashima

June 29, 2019
Tweet

More Decks by taichi nakashima

Other Decks in Technology

Transcript

  1. 2013年 Software Engineer at Service Development Team Tech Lead at

    Microservices Platform Team 2018年 Rakuten, Inc. 2017年 Software Engineer at SRE Team Mercari, Inc. 2015年 Software Engineer at Internal PaaS Team
  2. Listing Shipping Notification Purchase Login Search DB Monolith Review Listing

    DB User DB Item DB Shipping DB Timeline DB Microservices Timeline Search
  3. Listing Shipping Notification Purchase Login Search DB Monolith Review Backend

    team Timeline Search 人が増えても一日にリリースできる回数に限界がきて いた...
  4. Listing Shipping Notification Purchase Login Search DB Monolith Review Listing

    DB User DB Item DB Shipping DB Timeline DB Microservices Backend team Timeline Search
  5. Listing Shipping Notification Purchase Login Search DB Monolith Review Listing

    DB Listing team User DB User team Item DB Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Backend team Timeline Search
  6. Listing Shipping Notification Purchase Login Search DB Monolith Review Listing

    DB Listing team User DB User team Item DB Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Backend team Timeline Search 各チームが独立してリリースを行えれば 1日にリリー スできる数は飛躍的に増える = より速く機能を提供で きる!
  7. Listing Shipping Notification Purchase Login Timeline Search DB Monolith Availability

    1つのコンポーネントが死んだ ら全体が死ぬ... Review Search
  8. Listing Shipping Notification Purchase Login Timeline Search DB Monolith Availability

    1つのコンポーネントが死んだ ら全体が死ぬ... Review Search
  9. Listing Shipping Notification Purchase Login Timeline Search DB Monolith Availability

    1つのコンポーネントが死んだ ら全体が死ぬ... Review Search
  10. Listing Shipping Notification Purchase Login Timeline Search DB Monolith Availability

    1つのコンポーネントが死んだ ら全体が死ぬ... Review Search Scalability 1つ機能をスケールさせるた めに全体をスケールさせる必 要がありリソースの無駄遣い
  11. Listing Shipping Notification Purchase Login Timeline Search DB Monolith Availability

    1つのコンポーネントが死んだ ら全体が死ぬ... Review Search Scalability 1つ機能をスケールさせるた めに全体をスケールさせる必 要がありリソースの無駄遣い
  12. Listing Shipping Notification Purchase Login Timeline Search DB Monolith Availability

    1つのコンポーネントが死んだ ら全体が死ぬ... Review Search Scalability 1つ機能をスケールさせるた めに全体をスケールさせる必 要がありリソースの無駄遣い
  13. Listing Shipping Notification Purchase Login Timeline Search DB Monolith Availability

    1つのコンポーネントが死んだ ら全体が死ぬ... Review Search Scalability 1つ機能をスケールさせるた めに全体をスケールさせる必 要がありリソースの無駄遣い Complexity 新しい機能を追加するのが難 しい... オンボーディングが難 しい
  14. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Microservices
  15. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Resilient 1つのサービスが死んでも一 部のサービスを継続して動か せる
  16. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Resilient 1つのサービスが死んでも一 部のサービスを継続して動か せる
  17. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Resilient 1つのサービスが死んでも一 部のサービスを継続して動か せる
  18. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Resilient 1つのサービスが死んでも一 部のサービスを継続して動か せる 出品はできなくても Timelineは閲覧できる
  19. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Resilient 1つのサービスが死んでも一 部のサービスを継続して動か せる Flexible Scale サービスごとに独立してス ケールすることができリソース を最適化できる
  20. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Resilient 1つのサービスが死んでも一 部のサービスを継続して動か せる Flexible Scale サービスごとに独立してス ケールすることができリソース を最適化できる
  21. Item Item Listing DB Listing team User DB User team

    Item DB Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Resilient 1つのサービスが死んでも一 部のサービスを継続して動か せる Flexible Scale サービスごとに独立してス ケールすることができリソース を最適化できる
  22. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Resilient 1つのサービスが死んでも一 部のサービスを継続して動か せる Flexible Scale サービスごとに独立してス ケールすることができリソース を最適化できる Simplicity 小さなコンテキストで開発する ことにより新機能の追加が容 易になる
  23. Service A Team QA team SRE team Develop Service A

    Test Deploy Operate Service B Team Develop Service B Service C Team Develop Service C Microservices Bad Team Responsibility
  24. Service A Team Develop Service A Test Deploy Operate Service

    B Team Develop Service B Service C Team Develop Service C Test Deploy Operate Test Deploy Operate Microservices Ideal Team Responsibility
  25. Service A Team Backend Engineers Frontend Engineers SREs QA Service

    B Team Backend Engineers QA SREs Service C Team Backend Engineers Cross Functional Teams 重要なサービスであれば Responsibilityごとに専門のRole が存在する (e.g., Embedded SRE) サービスによってはBackend Engineerのみで開発から運用ま でのResponsibilityを担う必要が ある
  26. Develop Test Deploy Operate Prepare QA environment Setup CI Run

    integration testing Run load testing Provision infrastructure Setup automated delivery Prepare application configuration Prepare monitoring Prepare observability Prepare on-calling shift Too many things to do
  27. Number of microservices + teams Number of tools Platform No

    Platform 各チームが自分たちで Toolsetsを作ると似たような ツールが大量に作られコスト的にも無駄になる 基盤チームが専属的にツールの開発と 運用を担うことでツールの乱立を抑え, 基盤の改善のLeverageが効く
  28. Productivity = Output Input Product, Service, Function GMV Customer satisfactions

    Engineering efforts Develop time Test time Deploy time Operate time ...
  29. https://itrevolution.com/book/accelerate/ Delivery lead time 企画から実際に機能やサービスをリリースするまでにかかった か? Deployment frequency どれくらいの頻度でコードをリリースしているか ?

    Time to restore service インシデントが発生してから普及までどれだけの時間がかかった か? Change rate fail どれくらいの頻度で変更が失敗したか ?どれくらいの頻度で Rollbackしたか?
  30. Human SSH! シンプル・余計なツールが 必要ないが人間に依存して 再現性がないしスケールし ない k8s, Mesos, Nomad スケジューリングは自動化

    され再現性がありスケール もするが複雑で・新しいツー ルやトレーニングが必要に なる Ansible, Chef, Puppet 理解しやすい・再現性があ るがスケジューリングがマ ニュアルでありスケールもし ない Script Orchestrator
  31. etcd API server Scheduler Controller Manager kubelet Master Node kubelet

    Node Container B Declarative configuration Container Aを3 CPUsと1G Memで 3つ起動する
  32. etcd API server Scheduler Controller Manager kubelet Master Node kubelet

    Node Container B Declarative configuration Container Aを3 CPUsと1G Memで 3つ起動する Scheduling リソースの余裕のある Nodeを探して Containerを配置する Container A Container A Container A
  33. etcd API server Scheduler Controller Manager kubelet Master Node kubelet

    Node Container B Declarative configuration Container Aを3 CPUsと1G Memで 3つ起動する Scheduling リソースの余裕のある Nodeを探して Containerを配置する Container A Container A Container A
  34. etcd API server Scheduler Controller Manager kubelet Master Node kubelet

    Node Container B Declarative configuration Container Aを3 CPUsと1G Memで 3つ起動する Scheduling リソースの余裕のある Nodeを探して Containerを配置する Container A Container A Container A Self healing Containerが死んだときに 自動で復旧する
  35. etcd API server Scheduler Controller Manager kubelet Master Node kubelet

    Node Container B Declarative configuration Container Aを3 CPUsと1G Memで 3つ起動する Scheduling リソースの余裕のある Nodeを探して Containerを配置する Container A Container A Container A Self healing Containerが死んだときに 自動で復旧する Load balancing クラスタ内の他のContainerへの接続す る方法を提供する
  36. etcd API server Scheduler Controller Manager kubelet Container A Master

    Node kubelet Node Container A Container A Container B Controller Kubernetesでは大量の独立した Controllerが動いておりそれぞれが Reconciliation loopを実行している.
  37. Serverless Abstraction ML workload Abstraction Mercari PaaS Abstraction App App

    App App Various Abstraction Platform Various Application App App App App App App App App Productivity Mercariのワークフローにあった抽象化 を入れることで生産性を上げる ! Flexibility 様々なワークロードにあった抽象化を実 装する
  38. Mercari PaaS Abstraction App App App App Various Abstraction Platform

    Various Application App App App App App App App App Serverless Abstraction ML workload Abstraction
  39. Mercari PaaS Abstraction App App App App Various Abstraction Platform

    Various Application App App App App App App App App ML workload Abstraction
  40. Mercari PaaS Abstraction App App App App Various Abstraction Platform

    Various Application App App App App App App App App
  41. Develop Test Deploy Operate Prepare QA environment Setup CI Run

    integration testing Run load testing Provision infrastructure Setup automated delivery Prepare application configuration Prepare monitoring Prepare observability Prepare on-calling shift Too many things to do
  42. Namespace: Service A Kubernetes GCP Project: Service A Service A

    Team Spanner Container A Container A Container A Kubernetes setup 専用のnamespaceを準備する GCP Setup 専用のProjectを準備してDatabaseなど をセットアップする
  43. PR Plan & Apply Platform Team microservices-terraform CircleCI Service A

    Team Setup Service A Team Service A Team PR PR Automation Terraformの実行やStateの管理を行 う.Lintにより機械的なReviewやPolicy のチェックを行う
  44. References
 • Kubernetes manifests management and operation in Mercari ◦

    https://speakerdeck.com/b4b4r07/kubernetes-manifests-management-and-operation-in-mercari • Continuous Delivery for Microservices with Spinnaker at Mercari ◦ https://speakerdeck.com/tcnksm/continuous-delivery-for-microservices-with-spinnaker-at-mercari • Securing microservices continuous delivery using grafeas and kritis ◦ https://www.slideshare.net/VishalBanthia1/securing-microservices-continuous-delivery-using-grafeas-and -kritis • How we monitor microservices at Mercari microservices platform team ◦ https://speakerdeck.com/spesnova/how-we-monitor-microservices-at-mercari-microservices-platform-tea m