一些使用Yaconf的經驗分享

說到Yaconf, 從我14年進入WB就開始用了。確實幫助我們解決了很多問題,但同時我們理解不全,也碰到了一些情況,現在說說這些內容。

介紹

關於yaconf的介紹,我就不解釋了,請看 Laruence 的這篇文章。
http://www.laruence.com/2015/06/12/3051.html

運行原理

Yaconf是php的一個擴展,。沒有獨立的進程守護, 內存中的配置信息不能單獨存在,主要是爲web應用服務的。
根據php-fpm的運行原理,Yaconf在PHP_MINIT_FUNCTION函數裏面初始化配置,然後在PHP_RINIT_FUNCTION函數裏面根據條件更新配置。這樣當一個web請求時,會觸發PHP_RINIT_FUNCTION這個函數,從而自動根據條件更新配置。

曾經走過的路

1. 文件夾時間沒有更新

Yaconf首先檢測的是配置文件夾的修改時間,曾經碰到過一種情況,當用fwrite更改寫入文件內容的時候,文件夾的mtime是不會變化的,此時如果把文件夾推到線上,會因爲配置文件夾的st_mtime沒有變化而導致配置沒有生效。
臨時解決方案:推送之前,更改配置文件夾的mtime。
一些使用Yaconf的經驗分享

2. 文件內容爲空

這個問題應該不是Yaconf本身的問題,某一次時候,admin管理後臺空間不足。某個配置文件生成的時候,沒有寫入。造成爲空的情況,進而上傳到服務器上造成錯誤。
解決方案:生成ini配置文件的時候,進行腳本檢測。如果爲空,則不生成ini文件。上傳的時候進行腳本檢測,當有大小爲0的空文件,則不進行上傳(不是最好的解決方案, 逐步完善中)。

3. 文件內容有誤

一些使用Yaconf的經驗分享

如上內容, 如果值是英文字母或者數字沒有問題,如果是漢字,或者其中帶有括號等內容,生成的配置文件就不生效了。所以 我們每個值都用雙引號括了起來。轉移特殊的字符。
正確的寫法

a.b = "(測試ok)"

錯誤的寫法

a.b = (測試ok)

4. 生成的文件內容的key有失誤

這個問題是我在做某運動項目中碰到的,當時後臺可以自定義字段,即數據字典前移。產品可以直接在表單上追加字段。一個新的PM,於是把帶有括號的字符串,作爲了key。這樣生成的ini中就含有帶特殊字符的key。配置文件同步到線上的時候,基本上只剩下找鍋的工作了。
如:

(abc) = "出bug了"

5. 降級文件採用Yaconf讀取ini文件

這個事實上還是沒有理解Yaconf的原理,使用操作不當造成的。降級的時候,上傳了降級的配置ini文件,實施了降級。但是結束後,直接刪掉了降級的a. ini文件。而線上環境又沒有經過大重啓(M_SHUTDOWN)。 當每次request來的時候,即使會檢測配置的目錄裏面的文件,也會因爲沒有降級文件a, 而不會更新內存中a對應的配置。
解決方案:上傳a.ini文件,但是裏面可以寫一項其他內容。或者不採用Yaconf讀取文件。

後記

Yaconf相對其他擴展來說,源代碼還是比較容易讀懂的。閒的時候可以認真讀一讀,對你有幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章