Rumah >pembangunan bahagian belakang >Golang >Menggunakan go-zero untuk melaksanakan pusat konfigurasi teragih
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.
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.
Pelaksanaan pusat konfigurasi teragih perlu mengambil kira aspek berikut:
Artikel ini akan memperkenalkan secara ringkas proses menggunakan rangka kerja go-zero untuk melaksanakan pusat konfigurasi teragih seperti berikut:
Untuk menggunakan go-zero, anda perlu memasang kebergantungan yang berkaitan terlebih dahulu:
go get -u github.com/tal-tech/go-zero
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;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/apiKod 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) }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/v3Kemudian tetapkan alamat dan port etcd dalam fail konfigurasi:
[etcd] null=127.0.0.1:2379Akhir 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) } }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/v3Kemudian 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 }KesimpulanArtikel 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!