With the development of the Internet, microservice architecture has become the choice of more and more enterprises. In the microservice architecture, the gateway is an indispensable part. As an important part of the microservice architecture, the gateway is responsible for request routing and load balancing, security control and protocol conversion, and can effectively conduct unified management and access control of back-end services.
Currently, there are many commonly used gateway products on the market, such as Kong, APISIX, etc. However, these gateway products have some problems such as high learning costs and complex configuration. They may be overqualified for some simple scenarios.
As a simple and efficient programming language, golang gives full play to its advantages of high concurrency and integration, and can be used to build a lightweight gateway system. This article will explain the following aspects:
Generally speaking, a gateway system needs to implement the following functions:
We use golang language to implement the above functions, Ensure the efficiency of the gateway system and maximum utilization of resources.
We will use the following main technology stacks:
This gateway system uses "reverse proxy ETCD" Redis" architectural pattern.
Three-tier architecture:
Multiple servers and each server has multiple APIs. For high concurrent access, It must be able to support dynamically increasing and decreasing API nodes. Use ETCD (a highly available key-value store) for state maintenance and discovery of API nodes. Use Redis as protobuf data cache for API.
4.1 Install golang, Gin and related dependencies
After the installation is completed, add the dependencies you need to use in the govendor.yaml file. As shown below:
dependencies: - github.com/gin-gonic/gin - github.com/coreos/etcd/clientv3 - github.com/go-redis/redis - github.com/dgrijalva/jwt-go
Use the go command to execute the following command:
go get -u github.com/kardianos/govendor govendor init govendor add +external govendor add github.com/gin-gonic/gin@v1.3.0
4.2 Basic use of gin
You can easily build an HTTP framework using gin, as shown below:
package main import ( "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "pong", }) }) r.Run() // listen and serve on 0.0.0.0:8080 }
4.3 Use of ETCD and Redis
ETCD is a highly available key-value store that can be used for service discovery and configuration sharing. In golang, we will use the officially provided clientv3 library to operate etcd.
Redis is a high-performance key-value database. We will use the go-redis library to use Redis in golang.
4.4 Use of JWT
In order to ensure interface security, we will use JWT for interface authentication. JWT, JSON Web Token, is a web-standard method of transmitting identity authentication and authorization information. Its main usage scenario is authorization and authentication of machine-to-machine interfaces.
4.5 Gateway implementation
For the gateway itself, the main functions include request routing and load balancing, security control and logging.
For request routing and load balancing, we can use the ReverseProxy of the Gin framework to achieve it. The status discovery and registration of the API need to be implemented through ETCD.
Our gateway system needs to support multiple backend API nodes and perform load balancing. The load balancing algorithm can use the polling method, the random method, etc. Here we use the polling method (RoundRobin) for node selection.
In terms of security control, we can pass JWT in the request header to achieve interface authentication.
Finally, insert the log in the response and return the response result.
This article briefly introduces the process of building a simple gateway system using golang language. This gateway system implements request routing and load balancing by using the GIN framework, implements status maintenance and discovery of API nodes through ETCD, uses Redis as the protobuf data cache of the API, uses JWT for interface authentication, and finally adds a logging function. The gateway system built using golang is lightweight, efficient, easy to learn and deploy, and is very suitable for lightweight scenarios.
The above is the detailed content of Golang builds a lightweight gateway system. For more information, please follow other related articles on the PHP Chinese website!