A cloud-native Golang microservices framework


go-zero (listed in CNCF Landscape: https://landscape.cncf.io/?selected=go-zero) is a web and RPC framework with many built-in engineering practices. It was born to ensure the stability of the busy services with resilience design and has been serving sites with tens of millions of users for years.

go-zero contains simple API description syntax and a code generation tool called goctl. You can generate Go, iOS, Android, Kotlin, Dart, TypeScript, and JavaScript from .api files with goctl.

Advantages of the Golang microservice framework go-zero:

  • improve the stability of the services with tens of millions of daily active users
  • builtin middlewares also can be integrated into your frameworks
  • simple API syntax, one command to generate a couple of different languages
  • auto validate the request parameters from clients
  • plenty of builtin microservice management and concurrent toolkits
  • builtin chained timeout control, concurrency control, rate limit, adaptive circuit breaker, adaptive load shedding, even no configuration needed
Architecture

1. Backgrounds of the Golang Microservice Framework go-zero

At the beginning of 2018, we decided to re-design our system, from monolithic architecture with Java+MongoDB to microservice architecture. After research and comparison, we chose to:

  • Golang based
    • great performance
    • simple syntax
    • proven engineering efficiency
    • extreme deployment experience
    • less server resource consumption
  • Self-designed microservice architecture
    • I have rich experience in designing microservice architectures
    • easy to locate the problems
    • easy to extend the features

2. The Golang implementation and features of go-zero

go-zero is a web and RPC framework that integrates lots of engineering practices. The features are mainly listed below:

  • powerful tool included less code to write
  • simple interfaces
  • fully compatible with net/http
  • middlewares are supported, easy to extend
  • failure-oriented programming, resilience design
  • builtin service discovery, load balancing
  • builtin concurrency control, adaptive circuit breaker, adaptive load shedding, auto-trigger, auto recover
  • auto validation of API request parameters
  • high performance
  • chained timeout control
  • auto management of data caching
  • call tracing, metrics, and monitoring
  • high concurrency protected

3. Design considerations of the Go Framework go-zero

By designing the microservice architecture, we expected to ensure stability and productivity. And from just the beginning, we have the following design principles:

  • keep it simple
  • high availability
  • easy to extend
  • resilience design, failure-oriented programming
  • try best to be friendly to the business logic development, encapsulate the complexity
  • one thing, one way
  • stable on high concurrency

After almost half a year, we finished the transfer from a monolithic system to microservice system and deployed on August 2018. The new system guaranteed business growth and system stability.