Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Gunakan rangka kerja Gin untuk melaksanakan fungsi pengedaran dan pengurusan

Gunakan rangka kerja Gin untuk melaksanakan fungsi pengedaran dan pengurusan

王林
王林asal
2023-06-22 23:39:281121semak imbas

Dengan pembangunan dan aplikasi Internet, sistem yang diedarkan telah menarik lebih banyak perhatian dan perhatian. Dalam sistem teragih, cara untuk mencapai penggunaan pantas dan pengurusan yang mudah telah menjadi teknologi yang diperlukan. Artikel ini akan memperkenalkan cara menggunakan rangka kerja Gin untuk melaksanakan fungsi penggunaan dan pengurusan sistem teragih.

1. Pengerahan sistem teragih

Pengaturan sistem teragih terutamanya termasuk penggunaan kod, penggunaan persekitaran, pengurusan konfigurasi dan pendaftaran perkhidmatan. Aspek-aspek ini akan diperkenalkan satu persatu di bawah.

  1. Penyerahan kod

Dalam sistem yang diedarkan, penggunaan kod ialah pautan penting. Kerana dalam sistem yang diedarkan, nod yang berbeza mungkin perlu menjalankan kod yang berbeza, dan persekitaran yang dijalankan mungkin juga berbeza. Oleh itu, kita perlu membungkus dan menyusun kod secara berbeza dan kemudian menggunakan ia pada nod yang berbeza.

Menggunakan rangka kerja Gin, kami boleh membungkus dan menyusun kod dengan mudah. Mula-mula, tambah kod berikut pada kod:

func main() {
    gin.SetMode(gin.ReleaseMode)// 设置环境
    router := gin.Default()
    // 以下添加路由
    router.Run(":8080") // 启动服务
}

Kemudian, gunakan arahan berikut untuk menyusun:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main main.go

Ini melengkapkan penyusunan kod. Kemudian, kita boleh memindahkan fail utama yang disusun ke nod yang berbeza untuk digunakan.

  1. Pengedaran Persekitaran

Sistem teragih biasanya perlu dijalankan pada nod yang berbeza, jadi penggunaan persekitaran juga merupakan pautan penting. Nod yang berbeza mungkin perlu dijalankan dalam persekitaran yang berbeza, jadi kita perlu menentukan persekitaran berjalan setiap nod dan mengkonfigurasinya pada nod.

Menggunakan rangka kerja Gin, kami boleh melaksanakan penggunaan persekitaran dengan mudah. Ini boleh dilakukan melalui teknologi kontena seperti Docker, yang membolehkan penggunaan pantas persekitaran berbeza.

  1. Pengurusan Konfigurasi

Dalam sistem teragih, pengurusan konfigurasi juga merupakan pautan penting. Konfigurasi sistem mungkin memerlukan konfigurasi yang berbeza pada nod yang berbeza Oleh itu, kita perlu mengurus konfigurasi untuk memudahkan kemas kini dan pengurusan konfigurasi yang pantas.

Dalam rangka kerja Gin, kami boleh melaksanakan pengurusan konfigurasi melalui fail konfigurasi. Secara khusus, ia boleh dilaksanakan menggunakan viper, seperti yang ditunjukkan di bawah:

import (
    "github.com/spf13/viper"
)

// 读取配置文件
viper.SetConfigName("config") // 设置文件名(不带后缀)
viper.SetConfigType("yaml") // 设置文件类型
viper.AddConfigPath(".") // 设置文件路径
viper.ReadInConfig() // 读取配置文件
  1. Pendaftaran Perkhidmatan

Dalam sistem yang diedarkan, pendaftaran perkhidmatan adalah pautan yang sangat penting. Pendaftaran perkhidmatan boleh merealisasikan penemuan dinamik dan pengurusan perkhidmatan, dan memudahkan permohonan dan pengurusan perkhidmatan.

Dalam rangka kerja Gin, kita boleh menggunakan teknologi pusat pendaftaran seperti konsul untuk mendaftar perkhidmatan. Secara khusus, ia boleh dilaksanakan menggunakan konsul-api, seperti yang ditunjukkan di bawah:

import (
    "github.com/hashicorp/consul/api"
)

// 创建一个consul客户端连接
client, err := api.NewClient(&api.Config{Address: "127.0.0.1:8500"})

// 注册服务
registration := &api.AgentServiceRegistration{
    Name: "service_name",
    ID: "service_id",
    Address: "service_ip",
    Port: service_port,
    Tags: []string{"tag1", "tag2"},
    Check: &api.AgentServiceCheck{
        Interval: "10s",
        HTTP: "http://127.0.0.1:8080/health",
    },
}

err = client.Agent().ServiceRegister(registration)

// 查询服务
services, _, err := client.Health().Service("service_name", "", true, nil)

2. Pengurusan sistem teragih

Dalam sistem teragih, pengurusan juga merupakan aspek yang sangat penting. Pemantauan sistem, pengurusan log, pengendalian ralat, dsb. semuanya perlu diuruskan untuk memudahkan lokasi cepat dan penyelesaian masalah. Aspek-aspek ini akan diperkenalkan satu persatu di bawah.

  1. Pemantauan Sistem

Dalam sistem teragih, pemantauan sistem adalah sangat penting. Melalui pemantauan, masalah dalam sistem boleh ditemui dengan cepat dan langkah-langkah yang sepadan boleh diambil untuk menanganinya.

Menggunakan rangka kerja Gin, kita boleh menggunakan prometheus dan rangka kerja pemantauan lain untuk pemantauan. Secara khusus, prometheus-promhttp boleh digunakan untuk melaksanakannya, seperti ditunjukkan di bawah:

import (
    "github.com/gin-gonic/gin"
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promhttp"
)

var (
    httpRequestsTotal = prometheus.NewCounterVec(prometheus.CounterOpts{
        Name: "http_requests_total",
        Help: "Total number of HTTP requests",
    }, []string{"method", "path", "status"})
)

func main() {
    ...
    router.Use(prometheusMiddleware())
    router.GET("/metrics", promhttp.Handler().ServeHTTP)
    ...
}

func prometheusMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        start := time.Now()

        c.Next()

        httpRequestsTotal.With(prometheus.Labels{
            "method": c.Request.Method,
            "path": c.Request.URL.Path,
            "status": strconv.Itoa(c.Writer.Status()),
        }).Inc()
        prometheusRequestDuration.Observe(float64(time.Since(start).Milliseconds()))
    }
}
  1. Pengurusan log

Dalam sistem teragih, pengurusan log juga sangat penting. Melalui log, anda boleh menemui masalah dalam sistem dengan cepat dan mencari serta menyelesaikan masalah dengan cepat.

Menggunakan rangka kerja Gin, kita boleh menggunakan rangka kerja log seperti logrus untuk pengurusan log. Secara khusus, logrus boleh digunakan untuk melaksanakan ini, seperti yang ditunjukkan di bawah:

import (
    "os"
    "github.com/sirupsen/logrus"
)

func main() {
    ...
    // 设置日志输出
    jsonFormatter := &logrus.JSONFormatter{}
    logPath := "./logs/gin.log"
    logFile, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    if err == nil {
        gin.DefaultWriter = io.MultiWriter(logFile, os.Stdout)
        gin.DefaultErrorWriter = io.MultiWriter(logFile, os.Stdout)
    }

    // 添加钩子
    logrus.AddHook(new(LogrusGinHook))
    ...
}

type LogrusGinHook struct{}
func (h *LogrusGinHook) Levels() []logrus.Level {
    return logrus.AllLevels
}
func (h *LogrusGinHook) Fire(entry *logrus.Entry) error {
    /**
        自定义日志输出内容,例如:
        access:
        referer
        agent
    */
    if entry.Data != nil {
        if entry.Data["deferred"] != nil {
            entry.Data["deferred"] = fmt.Sprintf("%+v", entry.Data["deferred"])
        }
    }
    return nil
}
  1. Pengendalian ralat

Dalam sistem teragih, pengendalian ralat juga sangat penting. Melalui pengendalian ralat, kami dapat menyelesaikan masalah dengan cepat dan meningkatkan kestabilan sistem.

Menggunakan rangka kerja Gin, kita boleh melaksanakan pengendalian ralat melalui recover(), seperti yang ditunjukkan di bawah:

func main() {
    ...
    router.Use(recoveryMiddleware())
    ...
}

func recoveryMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        defer func() {
            if r := recover(); r != nil {
                logrus.Errorf("recover error:%v", r)
            }
        }()
        c.Next()
    }
}

3 Ringkasan

Dengan menggunakan rangka kerja Gin, kita boleh Ia adalah sangat mudah untuk melaksanakan fungsi penggunaan dan pengurusan sistem teragih. Dalam aplikasi praktikal, ia juga boleh digabungkan dengan teknologi lain untuk mencapai fungsi yang lebih berkuasa, seperti menggunakan grpc untuk melaksanakan panggilan sistem yang diedarkan, dan menggabungkan teknologi kontena seperti k8s untuk mencapai penggunaan automatik dan pengurusan sistem.

Atas ialah kandungan terperinci Gunakan rangka kerja Gin untuk melaksanakan fungsi pengedaran dan pengurusan. 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