chassis

package module
v2.7.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 10, 2022 License: Apache-2.0 Imports: 40 Imported by: 37

README

Coverage Status Go Report Card GoDoc HitCount
goproxy.cn Documentation Status

中文版README

Go-Chassis is a microservice framework for rapid development of microservices in Go. it focus on helping developer to deliver cloud native application more easily. The idea of logo is, developer can recreate and customize their own "wheel"(a framework) by go chassis to accelerate the delivery of software.

Why use Go chassis

  • powerful middleware "handler chain": powerful than "filter" or "interceptor". each handler in chain is able to get the running result of backward handler and your business logic. It is very useful in varies of scenario, for example:
  1. a circuit breaker need to check command results
  2. track response status and record it, so that prometheus can collect them
  3. track critical response result, so that you can audit them
  4. distribute tracing, you can complete the end span spec after business logic executed

the commonplace above is helping you decouple common function from business logic. without handler chain. those function will couple with business logic

  • go chassis is designed as a protocol-independent framework, any protocol is able to integrate with go chassis and leverage same function like load balancing, circuit breaker,rate limiting, routing management, those function resilient your service

  • go chassis makes service observable by bringing open tracing and prometheus to it.

  • go chassis is flexible, many different modules can be replaced by other implementation, like registry, metrics, handler chain, config server etc

  • With many build-in function like route management, circuit breaker, load balancing, monitoring etc, your don't need to investigate, implement and integrate many solutions yourself.

Features

  • Pluggable discovery service: Support Service center, kubernetes. fit both client side discovery and server side discovery pattern, and you can disable service discovery to use end to end communication.
  • Pluggable Protocol: You can customize protocol, by default support http and grpc, go chassis define standardized model to makes all request of different protocol leverage same features
  • Multiple server management: you can separate API by protocols and ports
  • Handler Chain: Able to add your own code during service calling for client and server side
  • rich middleware: based on handler chain, supply circuit breaker, rate limiting, monitoring, auth features. see
  • Traffic marker Traffic marker module is able to mark requests in both client(consumer) or server(provider) side, with marker, you can govern traffic based on it.
  • Traffic management: Able to route to different service based on weight and match rule, it can be used in many scenario, such as canary release
  • Security: build in cipher, authentication, RSA related funtions
  • Safety and resilience: support fault-tolerant(retry, rate limiting, client-side load-balancing, circuit breaker) to makes your service facing any unpredictable situation.
  • Telemetry: Able to expose Prometheus metric API automatically and customize metrics report. Use opentracing-go as standard library.
  • Backing services: use backend service as a plugin, so that your app can be easily tested, and swap to another plugin.
  • Hot re-configuration: Powered by go-archaius, configurations can be reload in runtime, like load balancing, circuit breaker, rate limiting, developer is also able to develop a service which has hot-reconfiguration feature easily. see
  • API first go chassis will automatically generate Open API 2.0 doc and register it to service center. you can manage all the API docs in one place
  • Spring Cloud integrate with servicecomb, go chassis can work together with spring cloud.
  • Service mesh: you can introduce multi-language to your microservice system. powered by servicecomb-mesher.
  • Less dependencies: checkout the go.mod file, it has less dependency on open source project by default, to import more features checkout plugins to see more features

Get started

1.Generate go mod

go mod init

2.Add go chassis

 go get github.com/go-chassis/go-chassis/v2@v2.0.4

if you are facing network issue

export GOPROXY=https://goproxy.io

3.Write your first http micro service

Documentations

You can see more documentations in here,

Examples

You can check examples here

NOTICE: Now examples is migrating to here

Communication Protocols

Go-Chassis supports 2 types of communication protocol.

  1. http - an approach that leverages the HTTP protocol for communication.
  2. gRPC - native grpc protocol, go chassis bring circuit breaker, route management etc to grpc.

Debug suggestion for dlv:

Add -tags debug into go build arguments before debugging, if your go version is go1.10 onward.

example:

go build -tags debug -o server -gcflags "all=-N -l" server.go

Chassis customized debug tag to resolve dlv debug issue:

https://github.com/golang/go/issues/23733

https://github.com/derekparker/delve/issues/865

Other project using go-chassis

Known Users

To register your self, go to https://github.com/go-chassis/go-chassis/issues/592

huawei qutoutiao Shopee
tencent-ieg changhong

Contributing

If you're interested in being a contributor and want to get involved in developing, please check CONTRIBUTING and wiki for details.

Join slack

Committer

  • ichiro999
  • humingcheng

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GracefulShutdown

func GracefulShutdown(s os.Signal)

GracefulShutdown graceful shut down api

func HijackGracefulShutdown added in v2.1.0

func HijackGracefulShutdown(f func(os.Signal))

HijackGracefulShutdown reset GracefulShutdown

func HijackSignal added in v2.1.0

func HijackSignal(sigs ...os.Signal)

HijackSignal set signals that want to hijack.

func Init

func Init() error

Init prepare the chassis framework runtime

func InstallPostShutdown added in v2.1.0

func InstallPostShutdown(name string, f func(os.Signal))

InstallPostShutdown instal what you want to achieve after graceful shutdown

func InstallPreShutdown added in v2.1.0

func InstallPreShutdown(name string, f func(os.Signal))

InstallPreShutdown instal what you want to achieve before graceful shutdown

func RegisterSchema

func RegisterSchema(serverName string, structPtr interface{}, opts ...server.RegisterOption)

RegisterSchema Register a API service to specific server by name You must register API first before Call Init

func Run

func Run(options ...server.RunOption) error

Run bring up the service,it waits for os signal,and shutdown gracefully before all protocol server start successfully, it may return error.

func SetDefaultConsumerChains

func SetDefaultConsumerChains(c map[string]string)

SetDefaultConsumerChains your custom chain map for Consumer,if there is no config, this default chain will take affect

func SetDefaultProviderChains

func SetDefaultProviderChains(c map[string]string)

SetDefaultProviderChains set your custom chain map for Provider,if there is no config, this default chain will take affect

Types

type Schema

type Schema struct {
	// contains filtered or unexported fields
}

Schema struct for to represent schema info

Directories

Path Synopsis
client
client
Package client is an interface for any protocol's client
Package client is an interface for any protocol's client
loadbalancer
Package loadbalancer is client side load balancer
Package loadbalancer is client side load balancer
metadata
Package metadata provides framework info registered to registry.
Package metadata provides framework info registered to registry.
router
Package router expose API for user to get or set route rule
Package router expose API for user to get or set route rule
server
Package server is a package for protocol of a micro service
Package server is a package for protocol of a micro service
tls
examples
jwt
schemas/employ
Package employ is a generated protocol buffer package.
Package employ is a generated protocol buffer package.
schemas/helloworld
Package helloworld is a generated protocol buffer package.
Package helloworld is a generated protocol buffer package.
Package initiator init necessary module before every other package init functions
Package initiator init necessary module before every other package init functions
middleware
basicauth
Package basicauth supply basicAuth middleware abstraction
Package basicauth supply basicAuth middleware abstraction
jwt
pkg
backends/quota
Package quota is a alpha feature.
Package quota is a alpha feature.
codec
Package quota is a alpha feature.
Package quota is a alpha feature.
resilience
rate
Package rate supply functionality about QPS for example rate limiting
Package rate supply functionality about QPS for example rate limiting
security
authr
Package authr defines a standard interface to decouple with specify auth solution.
Package authr defines a standard interface to decouple with specify auth solution.
cipher/plugins/plain
Package plain created on 2017/6/22
Package plain created on 2017/6/22
server
restful/api
Package api supply a bunch of common http handler that could be mounted on you rest server and expose ability for example: prometheus metrics will be exported on /metrics api
Package api supply a bunch of common http handler that could be mounted on you rest server and expose ability for example: prometheus metrics will be exported on /metrics api
third_party
forked/afex/hystrix-go/hystrix
Package hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable.
Package hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL