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

[DevDojo] Microservices Development 101

mercari
December 23, 2022

[DevDojo] Microservices Development 101

In this course, we will explain a basic overview of Microservices and various tools combined with GitOps used inside Mercari which powers the developer platform.

mercari

December 23, 2022
Tweet

More Decks by mercari

Other Decks in Technology

Transcript

  1. Goals of this course
 • Learn about Mercari microservice platform

    • Learn about development tools at Mercari that support microservices. You can deploy your microservices from day 1 at Mercari
  2. Non-Goals of this course
 • We won’t cover what are

    microservices in details just the basics. • We don’t cover how Mercari listing works • We don’t cover how Mercari transaction works • … We don’t cover domain-specific knowledges here
  3. Listing Shipping Notification Review Purchase Login Timeline Search Search MySQL

    Mercari Monolith Solr Scalability Need to scale everything for one part of functionalities.
  4. Listing Shipping Notification Review Purchase Login Timeline Search Search MySQL

    Mercari Monolith Solr Scalability Need to scale everything for one part of functionalities.
  5. Listing Shipping Notification Review Purchase Login Timeline Search Search MySQL

    Mercari Monolith Solr Scalability Need to scale everything for one part of functionalities. Availability If one part is dead, everything is dead...
  6. Listing Shipping Notification Review Purchase Login Timeline Search Search MySQL

    Mercari Monolith Solr Scalability Need to scale everything for one part of functionalities. If one part is dead, everything is dead... Availability
  7. Listing Shipping Notification Review Purchase Login Timeline Search Search MySQL

    Mercari Monolith Solr Scalability Need to scale everything for one part of functionalities. If one part is dead, everything is dead... Availability
  8. Listing Shipping Notification Review Purchase Login Timeline Search Search MySQL

    Mercari Monolith Solr Scalability Need to scale everything for one part of functionalities. If one part is dead, everything is dead... Availability
  9. Listing Shipping Notification Review Purchase Login Timeline Search Search MySQL

    Mercari Monolith Solr Scalability Need to scale everything for one part of functionalities. If one part is dead, everything is dead... Complexity Difficult to add new features Difficult to try new technologies Difficult to onboard Availability
  10. Listing Shipping Notification Review Purchase Login Timeline Search Search MySQL

    Mercari Monolith Solr Scalability Need to scale everything for one part of functionalities. If one part is dead, everything is dead... Complexity Difficult to add new features Difficult to try new technologies Difficult to onboard Velocity Too many overheads, no isolation in criticality Availability
  11. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team
  12. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Resilient Even if one service is dead, others can continue to work
  13. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Resilient Even if one service is dead, others can continue to work
  14. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Resilient Even if one service is dead, others can continue to work
  15. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Resilient Even if one service is dead, others can continue to work
  16. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Resilient Even if one service is dead, others can continue to work Flexible scaling Each service can scale independently and on demand
  17. Listing DB Listing team User DB User team Item DB

    Item team Shipping DB Shipping team Timeline DB Timeline team Resilient Even if one service is dead, others can continue to work Flexible scaling Each service can scale independently and on demand
  18. Item Item Listing DB Listing team User DB User team

    Item DB Item team Shipping DB Shipping team Timeline DB Timeline team Resilient Even if one service is dead, others can continue to work Flexible scaling Each service can scale independently and on demand
  19. Item Item Listing DB Listing team User DB User team

    Item DB Item team Shipping DB Shipping team Timeline DB Timeline team Resilient Even if one service is dead, others can continue to work Flexible scaling Each service can scale independently and on demand Simplicity Easy to add new features Easy to use well suited technologies (e.g., DB)
  20. Item Item Listing DB Listing team User DB User team

    Item DB Item team Shipping DB Shipping team Timeline DB Timeline team Resilient Even if one service is dead, others can continue to work Flexible scaling Each service can scale independently and on demand Simplicity Easy to add new features Easy to use well suited technologies (e.g., DB) Agility Independent deployment Independent decisions in a small context
  21. Item Item Listing DB Listing team User DB User team

    Item DB Item team Shipping DB Shipping team Timeline DB Timeline team Resilient Even if one service is dead, others can continue to work Flexible scaling Each service can scale independently and on demand Simplicity Easy to add new features Easy to use well suited technologies (e.g., DB) Agility Independent deployment Independent decisions in a small context
  22. More about microservices
 • Microservices by Martin Fowler • Building

    Microservices by Sam Newman (Book) • Production-Ready Microservices by Susan Fowler (Book) • Adopting Microservices at Netflix • Microservices at Spotify
  23. Roles of microservices developers
 • Develop software for business benefits

    • Write unit tests and integration tests • Response to alerts and incidents • Automate operations and reduce toils • Improve your service reliability based on SLI/SLO • You can and should go bold You need to act as SWE, SET, and SRE
  24. Develop Service B Test Deploy Operate Service B Team Develop

    Service A Test Deploy Operate Service A Team Develop Service C Test Deploy Operate Service C Team
  25. Mercari microservice technical stacks What kind of technologies do we

    use for microservice development and deployment? What are your responsibilities?
  26. Technical stack at Mercari
 • Go for application language •

    gRPC for communication protocol • Kubernetes for container orchestration • Terraform for cloud service provisioning • Spinnaker for continuous delivery • Argo CD and Tekton for continuous delivery • CUE for configuration language • Github Actions for CI • AWS and GCP for Cloud
  27. Google Cloud Platform Services
 • Provides Cloud Spanner and Cloud

    SQL for databases • Provides Cloud Pub/Sub for message queuing • Provides Google Cloud Storage (GCS) for blob stores • Provides BigQuery for analytics data warehouses • Provides … (*) * You can use any GCP service for your microservice component
  28. Go at Mercari
 • Why: ◦ Safety by statically typed

    & compiled ◦ Maintainability (+readability) by simplicity & explicitness ◦ High performance and minimum memory footprints
  29. More about Go
 • Effective Go • Go Code Review

    Comments • Advanced Testing with Go • High Performance Go Workshop • So you want to expose Go on the Internet • Go Walkthrough • The Go Programming language (Book)
  30. Language Choices 
 • Go is currently a main language

    for Mercari. But you can choose any programming language for your microservices under your responsibility • You must know: ◦ Lots of ecosystems and tools are designed for Go (at the moment) ◦ It may be difficult to get supports from others if you get stuck • Responsibilities: ◦ Write everything by yourself ◦ Hire engineers for your team
  31. gRPC at Mercari
 • Why: ◦ Simple service definitions by

    an Interface Definition Language (IDL) ◦ Works across languages and platforms ◦ Faster serialization
  32. More about gRPC
 • What is gRPC? • Go Quick

    Start • gRPC Go: Beyond the basics • Peformance
  33. Docker at Mercari
 • Docker is mainly used for local

    development • It is also used for building docker images
  34. Kubernetes at Mercari
 • Kubernetes is: ◦ Container orchestration system

    ◦ Derived from Google internal system named Borg & Omega • Why (*): ◦ Extensibility (answer for why not PaaS) ◦ Ecosystem (answer for why not ECS, Nomad, Mesos) * See more details about this in Microservices platform on Kubernetes at Mercari
  35. More about Kubernetes
 • Kubernetes Basic • Kubernetes Concept •

    The Illustrated Children's Guide to Kubernetes • A Crash Course on Container Orchestration • kubectl Cheat Sheets / Basic Usages • kubectl Cheat Sheets / Advanced Usages • Kubernetes: Up and Running (Book)
  36. Terraform at Mercari
 • We use Terraform to set up

    cloud services: ◦ Set up GCP services ◦ Set up Pagerduty, Sentry, GitHub, Slack, and more ◦ Don’t control your infrastructure by hand (󰢃UI, CLI, or API) • We expect developers to write terraform ◦ Gives them full control over their resources.
  37. Spinnaker at Mercari
 • We use Spinnaker for continuous delivery

    of microservices • Developers have control over their CD strategy ◦ They control the pipeline via GitOps ◦ Allows rollback
  38. Argo CD/Tekton
 • Continuous delivery platform built by Intuit •

    GitOps way ◦ Everything is in code ◦ Declarative and version controlled
  39. Argo CD/Tekton at Mercari
 • We’re in the middle of

    migrating from Spinnaker to a combination of Argo CD and other components ◦ Currently in Beta • Abstractions are provided through our GitOps repos
  40. More about Argo CD
 • Argo CD - Declarative GitOps

    CD for Kubernetes • Towards a more stable and secure CD system replacement • Tekton
  41. CUE
 • Open source language used to define, generate, and

    validate all kinds of data • Superset of JSON • Provides sensible defaults and constraints
  42. CUE at Mercari
 • Provide abstractions written in CUE ◦

    Kubernetes Kit for Kubernetes manifests ◦ Observability Kit for Datadog dashboards & monitors
  43. GCP Project: Kubernetes Platform Team Spanner Namespace: Service A Kubernetes

    GCP Project: Service A Namespace: Service B GCP Project: Service B RBAC IAM RBAC IAM IAM Container A Container A Container A Service B Team Service A Team
  44. SaaS
 • GitHub Actions for CI • Datadog for observability

    • PagerDuty for alerting • Sentry for error reporting
  45. GitHub Actions
 • We use GitHub Actions for CI: ◦

    Run tests ◦ Build container images ◦ Push container images to container registries
  46. Datadog
 • We use Datadog for monitoring microservices: ◦ Send

    application metrics ◦ Send distributed traces ◦ Create dashboards for microservices ◦ Integrate with Slack and Pagerduty for alerting
  47. Pagerduty
 • We use PagerDuty for alerting: ◦ Create on-call

    schedules ◦ Receive alerts via phone calls
  48. Sentry
 • We use Sentry for (critical) error reporting: ◦

    Send errors when panics happen ◦ Send errors when unknown errors happen
  49. Service Team PR generate proto The Go gopher was designed

    by Renee French. (http://reneefrench.blogspot.com/)
  50. Plan & Apply PR Platform Team Review terraform repo Cloud

    Build Service B Team Service A Team Service C Team PR & Review PR & Review
  51. Starter Kit
 • Terraform module to set up tenant resources

    for services ◦ GCP project & IAM ◦ Kubernetes namespace ◦ GitHub team ◦ Pagerduty team and schedules ◦ Sentry project ◦ …
  52. Team Kit
 • Terraform module to set up resources for

    teams ◦ GCP IAM ◦ Kubernetes RBAC ◦ GitHub team ◦ Pagerduty team and schedules ◦ Slack channel and group ◦ …
  53. Sync Platform Team Review k8s Repo PR Service B Team

    Service A Team Service C Team PR & Review PR & Review Sync
  54. Kubernetes Kit
 • CUE-based Kubernetes manifest abstraction • Recommended over

    YAML-based configurations • Allows backend engineers to focus on their business ◦ Reduces the amount of configuration and required knowledge on Kubernetes and associated technologies ◦ Provides sensible defaults and constraints
  55. Key Takeaways
 • Mercari Microservices platform has many tools and

    services • We enable developers to take ownership and control • We use GitOps to enforce policies and ease development https://engineering.mercari.com/