欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go?多環(huán)境下配置管理方案(多種方案)

 更新時間:2022年06月28日 14:54:09   作者:一名砍柴工  
這篇文章主要介紹了Go?多環(huán)境下配置管理方案,方案一配置文件管理,方案二集中式管理配置,每種方案給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

需求

開發(fā)過程中開發(fā)者經(jīng)常面對的一個需求就是:一個項(xiàng)目可能會在不同的環(huán)境下運(yùn)行,本地開發(fā)環(huán)境、測試環(huán)境、灰度環(huán)境、生產(chǎn)環(huán)境。每個環(huán)境的參數(shù)和配置可能都會不相同,如服務(wù)器配置、數(shù)據(jù)庫連接。為避免各環(huán)境產(chǎn)生數(shù)據(jù)混亂,讓程序執(zhí)行時在不同的環(huán)境中調(diào)用正確的配置,可以這樣設(shè)計(jì):

命令喚醒程序--->識別環(huán)境--->根據(jù)環(huán)境讀取對應(yīng)配置文件

方案1:配置文件管理

根據(jù)環(huán)境創(chuàng)建配置文件,多個環(huán)境多個配置文件。如開發(fā)環(huán)境 config-dev.yaml,測試環(huán)境 config-test.yaml,預(yù)發(fā)環(huán)境 config-pre.yaml,生產(chǎn)環(huán)境 config-prod.yaml。

在代碼層面上控制想要使用的配置文件,然后使用第三方包 Flag 或者 viper 讀取配置文件。該方式不夠自動化,如果每次都需要修改代碼,上線后如果忘記修改了就容易造成問題。

func main(){
    configFile := './config/config-dev.yaml' // './config/confg-test.yaml'
    
    //使用 viper
	v := viper.New()
	v.SetConfigFile(configFile)
	v.SetConfigType("yaml")
	if err := v.ReadInConfig(); err != nil {
		panic(fmt.Errorf("read config failed: %s \n", err))
	}    
}

進(jìn)一步優(yōu)化,通過配置環(huán)境變量,然后通過環(huán)境變量來區(qū)分配置文件。首先在電腦上配置環(huán)境變量:

vim .bash_profile
export GO_ENV= true
source .bash_profile 

在代碼層面上就可以通過環(huán)境配置來區(qū)分配置文件

func main(){
 	configEnv := os.Getenv("GO_ENV");
	switch configEnv {
	case "dev":
		configPath = "./config-dev.yaml"
	case "test":
		configPath = "./config-test.yaml"
	case "prod":
		configPath = "./config-prod.yaml"
	}
}

通過設(shè)置環(huán)境變量讀取配置文件,這種方式使用方便,現(xiàn)在很多開發(fā)者都會這樣使用,但是當(dāng)服務(wù)在集群環(huán)境上可能會有很多問題。

  • 配置文件也存在于項(xiàng)目中,基本所有開發(fā)者都能看到生產(chǎn)環(huán)境配置。生產(chǎn)環(huán)境配置因之開放給部分人員
  • 如果有很多個微服務(wù),當(dāng)我們修改配置時就需要全部的配置都需要修改,增加工作量。我們需要一個可以統(tǒng)一管理的地方

統(tǒng)一管理配置文件,所有服務(wù)都只針對一份配置文件,可以保證唯一性;配置環(huán)境也需要權(quán)限隔離,部分開發(fā)者擁有生產(chǎn)配置權(quán)限。

方案2:集中式管理配置

通過使用 Redis 統(tǒng)一管理,在比較大規(guī)模的微服務(wù)體系中可以引入配置中心。集中式管理的優(yōu)勢:

  • 安全:集中管理而不是在代碼中,防止配置泄露
  • 動態(tài):支持動態(tài)調(diào)整配置,而不影響其他服務(wù)
  • 實(shí)時:修改配置,即時生效,無需重啟服務(wù)器

方式1:如果使用 Redis ,可以使用工具包 github.com/gogap/env_json

func main() {
	data, _ := ioutil.ReadFile("./db.conf")

	dbConf := DBConfig{}
	if err := env_json.Unmarshal(data, &dbConf); err != nil {
		fmt.Print(err)
		return
	}
	fmt.Println(dbConf)
}

方式2:如果使用配置中心服務(wù),可以使用 Nacos、Apollo等 。后續(xù)繼續(xù)學(xué)習(xí)更新這部分知識

到此這篇關(guān)于Go 多環(huán)境下配置管理方案的文章就介紹到這了,更多相關(guān)go多環(huán)境配置管理方案內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang 中 omitempty的作用

    Golang 中 omitempty的作用

    這篇文章主要介紹了Golang 中 omitempty的作用,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考一下,需要的小伙伴可以參考一下
    2022-07-07
  • Go語言字符串操作指南:簡單易懂的實(shí)戰(zhàn)技巧

    Go語言字符串操作指南:簡單易懂的實(shí)戰(zhàn)技巧

    本文將介紹Go語言中字符串的實(shí)戰(zhàn)操作,通過本文的學(xué)習(xí),讀者將掌握Go語言中字符串的常用操作,為實(shí)際開發(fā)提供幫助,需要的朋友可以參考下
    2023-10-10
  • 一文帶你吃透Go語言中的原子操作

    一文帶你吃透Go語言中的原子操作

    原子操作是解決并發(fā)編程中共享數(shù)據(jù)訪問問題的一種常見機(jī)制,下面就來和大家深入介紹原子操作的原理、用法以及在解決并發(fā)問題中的應(yīng)用,需要的可以參考一下
    2023-06-06
  • golang中常見的logrus日志庫

    golang中常見的logrus日志庫

    這篇文章主要介紹了golang中常見的logrus日志庫的相關(guān)資料,需要的朋友可以參考下
    2023-05-05
  • 詳解Golang中SQLX庫的高級操作

    詳解Golang中SQLX庫的高級操作

    sqlx是Golang中的一個知名三方庫,其為Go標(biāo)準(zhǔn)庫database/sql提供了一組擴(kuò)展支持,下面就來和大家分享一下SQLX庫的高級操作吧,希望對大家有所幫助
    2023-06-06
  • Go語言題解LeetCode705設(shè)計(jì)哈希集合

    Go語言題解LeetCode705設(shè)計(jì)哈希集合

    這篇文章主要為大家介紹了Go語言題解LeetCode705設(shè)計(jì)哈希集合,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Golang中文件目錄操作的實(shí)現(xiàn)步驟詳解

    Golang中文件目錄操作的實(shí)現(xiàn)步驟詳解

    在Golang中,文件目錄是指計(jì)算機(jī)文件系統(tǒng)中的文件夾或目錄。目錄是用于組織和存儲文件的一種方式,可以包含文件和其他子目錄,本文主要介紹了Golang中文件目錄操作的實(shí)現(xiàn)方法,需要的朋友可以參考下
    2023-05-05
  • 秒懂Golang匿名函數(shù)

    秒懂Golang匿名函數(shù)

    所謂匿名函數(shù),就是沒有名字的函數(shù),本文重點(diǎn)給大家介紹Golang匿名函數(shù)的相關(guān)知識,通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • Go語言實(shí)現(xiàn)互斥鎖、隨機(jī)數(shù)、time、List

    Go語言實(shí)現(xiàn)互斥鎖、隨機(jī)數(shù)、time、List

    這篇文章主要介紹了Go語言實(shí)現(xiàn)互斥鎖、隨機(jī)數(shù)、time、List的相關(guān)資料,需要的朋友可以參考下
    2018-10-10
  • Go語言LeetCode500鍵盤行題解示例詳解

    Go語言LeetCode500鍵盤行題解示例詳解

    這篇文章主要為大家介紹了Go語言LeetCode500鍵盤行題解示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12

最新評論