Giter Site home page Giter Site logo

lppgo / go-chassis Goto Github PK

View Code? Open in Web Editor NEW

This project forked from go-chassis/go-chassis

0.0 1.0 0.0 3.7 MB

a microservice framework for rapid development of micro services in Go with rich eco-system

License: Apache License 2.0

Go 99.62% Shell 0.38%

go-chassis's Introduction

Coverage Status Go Report Card GoDoc HitCount
Join Slack
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 accelarate 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.

  • go chassis supports Istio control panel, go chassis can bring better performance to go program, you can use Istio configurations to control go chassis.

Features

  • Pluggable discovery service: Support Service center, istio pilot, kubernetes registry. fit both client side discovery and server side discovery pattern, and you can disable it in local to test service easily
  • 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
  • Safty and reslience: support fault-tolerant(with expotential backoff policy), 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 reporte. Use opentracing-go as standard library, easy to integrate tracing system
  • Backing services: use backend service as a plugin, so that your app can be easily test, 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/[email protected]

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 3 types of communication protocol.

  1. Rest - REST is an approach that leverages the HTTP protocol for communication.
  2. Highway - This is a RPC communication protocol, it was deprecated.
  3. 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:

golang/go#23733

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

Eco system

this part introduce some eco systems that go chassis can run with

Apache ServiceComb

With ServiceComb service center as registry, go chassis supply more features like contract management and multiple service registry, highly recommended. that will not prevent you from using kubernetes or Istio, Because service center can aggregate heterogeneous registry and give you a unified service registry entry point.

Kubernetes and Istio

go chassis has k8s registry and Istio registry plugins, and support Istio traffic management you can use spring cloud or Envoy with go chassis under same service discovery service.

Other project using go-chassis

Known Users

To register your self, go to go-chassis#592 huawei qutoutiao Shopee

To start developing go chassis

  1. Install go 1.12+

  2. Clone the project

git clone [email protected]:go-chassis/go-chassis.git
  1. Download vendors
cd go-chassis
export GO111MODULE=on 
go mod download
#optional
export GO111MODULE=on 
go mod vendor

NOTICE:if you do not use mod, We can not ensure you the compatibility. however you can still maintain your own vendor, which means you have to solve compiling issue your own.

  1. Install service-center

For more information about go chassis, read github wiki page

go-chassis's People

Contributors

tianxiaoliang avatar humingcheng avatar lizihuai avatar asifdxtreme avatar wangkirin avatar ninokop avatar thandayuthapani avatar little-cui avatar daqingshu avatar wangqj avatar t-xinlin avatar yankooo avatar zhulijian1 avatar joseph-v avatar ichiro999 avatar dengguojie avatar willemjiang avatar gauthamiv avatar leikao avatar aseto2016 avatar goldbeef avatar ninotia avatar zqheng avatar liweiv avatar surechen avatar savitaashture avatar crystaldust avatar yockii avatar shiningrush avatar yiliuchen avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.