Menggunakan go-zero untuk melaksanakan pusat konfigurasi teragih

王林
Lepaskan: 2023-06-22 08:57:06
asal
1679 orang telah melayarinya

Dengan pembangunan Internet, skala aplikasi perusahaan semakin meningkat secara beransur-ansur, dan konfigurasi yang diperlukan untuk senario perniagaan yang berbeza menjadi semakin kompleks Pengurusan dan penyelenggaraan konfigurasi selalunya merupakan proses yang membosankan dan terdedah kepada ralat. Untuk menyelesaikan masalah ini, pusat konfigurasi yang diedarkan telah wujud.

Pusat konfigurasi yang diedarkan ialah reka bentuk modular yang memusatkan maklumat konfigurasi semua aplikasi dan menyediakan antara muka operasi yang mesra untuk memudahkan pengurus mengubah suai dan menerbitkan maklumat konfigurasi. Dengan menguruskan maklumat konfigurasi secara berpusat, kegagalan sistem yang disebabkan oleh isu konfigurasi dapat dikurangkan dengan berkesan.

Artikel ini akan memperkenalkan cara menggunakan go-zero untuk melaksanakan pusat konfigurasi teragih mudah.

Apakah go-zero?

Go-Zero ialah rangka kerja mikro bahasa Go Ia mempunyai ciri-ciri prestasi tinggi, kebolehskalaan mudah dan kemudahan penggunaan Ia adalah cara untuk pembangun bahasa Go untuk membina perkhidmatan mikro berprestasi tinggi, berskala dan boleh dipercayai aplikasi. Salah satu rangka kerja pilihan.

Selain menyediakan fungsi berkaitan perkhidmatan mikro seperti pendaftaran perkhidmatan, pemeriksaan kesihatan, pengehadan semasa dan pemutus litar, pengurusan sambungan panjang dan tadbir urus perkhidmatan, Go-Zero juga menyediakan banyak alat untuk membantu pembangunan, seperti penjanaan Rpc alatan, alatan penjanaan API http, pusat konfigurasi, perpustakaan log, perpustakaan cache, dsb.

Prinsip pelaksanaan pusat konfigurasi teragih

Pelaksanaan pusat konfigurasi teragih perlu mengambil kira aspek berikut:

  1. Storan pangkalan data: pangkalan data hubungan diperlukan (seperti sebagai MySQL, PostgreSQL, dsb.) untuk menyimpan maklumat konfigurasi bagi memastikan penyimpanan maklumat konfigurasi yang berterusan.
  2. Pengurusan backend: Adalah perlu untuk menyediakan sistem pengurusan backend yang melaluinya pentadbir boleh menambah, memadam, mengubah suai, menyemak dan menerbitkan maklumat konfigurasi.
  3. Pemuatan fail konfigurasi: Antara muka untuk memuatkan fail konfigurasi perlu disediakan untuk panggilan aplikasi bagi memastikan aplikasi boleh mendapatkan maklumat konfigurasi terkini.
  4. Muat semula berjadual: Ia adalah perlu untuk melaksanakan fungsi menyegarkan maklumat konfigurasi secara kerap untuk memastikan kemas kini data tepat pada masanya.
  5. Ketekalan teragih: Apabila menggunakan berbilang nod, ketekalan maklumat konfigurasi perlu dipertimbangkan untuk mengelakkan ralat yang disebabkan oleh nod di luar penyegerakan.

Gunakan go-zero untuk melaksanakan pusat konfigurasi teragih

Artikel ini akan memperkenalkan secara ringkas proses menggunakan rangka kerja go-zero untuk melaksanakan pusat konfigurasi teragih seperti berikut:

1 Pasang go-zero

Untuk menggunakan go-zero, anda perlu memasang kebergantungan yang berkaitan terlebih dahulu:

go get -u github.com/tal-tech/go-zero
Salin selepas log masuk

2 >

Mula-mula buat pangkalan data dan cipta jadual dan struktur jadual Seperti berikut:

CREATE TABLE `config` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `app_name` varchar(255) DEFAULT '',
    `key_name` varchar(255) DEFAULT '',
    `value` varchar(1024) DEFAULT '',
    `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Salin selepas log masuk

3 Cipta sistem pengurusan bahagian belakang

Sistem pengurusan bahagian belakang digunakan terutamanya untuk menambah, memadam, mengubah suai, menyemak dan menerbitkan operasi pada maklumat konfigurasi. Dalam rangka kerja go-zero, anda boleh menggunakan alat goctl untuk menjana kod berkaitan sistem pengurusan dengan cepat:

goctl api new -api config -dir config/api
Salin selepas log masuk

Kod yang dijana terletak dalam direktori konfigurasi/api dan perlu dilaraskan mengikut keperluan sebenar.

4. Laksanakan pemuatan fail konfigurasi

Jana perkhidmatan rpc bernama config melalui alat goctl, dan muatkan fail konfigurasi dengan memanggil antara mukanya.

Antara muka perkhidmatan ditakrifkan seperti berikut:

type Config interface {
    GetConfig(ctx context.Context, req *model.GetConfigReq) (*model.GetConfigResp, error)
    WatchConfig(ctx context.Context, req *model.GetConfigReq) (*model.GetConfigResp, error)
}
Salin selepas log masuk

5 Laksanakan muat semula berjadual

Untuk melaksanakan fungsi muat semula berjadual, alat berkaitan dsb boleh digunakan semasa dalam perjalanan. -rangka kerja sifar.

Mula-mula anda perlu memasang etcd:

go get -u go.etcd.io/etcd/client/v3
Salin selepas log masuk
Salin selepas log masuk

Kemudian tetapkan alamat dan port etcd dalam fail konfigurasi:

[etcd]
  null=127.0.0.1:2379
Salin selepas log masuk

Akhir sekali, laksanakan logik penyegaran berjadual dalam kod :

func RefreshConfig() {
    etcdCli, err := clientv3.New(clientv3.Config{
        Endpoints:   *conf.Etcd,
        DialTimeout: time.Second * 3,
    })
    if err != nil {
        logx.Errorf("err: %v", err)
        return
    }
    defer etcdCli.Close()

    for {
        ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
        resp, err := etcdCli.Get(ctx, *conf.EtcdKey)
        if err != nil {
            logx.Errorf("err: %v", err)
            cancel()
            continue
        }
        if len(resp.Kvs) == 1 {
            var configMap map[string]string
            err = json.Unmarshal(resp.Kvs[0].Value, &configMap)
            if err != nil {
                logx.Errorf("err: %v", err)
            } else {
                cacheConfigMap.Lock()
                cacheConfigMap.data = configMap
                cacheConfigMap.Unlock()
                logx.Info("Refresh config success")
            }
        }
        cancel()
        time.Sleep(time.Second * 10)
    }
}
Salin selepas log masuk

6. Mencapai konsistensi teragih

Untuk mencapai konsistensi teragih, alat berkaitan dsb perlu digunakan dalam rangka kerja go-zero.

Mula-mula anda perlu memasang etcd:

go get -u go.etcd.io/etcd/client/v3
Salin selepas log masuk
Salin selepas log masuk

Kemudian laksanakan logik kunci teragih berkaitan etcd dalam kod:

func Lock() error {
    etcdCli, err := clientv3.New(clientv3.Config{
        Endpoints:   *conf.Etcd,
        DialTimeout: time.Second * 3,
    })
    if err != nil {
        logx.Errorf("err: %v", err)
        return err
    }
    defer etcdCli.Close()

    var s *concurrency.Session
    var m *concurrency.Mutex
    for {
        opTimeoutCtx, cancel := context.WithTimeout(context.Background(), time.Second)
        s, err = concurrency.NewSession(etcdCli,
            concurrency.WithContext(opTimeoutCtx),
            concurrency.WithTTL(int32(*conf.LockTtl)))
        if err != nil {
            logx.Errorf("create etcd session error: %v", err)
            cancel()
            time.Sleep(time.Second)
            continue
        }

        opTimeoutCtx, cancel = context.WithTimeout(context.Background(), time.Second)
        m = concurrency.NewMutex(s, *conf.EtcdKey)
        err = m.Lock(opTimeoutCtx)
        if err != nil {
            logx.Errorf("etcd lock failed: %v", err)
            cancel()
            time.Sleep(time.Second)
            continue
        }
        break
    }

    cacheConfigMap.Lock()
    defer cacheConfigMap.Unlock()

    defer func() {
        if m != nil {
            err = m.Unlock(context.Background())
            if err != nil {
                logx.Errorf("etcd unlock failed: %v", err)
            }
        }
    }()
    defer func() {
        if s != nil {
            s.Close()
        }
    }()
    return nil
}
Salin selepas log masuk
Kesimpulan

Artikel ini memperkenalkan cara untuk menggunakan Rangka kerja go-zero melaksanakan pusat konfigurasi teragih mudah. Dengan menggunakan prestasi tinggi go-zero, kebolehskalaan mudah dan kemudahan penggunaan, kami boleh membina pusat konfigurasi teragih yang sangat tersedia dalam masa yang singkat, dengan berkesan membantu kami mengurangkan kegagalan sistem yang disebabkan oleh isu konfigurasi.

Atas ialah kandungan terperinci Menggunakan go-zero untuk melaksanakan pusat konfigurasi teragih. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan