2013-10-01 27 views
1

Twelve-Factor應用程序的後端的默認配置是將其(網絡)位置置於環境變量中,例如, DB=mysql://user:[email protected]/db_name12因子:動態後端配置

但是,如果您的後端配置更具動態性,推薦的方法是什麼?在我的情況下,應用程序可以使用1到n後端取決於環境。我的想法是使用一個序列化格式像JSON並把它放在一個變量像

DB="{1: 'host:port', 2: 'host:port'}" 

這是最好的方式來處理這種情況或會是什麼更好的方法?

+0

此問題針對前一段時間 - 你什麼時候來了,對你的工作很好的解決方案? – willoller

回答

2

我不知道這是否是「首選」方法,但我認爲它會起作用。

您將要爲將來的開發人員記錄這種特質,並且可能會在此異常設置中添加一些指向錯誤配置的詳細錯誤/日誌記錄。例如,如果您只想指定一個數據庫,則應該清楚它需要以準JSON樣式指定。


我認爲更多12因子y,但是,將設置您的服務器之間的中間負載平衡器。這樣,您的應用就可以連接到負載均衡器或單個服務器,而對於底層服務的性質而言,透明度很低。

所以不是:

SetEnv DB {mysql://[email protected], mysql://[email protected]} 

你會

SetEnv DB mysql://[email protected] 

和負載均衡處理幕後的多個數據庫。


你也可以有一個2-db系統,一個用於讀取,一個用於寫入。讀取可以進行負載平衡並複製master-server

SetEnv READ_DB mysql://[email protected] 
SetEnv WRITE_DB mysql://[email protected] 

然後在測試情況下他們會使用相同的連接字符串:

SetEnv READ_DB mysql://[email protected] 
SetEnv WRITE_DB $READ_DB # not sure about syntax here 
+0

雖然這並不完全符合我的要求(因爲有時客戶需要連接到一臺服務器,有時連接到多臺服務器),但這仍然是一個非常好的靈感。我傾向於使用某種類型的註冊表/主服務器(類似於負載均衡器),其中每個普通服務器註冊自己,以便客戶端可以使用該主服務器來查詢系統配置。 – schlamar

+0

這聽起來像是一回事。這個想法只是將最小的配置負擔放在Web應用上,並儘可能多地使用自己的配置來執行備份服務。 – willoller

+0

哦,如果你需要有多個連接,因爲它們是不同的數據集或數據庫類型,那麼他們每個人都應該擁有自己的支持服務和自己的配置線。 – willoller