PHP中一個高效能的組態管理擴充Yaconf詳解

來源:互聯網
上載者:User

Yaconf 是一個高效能的組態管理擴充,是由PHP核心開發人員鳥哥惠新宸發布的 PHP7 下的擴充應用。主要目標是簡化讀取項目設定檔, 使設定檔和項目代碼分離,增強了設定檔的可讀性和可維護性。

據 Yaconf 開發人員惠新宸在其部落格上說,這個項目是其在來微博以後, 第一個最佳化項目中順手做的一個小工具, 本身叫做Weibo_Conf. 但是因為 Weibo_Conf 是屬於 Weibo 擴充的, 裡面還有一些其他功能是專門為 Weibo 定製的. 所以不適合直接開源.隨著 PHP7 的發布, 新增了很多持久化類型的支援比如 IS_IMMUTABLE_ARRAY , 於是就在 PHP7 下重新開發了 Yaconf , 開源出來, 方便大家使用。

首先說說, 這個是幹啥的:

  1. 我見過很多的項目中, 用 PHP 檔案做配置的, 一個 config 目錄下可能有十幾個甚至數十個 .php 設定檔, 裡面都是各種各樣的 array , 還有甚者會把一些詞典檔案(比如中文/英文對照)也放到配置中去. 這就導致設定檔的解析耗費了很大的效能(誠然, 用了 opcache 能好點, 但是實際上還是有執行的過程).

  2. 除了 PHP 的, 還有用 json 的, yaml 的, 一個共同的特點就是這些配置的可讀性比較差. 另外, 他們也都要 runtime 解析.

  3. config 目錄往往和代碼在一起, 首先會有安全隱患(配置中往往有敏感資訊), 其次如果配置和代碼屬於一個項目, 這就會導致配置的修改也要走代碼上線的流程.

  4. 一些資源設定檔, 比如 mysql/memcache 的配置資訊, 這些內容本來是應該對開發透明的, 營運直接負責即可. 但是放到了代碼中就會導致, 營運如果要發起一些變更, 也要開發配合修改設定檔上線.

所以, Yaconf就是為瞭解決這些問題而生的一個工具.

  1. 它使用單獨的一個配置目錄(在 yaconf.directory 指定), 不和代碼在一起.

  2. 它在 PHP 啟動的時候, 處理所有的要處理的配置, 然後這些配置就會常駐記憶體, 隨著 PHP 的生命週期存亡. 避免了每次請求的時候解析設定檔.

  3. 所有的配置內容都是 immutable 的, 這就可以藉助於 Fork 的 COW , 降低記憶體佔用, 並且在訪問配置的時候, 幾乎不需要任何的記憶體 Copy, 也不會有無謂的引用計數增減

  4. 最重要的, 配置目錄和代碼分離以後, 可以藉助一個組態管理後台, 來實現配置的統一化管理.

  5. 它支援(對於非ZTS)配置變更重新載入, 也就是說配置如果有變化(建議更改配置一定使用 mv , 不要使用 cp ), 它會 reload, 不需要重啟(檢測的頻率由 yaconf.check_delay 控制).

  6. 它支援豐富的配置類型, 包括字串, 數組, 分節, 分節繼承, 並且還可以在配置中直接寫 PHP 的常量和環境變數等.

  7. 最重要的是, 它很簡單。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.