Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk membina API RESTful dan melaksanakan pengimbangan beban menggunakan Golang?

Bagaimana untuk membina API RESTful dan melaksanakan pengimbangan beban menggunakan Golang?

WBOY
WBOYasal
2024-06-05 21:58:00636semak imbas

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.

如何使用 Golang 构建 RESTful API 并实现负载均衡?

Gunakan Golang untuk membina RESTful API dan melaksanakan pengimbangan beban

Prasyarat

  • Pasang Golang
  • Familiar dengan protokol HTTPC🜜standard
  • projek
Buat projek Golang baharu , dan tambah pakej HTTP:

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))
}

Bina penghala API

Gunakan http.NewServeMux() untuk mencipta penghala HTTP dan gunakan HandleFunc() untuk mentakrifkan fungsi pemprosesan. Pengendali ini akan mengendalikan laluan dan kaedah HTTP tertentu.

Mencapai pengimbangan beban

http.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.

Mula-mula, pasang 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")
    })))
}

Backend Server 2

go run main.go

Uji load balancing

Kemudian, mulakan pelayan API menggunakan arahan berikut:

curl http://localhost:8080
, API dan serverFinally akan menghantarnya imbangan beban Ke pelayan bahagian belakang: 🎜rrreee🎜Output akan memaparkan "Pelayan Belakang 1" dan "Pelayan Belakang 2" secara bergantian, menunjukkan bahawa pengimbangan beban berfungsi. 🎜

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn