# Cmfac.com 的開發文檔
*鑒于之前版本很難實現的可擴展性,新版 Cmfac.com 決定不再實現一個萬能的網站架構和一個萬能的數據表。我可以換個思路。讓一個程序滿足任意情況太難的話,或許我可以讓任意程序滿足一種情況。然后通過這一種情況建立關系,組成集合。*
* Composer 可以看成是一個包含任意程序的集合,可以從 Composer 中獲得啟示 :
* 所有的拓展的名字和版本號都寫在 Composer.json 中,在運行 composer install 或 update 的時候 composer 通過遍歷一個 json文件就可以更新或安裝所有的包
* 所有的拓展都放在一個固定的文件目錄下,而且所有的包的目錄結構都是大致相同的
* Composer 只用來管理依賴,而不負責依賴如何工作。
**為了實現 Cmfac.com 的可擴展性,我計劃把核心寫為類似 Composer 的功能和結構。核心只負責保存所有模塊的名字和版本號,而不關注每個模塊具體的功能實現。每個模塊自己負責自己的輸入和輸出。**
下面是具體的實現計劃:
1. 使用兩個數據庫,一個為程序核心數據庫,負責存儲所有模塊的信息。另一個數據庫為模塊數據庫,存儲各個模塊的數據。
2. 核心加載模塊需要的模型和依賴,而模塊接收輸入,返回輸出。在任意時刻只有接受請求的模塊,核心,模塊的依賴在工作。核心決定內個模塊應該工作,一次請求響應結束以后,核心需要保留模塊當前的狀態,然后釋放所有的加載項。
3. 內核具體的實現類似 Linux 的設計,分為用戶和進程兩部分,核心通過用戶ID和請求的模塊ID返回不同的模塊調用結果。核心類似CPU而Apache類似系統內核,核心計算和返回的ID取決于Apache,Apache是多線程的,所以這個系統也是多線程的。 其實也沒有那么難,雖然硬盤讀寫速度比不上內存讀寫速度,但是http本身就有很高的延遲,訪問量沒有那么大,計算量也沒有那么大。