Abstrak: Membina API RESTful: Buat projek Golang, gunakan pakej http dan tentukan fungsi pemprosesan laluan. Laksanakan pengimbangan beban: Gunakan pakej fasthttp untuk membina perisian tengah proksi untuk memajukan permintaan ke berbilang pelayan hujung belakang. Pertempuran praktikal: Mulakan pelayan bahagian belakang, gunakan permintaan proksi fasthttp dan perhatikan hasil pengimbangan beban.
Gunakan Golang untuk membina RESTful API dan melaksanakan pengimbangan beban
package main import ( "fmt" "log" "net/http" ) func main() { // 创建 HTTP 路由器 mux := http.NewServeMux() // 定义路由处理函数 mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, World!") }) //启动 HTTP 服务器 log.Fatal(http.ListenAndServe(":8080", mux)) }
http.NewServeMux()
untuk mencipta penghala HTTP dan gunakan HandleFunc()
untuk mentakrifkan fungsi pemprosesan. Pengendali ini akan mengendalikan laluan dan kaedah HTTP tertentu. Mencapai pengimbangan bebanhttp.NewServeMux()
创建 HTTP 路由器,并使用 HandleFunc()
定义处理函数。这些处理函数将处理特定的 HTTP 路径和方法。
为了实现负载均衡,我们需要使用中间件或反向代理服务器。下面使用 fasthttp
包作为中间件。
首先,安装 fasthttp
:
go get -u github.com/valyala/fasthttp
然后,导入 fasthttp
并使用 fasthttp.Director()
Untuk mencapai pengimbangan beban, kita perlu menggunakan perisian tengah atau pelayan proksi terbalik. Pakej fasthttp
digunakan di bawah sebagai perisian tengah.
fasthttp
: package main import ( "fmt" "log" "net/http" "github.com/valyala/fasthttp" ) func main() { // 创建 fasthttp 代理中间件 director := fasthttp.Director{ // 定义要代理到后端服务器的地址 Addrs: []string{"localhost:8081"}, } // 创建 HTTP 路由器 mux := http.NewServeMux() // 将代理中间件作为全局处理器添加到路由器 mux.Use(func(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { director.ServeHTTP(w, r) return }) }) // 定义路由处理函数,处理 HTTP 请求后 mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, World!") }) // 启动 HTTP 服务器 log.Fatal(http.ListenAndServe(":8080", mux)) }
Kemudian, import fasthttp
dan gunakan fasthttp.Director()
untuk mentakrifkan fungsi proksi:
package main import ( "fmt" "log" "net/http" ) func main() { // 在端口 8081 上启动一个 HTTP 服务器 log.Fatal(http.ListenAndServe(":8081", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Backend Server 1") }))) }
Kes Amalan Untuk menunjukkan, anda boleh memulakan berbilang pelayan bahagian belakang (cth. pada port yang berbeza) dan menggunakan fasthttp untuk meminta proksi kepada pelayan ini.
Backend Server 1
package main import ( "fmt" "log" "net/http" ) func main() { // 在端口 8082 上启动另一个 HTTP 服务器 log.Fatal(http.ListenAndServe(":8082", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Backend Server 2") }))) }
go run main.go
Uji load balancing
Kemudian, mulakan pelayan API menggunakan arahan berikut:
curl http://localhost:8080
Atas ialah kandungan terperinci Bagaimana untuk membina API RESTful dan melaksanakan pengimbangan beban menggunakan Golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!