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
Listing Shipping Notification Purchase Login Search DB Monolith Review Listing DB User DB Item DB Shipping DB Timeline DB Microservices Backend team Timeline Search
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
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日にリリー スできる数は飛躍的に増える = より速く機能を提供で きる!
Listing DB Listing team User DB User team Item DB Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Resilient 1つのサービスが死んでも一 部のサービスを継続して動か せる
Listing DB Listing team User DB User team Item DB Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Resilient 1つのサービスが死んでも一 部のサービスを継続して動か せる
Listing DB Listing team User DB User team Item DB Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Resilient 1つのサービスが死んでも一 部のサービスを継続して動か せる
Listing DB Listing team User DB User team Item DB Item team Shipping DB Shipping team Timeline DB Timeline team Microservices Resilient 1つのサービスが死んでも一 部のサービスを継続して動か せる 出品はできなくても Timelineは閲覧できる
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 サービスごとに独立してス ケールすることができリソース を最適化できる
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 サービスごとに独立してス ケールすることができリソース を最適化できる
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 サービスごとに独立してス ケールすることができリソース を最適化できる
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 小さなコンテキストで開発する ことにより新機能の追加が容 易になる
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
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
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を担う必要が ある
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
Number of microservices + teams Number of tools Platform No Platform 各チームが自分たちで Toolsetsを作ると似たような ツールが大量に作られコスト的にも無駄になる 基盤チームが専属的にツールの開発と 運用を担うことでツールの乱立を抑え, 基盤の改善のLeverageが効く
Productivity = Output Input Product, Service, Function GMV Customer satisfactions Engineering efforts Develop time Test time Deploy time Operate time ...
https://itrevolution.com/book/accelerate/ Delivery lead time 企画から実際に機能やサービスをリリースするまでにかかった か? Deployment frequency どれくらいの頻度でコードをリリースしているか ? Time to restore service インシデントが発生してから普及までどれだけの時間がかかった か? Change rate fail どれくらいの頻度で変更が失敗したか ?どれくらいの頻度で Rollbackしたか?
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
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
etcd API server Scheduler Controller Manager kubelet Container A Master Node kubelet Node Container A Container A Container B Controller Kubernetesでは大量の独立した Controllerが動いておりそれぞれが Reconciliation loopを実行している.
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
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など をセットアップする
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 のチェックを行う
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