1. 我想寫一個php網頁架構,就是兩個框的那種(看圖)分左右欄。希望高手能寫上代碼,謝謝
php是現在很流行的動態網站腳本, 是基於伺服器的腳本。是通過伺服器編譯以後,以html代碼的形式返回到用戶的頁面,用於實現網站和人的動態交互,提高用戶的體驗度!既然hph最終是以html輸出,那麼框架就用html代碼來寫就好了。兩點div,設置一下樣式!如果需要的話,我可以幫你寫那個框架!
2. PHP框架的PHP開發框架
一直以來php框架被廣泛利用,多半都是基於mvc架構模式的,還有基於事件驅動模式的,大致列舉幾個。 ThinkPHP 是一個性能卓越並且功能豐富的輕量級PHP開發框架,本身具有很多的原創特性,並且倡導大道至簡,開發由我的開發理念,用最少的代碼完成更多的功能,宗旨就是讓WEB應用開發更簡單、更快速。從1.*版本開始就放棄了對PHP4的兼容,因此整個框架的架構和實現能夠得以更加靈活和簡單。2.0版本更是在之前的基礎上,經過全新的重構和無數次的完善以及改進,達到了一個新的階段,足以達到企業級和門戶級的開發標准。國人開發的PHP框架,目前最新版本為3.2.3版本。
Canphp是一個中國開源的php框架,主要的設計理念就是為了追求簡單,減少php初學者的學習成本,而且追求高效率,模版類不提供其他標簽,直接應用php的源代碼,還有它是微內核設計,移植性強,鬆散耦合等特點,能集成到你任何一個系統裡面。其中集成的http類相當的強大,採集圖片速度相當的快,為什麼這樣呢?因為適用了模擬非同步多進程的原理。
KYPHP是一個中國開源的PHP框架,kyphp嚴格遵守OOP和MVC的理念,具有控制項化、可擴展性強。kyphp設計理念是自由、簡單。既可以用php源碼編程,也可以使用標簽,支持多語言,多資料庫,多皮膚,多模型部署等,為程序員節省更多的時間。
InitPHP 是一款輕量級的php開發框架,採用分層體系架構,適合大中型網站架構。提供豐富的library類庫,以及簡單的框架擴展機制。InitPHP還提供詳細的開發文檔,可以讓您在使用該框架的時候更加簡單實用。InitPHP實現了抽象DB層、分層體系架構、緩存無縫切換機制、簡單模板機制、多模型部署機制、強大的安全體系,是您快速開發php應用的利器!
SpeedPHP是一款全功能的國產PHP應用框架系統。她以「快速開發、快速學習、快速運行」為理念,在提高團隊開發效率、容易學習及使用、輕量級架構以增加執行速度等方面有著突出的表現。SpeedPHP框架是從實際運行的商業系統中取其精華而成的,在穩定性和運行速度上都非常出色;同時有著清晰的架構,更有利於提高團隊開發效率,教程眾多,入門容易,號稱最適合初學者的PHP框架,快速帶你進入PHP高手的行列。
CdvPHP 一款簡單開源PHP框架,靈感來源於DX,根據實際開發總結匯成快捷方便的輕量級框架。沒有太多的硬性要求,也沒有一本超厚的幫助手冊。快速開發、部署、學習必備利器。KPHP即(kphp開源框架)是為了提高PHP開發效率而研發php開源框架,其核心簡單精煉,代碼安全並易於理解,功能更符合php學習開發的的需要,而且易於學習不改變程序員的開發習慣。 Zend Framework在開發社區中有大量的追隨者,它致力於Web 2.0風格的程序。因為它眾多的追隨者組成的活躍用戶開發的擴展支持,Zend被稱為「The PHP Company」。Zend是一個(也可能不是)今天可用的最受歡迎的PHP開發框架。它有健壯的特徵能夠支持協作開發,它需要一些PHP的額外知識。
Codelgniter 以它的簡單易用,性能和速度而聞名。與 Symphony 不同,這款PHP開發框架對於共享主機的用戶而言很理想,如果你想有一個小型覆蓋面的框架。它提供了簡單的解決方案,還有擴展的知識庫,通過視頻教程,用戶指南和wiki來提供支持。
CakePHP 無論對於初學者還是職業PHP開發者都是很好的選擇。它基於與Rubyon Rails同樣的原則而設計,它十分注重快速開發——這使得它成為一個非常好的用於RAD的開發框架。它快速增長的支持系統,簡潔性和可測量性使得CakePHP成為今天可用的最受歡迎的PHP開發框架之一。
Symfony 是為那些更加職業的主要開發企業級程序的開發者而准備的——特別是 Askeet 和 Yahoo! Bookmarks。這款開源PHP開發框架有著豐富的特性,做起這些來綽綽有餘,它主要的缺點是比其他的框架略微慢一些。
Yii 是一個基於組件、用於開發大型 Web 應用的 高性能 PHP 框架。它將 Web 編程中的可重用性發揮到極致,能夠顯著加速開發進程。Yii(讀作「易」),代表簡單(easy)、高效(efficient)、可擴展(extensible)。
Seagull 是一個良好的PHP開發框架,可以用來開發Web,命令行和GUI程序。這是一款無論對初學者還是職業程序員而言都及其簡單的開發框架。對於初學者,Seagull提供一套包含樣常式序的庫,經過簡單修改就能符合你的要求,而對於專家級程序員,Seagull提供了一整套設置選項——包括最佳練習,標準的和模塊化的代碼庫——來快速簡單地構建Web程序。Seagull有一個活躍的用戶社區以及豐富的支持文檔。
Laravel是一套簡潔、優雅的PHP Web開發框架(PHP Web Framework)。它可以讓你從面條一樣雜亂的代碼中解脫出來;它可以幫你構建一個完美的網路APP,而且每行代碼都可以簡潔、富於表達力。 E是一款非常簡潔優秀開源的超輕量級PHP框架,致力於追求簡潔,安全,自由,高效,是中小型項目首選框架。框架構架合理,一鍵生成完全合乎規范的大型網站文件夾架構,網站架構一目瞭然。強大的外部類庫支持,分布式存儲,強大的緩存系統,內置smarty模板引擎,單入口MVC模式,面向對象編程,具有微內核設計,移植性強,鬆散耦合等特點,能集成到你任何一個系統裡面。無論您是一個NewPHPer 還是OLDPHPER,那麼E框架是您的首選。學習完E框架後您可以快速並且輕松的駕馭其他框架,步入php高手之列。
DuoLamPHP是一款超輕量級的PHP框架,命名是按照多啦A夢動漫給改成的拼音形式。DP是一個簡單、高效、上手容易的PHP框架,遵循apache開源協議。可以快速搭建出一個項目,作為一個超輕量級的PHP框架,完美支持MVC,完全面向對象。
Difeye框架 是一款超輕量級PHP框架,由Kohana框架精簡而來,主要特點有:資料庫連接自動主從讀寫分離配置,適合單機和分布式站點部署;支持Smarty模板機制;支持mysql、nosql類的mongodb等第三方資料庫模塊;完全分離頁面和動作,自動執行Page_Load入口函數,支持二級路由,將頁面模塊和頁面上的動作完全分離,使站點升級遷移更簡單;框架簡單易學容易部署;
GalaxixPhp 是一套專業的php建站框架,主要用於讓用戶在網上的建站,開發人員使用用 GalaxixPhp可以大大的縮小中型甚至大型網站的開發周期。GalaxixPhp 兼容 JavaScript ,可以無縫地與 Javascript,flash,PHP 等程序集成,適合構建展示、CMS、商城、論壇、博客、Wiki、等各種網站。並且官網上學習和說明文檔以及視頻教程齊全。是針對專業開發的人員的收費框架。並且官方正在不斷推出更新更實用的框架插件。最新版本1.1.2.
PhpPeanuts 是一個用以開發資料庫後端應用的PHP框架,包含一個可擴展的動態腳手架用來創建一個完整的web應用,提供用戶界面和ORM,包括CRUD操作、關聯關系以及一些示例查詢。phpPeanuts 2.0 完全支持 PHP 5,遵循 ESTRICT 標准,不再使用變數引用來傳遞對象;提升了靈活性;更獨立的模塊,以及迭代的對象復制等等。
Rong Framework是一個國產的基於php5的面向對象開發框架,開發的主要目的是簡化開發、高性能開發。支持資料庫文件緩存、資料庫通用操作及封裝。簡化CRUD代碼編寫。支持在線生成CRUD代碼,只要選中數據表名稱,就可以生成CRUD代碼。不懂編程的人也可以做到。rong framework分為php代碼模板(class Rong_View_PHP)和Rong_View_Wudimei(無敵美模板引擎,類似smarty)兩種模板機制。擁有良好的MVC機制和url美化方式、可以在代碼中實現URL重寫(由Rong_Countroller_Route實現)。
Openbiz Framework是為搭建企業應用而設計的PHP的基於面向對象的快速開發框架。它可以幫助專業軟體開發人員和技術咨詢專家來構建用於網路上的企業級應用。Openbiz Framework的設計目標是節省構建復雜應用系統的開發投入和縮短開發時間。藉助於Openbiz的幫助,應用程序的開發將基於完善的MVC架構建立,以Metadata驅動為核心描述業務邏輯,支持多種ORM邏輯,並且有Openbiz Appbuilder作為圖形化集成開發環境的快速開發平台。
3. php 是什麼是什麼
PHP,是英文超文本預處理語言Hypertext Preprocessor的縮寫。
一、概念。
PHP 是一種 HTML 內嵌式的語言,是一種在伺服器端執行的嵌入HTML文檔的腳本語言,語言的風格有類似於C語言,被廣泛地運用。
二、解析。
PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。
三、特點。
1、PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創新的語法。
2、PHP安裝它可以比 CGI或者Perl更快速的執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比。
3、PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成htmL標記的CGI要高許多; PHP具有非常強大的功能,所有的CGI的功能PHP都能實現。
4、支持幾乎所有流行的資料庫以及操作系統。最重要的是PHP可以用C、C++進行程序的擴展。
4. 快速了解PHP框架者快速了解PHP框架的一些知識
框架思想就是提供一種可以在多個應用程序中使用的設計。所有應用程序都有大量通用的基本內容 —— 具體地說,就是某類與資料庫的介面、某些應用程序邏輯、應用程序呈現給用戶的內容等。
框架專門用於為這些常用元素(資料庫交互、表示層、應用程序邏輯)提供結構,以便您可以花費更少的時間來編寫資料庫介面代碼或者表示層介面,而花費更多的時間來編寫應用程序本身。以這種方式分解應用程序,這種架構被稱為模型-視圖-控制器(Model-View-Controller,MVC)。模型 指數據,視圖 指表示層,而控制器 指應用程序邏輯或業務邏輯。
總體來說,框架就是別人寫好的程序(封裝了很多功能,可直接使用)。
5. 目前php開發網站,最為流行的框架是哪幾個
Openbiz Cubi PHP開發框架
這顯然是一個高耦合性的框架的代表,有點讓開發人員「拎包入住」快捷酒店一樣的的感覺。Openbiz Cubi 是一個應用平台式的開發框架。雖然與眾多更加耳熟能詳的框架相比 Openbiz Cubi 仍然是一匹黑馬,但是還是一個十分值得推薦的框架。它自身基於Zend Framework構建,但是擁有自己獨特的基於元數據的 MVC 和 ORM 邏輯,並採用Smarty和PHP模板 作為主要UI的模板引擎,所以如果你是Zend框架的玩家,別擔心,Openbiz Cubi的代碼也會同樣讓你很容易上手。
它不同於其他傳統意義上的PHP框架,它具有一個類似JAVA的元數據引擎, 可以通過XML的方式來「描述」大多數對象,甚至通過XML的描述就可以實現數據的CRUD(增刪讀改)這些操作。如果你的業務需求僅僅是要實現一些簡單 的數據CRUD操作,你甚至不需要去寫什麼PHP代碼,XML就可以全部搞定。而你的PHP功夫可以通過他的Plugin-Service方式用於集中在 實現某些特殊的業務邏輯上。
Openbiz Cubi目 前還有一個叫做 Openbiz Appbuilder 的超級好用的代碼生成工具,對於還不熟Openbiz的XML元數據的開發人員來說,Appbuilder 絕對是一個可以幫助你快速上手的利器,他通過圖形界面的生成向導來幫你自動創建數據對象、表單對象、嵌入式服務,甚至整個應用程序的雛形。 按Openbiz的官方介紹來說,你只需要思考清楚你的應用程序的業務邏輯,剩下的代碼工作就交給Openbiz Appbuilder來幫你搞定吧。
CakePHP 開發框架
如果你仍然需要編寫面向PHP4兼容的代碼,CakePHP 將是一個非常不錯的選擇, 在PHP 4 & 5的MVC式框架列表裡面,CakePHP都曾經是最流行的。它還提供了很多種途徑的技術支持(討論組、留言板、IRC等)還有優秀的教程。 CackePHP是個很容易上手的框架,但是你並不容易在短短幾周的時間就完全掌握它。
Zend Framework框架
Zend Framework 是面對一些較有經驗的開發者和從底層構建一些企業級應用程序而設計的。(例如:宣稱面向企業應用而設計的 Openbiz Cubi 就是基於Zend Framework框架之上而構建的。)該框架是高度模塊化的。這意味著你可以按你的實際需要來引用Zend的代碼。有些函數庫甚至可以很容的被提取出來 單獨使用(例如Zend_Gdata,這也是個低耦合性的特點)使用Zend框架,你不必非要遵從它的MVC架構,(雖然你最好能這么做),並且它還提供 了許多內建的高級功能用於完成與現有的web服務整合,多語言化和實現單元測試這些任務。
CodeIgniter
CodeIgniter 是一個PHP5.2+ 的MVC框架,它體積小巧切具有豐富的文檔資源。通常被稱為「初學者框架」,因為它相對容易試用和較短的學習曲線,此外CodeIgniter也是十分靈 活和強大的。該框架擁有一個非常龐大的社區支持。並且在社區裡面很容易找到大量的CI函數庫,你可以大膽的夢想, 也許你正需要做的事情在社區的某個交流,某個人已經把它實現了。
Symfony
Symfony 是最古老的PHP框架之一(相信你從他的網站風格上也發現這一點了),他同樣也是轉為企業級Web應用程序而設計的。然而,對於他所能提供的所有動力和性 能而言,它只擁有很小的體積並且非常容易配置在大多數php的主機環境中。由於他的年頭最長久,你會很容易找到許多關於Symfony的教程、書記等資 料,對於新手來說,這絕對是件好事兒。
Symfony使用命令行代碼生成工具來為項目快速生成所需的代碼,這種方式也許對於某些開發人員來說是前所未聞的(在那個年頭,也許 吧。。。)然後,他可以幫助你在很短的時間里完成代碼並是他們可以運行。Symfony的網站上手機了大量的教程和範例代碼,來幫助你熟悉掌握他們。
Yii Framework
Yii 是一個高度模塊化,高性能的PHP5框架,專門為了Web應用程序而開發。Yii採用了大量的命令行生成工具,讓你可以快速的生成一些代碼,因此,他最適 合於喜歡在命令行的黑窗口上敲敲打打的人。所有這些代碼生成工具意味著你需要記住更多的命令和參數,但是一點你做到了,你會發現,它們將大大減少你所要花 費的時間來設置和配置你的應用程序。
這種開發方式 非常類似於Openbiz Appbuilder所提供的向導式的代碼生成方式,最大的不同點是Yii是基於命令行去生成代碼,Openbiz Appbuilder是在圖形界面上生成代碼。
ThinkPHP
ThinkPHP是一個免費開源的,快速、簡單的面向對象的輕量級PHP 開發框架,遵循 Apache2 開源協議發布,是為了簡化企業級應用開發和敏捷WEB應用開發而誕生的。借鑒了國外很多優秀的框架和模式,使用面向對象的開發結構和 MVC 模式,融合了 Struts 的 Action 思想和 JSP 的 TagLib(標簽庫)、 RoR 的ORM映射和 ActiveRecord 模式, 封裝了 CURD 和一些常用操作, 單一入口模式等,在模版引擎、緩存機制、認證機制和擴展性方面均有獨特的表現。
Yii Framework
Yii是一個基於組件的高性能PHP框架,用於開發大型Web應用。Yii採用嚴格的OOP編寫,並有著完善的庫引用以及全面的教程。從 MVC,DAO/ActiveRecord,widgets,caching,等級式RBAC,Web服務,到主題化,I18N和L10N,Yii提供了今日Web 2.0應用開發所需要的幾乎一切功能。事實上,Yii是最有效率的PHP框架之一。
Yii是一個高性能的PHP5的web應用程序開發框架。通過一個簡單的命令行工具 yiic 可以快速創建一個web應用程序的代碼框架,開發者可以在生成的代碼框架基礎上添加業務邏輯,以快速完成應用程序的開發
phalcon
Phalcon是一套實現MVC架構的高性能PHP應用程序框架。初始版本發布於2012年11月,開放源代碼並基於BSD授權條款。與其他大部分的PHP框架不同,Phalcon是以擴充的方式以C語言所編寫,因此Phalcon的執行速度高過其他PHP框架,並且消耗更少的資源,根據官方的測試,Phalcon是目前世界上速度最快的PHP框架之一。[1]
6. php除了mvc還有什麼架構
MVC
MVC是一個設計模式,它強制性的使應用程序的輸入、處理和輸出分開。使用MVC應用程序被分成三個核心部件:模型(M)、視圖(V)、控制器(C),它們各自處理自己的任務。
OOP
面向對象編程(Object Oriented Programming,OOP,面向對象程序設計)是一種計算機編程架構。OOP 的一條基本原則是,計算機程序是由單個能夠起到子程序作用的單元或對象組合而成。OOP 達到了軟體工程的三個主要目標:重用性、靈活性和擴展性。為了實現整體運算,每個對象都能夠接收信息、處理數據和向其它對象發送信息。OOP 主要有以下的概念和組件:
組件 - 數據和功能一起在運行著的計算機程序中形成的單元,組件在 OOP 計算機程序中是模塊和結構化的基礎。
抽象性 - 程序有能力忽略正在處理中信息的某些方面,即對信息主要方面關注的能力。
封裝 - 也叫做信息封裝:確保組件不會以不可預期的方式改變其它組件的內部狀態;只有在那些提供了內部狀態改變方法的組件中,才可以訪問其內部狀態。每類組件都提供了一個與其它組件聯系的介面,並規定了其它組件進行調用的方法。
多態性 - 組件的引用和類集會涉及到其它許多不同類型的組件,而且引用組件所產生的結果得依據實際調用的類型。
繼承性 - 允許在現存的組件基礎上創建子類組件,這統一並增強了多態性和封裝性。典型地來說就是用類來對組件進行分組,而且還可以定義新類為現存的類的擴展,這樣就可以將類組織成樹形或網狀結構,這體現了動作的通用性。
由於抽象性、封裝性、重用性以及便於使用等方面的原因,以組件為基礎的編程在腳本語言中已經變得特別流行。
ORM
對象-關系映射(Object/Relation Mapping,簡稱ORM),是隨著面向對象的軟體開發方法發展而產生的。面向對象的開發方法是當今企業級應用開發環境中的主流開發方法,關系資料庫是企業級應用環境中永久存放數據的主流數據存儲系統。對象和關系數據是業務實體的兩種表現形式,業務實體在內存中表現為對象,在資料庫中表現為關系數據。內存中的對象之間存在關聯和繼承關系,而在資料庫中,關系數據無法直接表達多對多關聯和繼承關系。因此,對象-關系映射(ORM)系統一般以中間件的形式存在,主要實現程序對象到關系資料庫數據的映射。
面向對象是從軟體工程基本原則(如耦合、聚合、封裝)的基礎上發展起來的,而關系資料庫則是從數學理論發展而來的,兩套理論存在顯著的區別。為了解決這個不匹配的現象,對象關系映射技術應運而生。
7. PHP+oracle這個架構是否常用 這種架構有什麼不好地方呢
淘寶架構框架
一、個人網站
2003 年 4 月 7 日,馬雲,在杭州,成立了一個神秘的組織。他叫來十位員工,要他們簽了一份協議,這份協議要求他們立刻離開阿里巴巴,去做一個神秘的項目。這個項目要求絕 對保密,老馬戲稱「連說夢話被老婆聽到都不行,誰要是透漏出去,我將追殺到天涯海角」。這份協議是英文版的,匆忙之間,大多數人根本來不及看懂,但出於對 老馬的信任,都捲起鋪蓋離開了阿里巴巴。
他們去了一個神秘的據點 —— 湖畔花園小區的一套未裝修的房子里,房子的主人是馬雲。這伙人剛進去的時候,馬雲給他們布置了一個任務,就是在最短的時間內做出一個個人對個人(C2C) 的商品交易的網站。現在出一個問題考考讀者,看你適不適合做淘寶的創業團隊。親,要是讓你來做,你怎麼做?
在說出這個答案之前,容我先賣個關子,介紹一下這個創業團隊的成員:三個開發工程師(虛竹、三豐、多隆)、一個UED(二當家)、三個運營(小寶、阿 珂、破天)、一個經理(財神)、還有就是馬雲和他的秘書。當時對整個項目組來說壓力最大的就是時間,怎麼在最短的時間內把一個從來就沒有的網站從零開始建 立起來?了解淘寶歷史的人知道淘寶是在 2003 年 5 月 10 日上線的,這之間只有一個月。要是你在這個團隊里,你怎麼做?我們的答案就是:買一個來。
買一個網站顯然比做一個網站要省事一些,但是他們的夢想可不是做一個小網站而已,要做大,就不是隨便買個就行的,要有比較低的維護成本,要能夠方便的擴 展和二次開發。那接下來就是第二個問題:買一個什麼樣的網站?答案是:輕量一點的,簡單一點的,於是買了這樣一個架構的網 站:LAMP(Linux+Apache+MySQL+PHP)。這個直到現在還是一個很常用的網站架構模型。這種架構的優點是:無需編譯,發布快 速,PHP功能強大,能做從頁面渲染到數據訪問所有的事情,而且用到的技術都是開源的,免費。
當時我們是從一個美國人那裡買來的一個網站系統,這個系統的名字叫做 PHPAuction(他們的官方網站http://www.phpauction.net,這個名字很直白,一眼就看出來這個系統是用什麼語言做的、 是干什麼用的),PHPAuction有好幾個版本,我們買的是最高版的,功能比較多,而且最重要的是對方提供了源代碼。最高版比較貴,花了我們 2000 美金(貌似現在降價了,只要 946 美元)。買來之後不是直接就能用的,需要很多本地化的修改,例如頁面模板改的漂亮一點,頁頭頁腳加上自己的站點簡介等,其中最有技術含量的是對資料庫進行 了一個修改。原來是從一個資料庫進行所有的讀寫操作,拿過來之後多隆把它給拆分成一個主庫、兩個從庫,讀寫分離。這么做的好處有幾點:存儲容量增加了,有 了備份,使得安全性增加了,讀寫分離使得讀寫效率提升了。這樣整個系統的架構就如下圖所示:
淘寶架構框架
其中 Pear DB 是一個 PHP 模塊,負責數據訪問層。另外也用開源的論壇系統 PHPBB(http://www.phpbbchina.com )搭建了一個小的論壇社區,虛竹負責機器采購、配置、架設等,三豐和多隆負責編碼,他 們把交易系統和論壇系統的用戶信息打通,給運營人員開發出後台管理(admin系統)的功能,把交易類型從只有拍賣這一種增加為拍賣、一口價、求購商品、 海報商品(意思是還沒推出的商品,先掛個海報出來)這四種。(PHPAuction 只有拍賣的交易,Auction 即拍賣的意思。@_行癲在微博中提到:今天 eBay 所有交易中拍賣交易仍然佔了 40%,而在中國,此種模式在淘寶幾乎從一開始就未能占據優勢,如今在主流的交易中幾乎可以忽略不計。背後的原因一直令人費解。我大致可以給出其中一種解 釋,eBay 基本在發達國家展開業務,製造業外包後,電子商務的基本群體大多隻能表現為零散的個體間交易。)
在經歷了另外一些有趣的事情之後(這些有趣的事情包括「淘寶」這個名字的由來,員工花名的由來等等,由於本書主要描述技術方面的故事,對這些有興趣的可以去網上找),網站開始上線運行了。
淘寶架構框架
在接下來的大半年時間里,這個網站迅速顯示出了它的生機。這里有必要提一下當時的市場環境,非典(SARS)的肆虐使得大家都不敢出門,尤其是去商場之 類人多的地方。另外在神州大地上最早出現的 C2C 網站易趣也正忙的不亦樂乎,2002 年 3 月,eBay 以 3000 萬美元收購了易趣公司 33% 的股份,2003 年 6 月以 1.5 億美元收購了易趣公司剩餘 67% 的股份。當時淘寶網允許買賣雙方留下聯系方式,允許同城交易,整個操作過程簡單輕松。而 eBay 為了收取交易傭金,是禁止這么做的,這必然增加了交易過程的難度。而且 eBay 為了全球統一,把易趣原來的系統替換成了美國 eBay 的系統,用戶體驗一下子全變了,操作起來非常麻煩,這等於是把積累的用戶拱手送給了淘寶。為了不引起 eBay 的注意,淘寶網在 2003 年裡一直聲稱自己是一個「個人網站」。由於這個創業團隊強大的市場開拓和運營能力,淘寶網發展的非常迅猛,2003 年底就吸引了注冊用戶XXX,最高每日 31 萬PV,從 5 月到年底成交額 4000 萬。這沒有引起 eBay 的注意,卻引起了阿里巴巴內部很多員工的注意,他們覺得這個網站以後會成為阿里巴巴強勁的對手。甚至有人在內網發帖,忠告管理層要警惕這個剛剛起步的網 站,但管理層似乎無動於衷。(這個團隊的保密工作做的真好)
在市場和運營的後方,淘寶網的技術團隊也在快速的做著系統的改進和創新。這里還有個有趣的故事,eBay 和易趣早期都有員工在論壇上響應用戶的需求,eBay 的論壇用粉紅色背景來區分員工的發言,易趣的員工在論壇上昵稱都選各種豆豆,例如黃豆豆、蠶豆豆等。淘寶在討論運營策略的時候提到這個問題,要求所有的員 工都去論壇上回答用戶的問題。最早回答問題的任務落在小寶頭上,那我們用什麼名字好呢?「淘淘」?「寶寶」?小寶都不滿意,太女性化了。討論了很久之後, 小寶靈光乍現,乾脆取個名字叫「小寶」吧,小寶帶七個老婆來開店,迎接各位客官,很有故事性。於是很多武俠小說中的人物開始在論壇中行俠仗義,這些昵稱下 面標志著「淘寶店小二」,他們回答著各種各樣的問題,快速響應著用戶的各種需求。如果是技術上能解決的,幾個人商量一下,馬上就開發、測試、發布上線。反 過來對比一下,易趣被 eBay 收購之後,系統更換成了全球通用的版本,響應用戶的一個需求需要層層審批,反應速度自然慢了下來。
當時淘寶第一個版本的系統裡面已經包含了商品發布、管理、搜索、商品詳情、出價購買、評價投訴、我的淘寶這些功能(現在主流程中也是這些模塊。在 2003 年 10 月增加了一個功能節點:「安全交易」,這個是支付寶的雛形)。隨著用戶需求和流量的不斷增長,系統上面做了很多的日常改進,伺服器由最初的一台變成了三 台,一台負責發送 email、一台負責運行資料庫、一台負責運行 Web App。過一段時間之後,商品搜索的功能佔用資料庫資源太大了(用like搜索的,很慢),又從阿里巴巴中文站搬過來他們的搜索引擎 iSearch,起初 iSearch 索引的文件放在硬碟上,隨著數據量的增長,又采購了 NetApp 伺服器放置 iSearch。
如此快節奏的工作,其實大家都累得不行,有人就提議大家隨時隨地的鍛煉身體,可是外面 SARS 橫行,在一個一百多方的房子里,怎麼鍛煉呢?高挑美女阿珂提議大家練習提臀操,這個建議遭到男士的一致反對,後來虛竹就教大家練習倒立,這個大家都能接 受。於是這個倒立的傳統一直延續至今,和花名文化、武俠文化一並傳承了下來。
隨著訪問量和數據量的飛速上漲,問題很快就出來了,第一個問題出現在資料庫上。MySQL 當時是第 4 版的,我們用的是默認的存儲引擎 MyISAM,這種類型讀數據的時候會把表鎖住(我們知道 Oracle 在寫數據的時候會有行鎖,讀數據的時候是沒有的),尤其是主庫往從庫上面寫數據的時候,會對主庫產生大量的讀操作,使得主庫性能急劇下降。這樣在高訪問量 的時候,資料庫撐不住了。另外,當年的 MySQL 不比如今的 MySQL,在數據的容量和安全性方面也有很多先天的不足(和 Oracle 相比)。
二、Oracle/支付寶/旺旺
淘寶網作為個人網站發展的時間其實並不長,由於它太引人注目了,馬雲在 2003 年 7 月就宣布了這個是阿里巴巴旗下的網站,隨後在市場上展開了很成功的運作。最著名的就是利用中小網站來做廣告,突圍 eBay 在門戶網站上對淘寶的廣告封鎖。上網比較早的人應該還記得那些在右下角的彈窗和網站腰封上一閃一閃的廣告。市場部那位到處花錢買廣告的傢伙,太能花錢了, 一出手就是幾百萬,他被我們稱為「大少爺」。
「大少爺」們做的廣告,帶來的就是迅速上漲的流量和交易量。在 2003 年底,MySQL 已經撐不住了,技術的替代方案非常簡單,就是換成 Oracle。換 Oracle 的原因除了它容量大、穩定、安全、性能高之外,還有人才方面的原因。在 2003 年的時候,阿里巴巴已經有一支很強大的 DBA 團隊了,有馮春培、汪海(七公)這樣的人物,後來還有馮大輝(@fenng)、陳吉平(拖雷)。這樣的人物牛到什麼程度呢?Oracle 給全球的技術專家頒發一些頭銜,其中最高級別的叫 ACE(就是撲克牌的「尖兒」,夠大的吧),被授予這個頭銜的人目前全球也只有 300 多名(名單在這里: http://apex.oracle.com/pls/otn/f?p=19297:3 ),當年全球只有十幾名。有如此強大的技術後盾,把 MySQL 換成 Oracle 是順理成章的事情。
但更換資料庫不是只換個庫就可以的,訪問方式,SQL 語法都要跟著變,最重要的一點是,Oracle 並發訪問能力之所以如此強大,有一個關鍵性的設計 —— 連接池。但對於 PHP 語言來說它是放在 Apache 上的,每一個請求都會對資料庫產生一個連接,它沒有連接池這種功能(Java 語言有 Servlet 容器,可以存放連接池)。那如何是好呢?這幫人打探到 eBay 在 PHP 下面用了一個連接池的工具,是 BEA 賣給他們的。我們知道 BEA 的東西都很貴,我們買不起,於是多隆在網上尋尋覓覓,找到一個開源的連接池代理服務 SQLRelay(http://sourceforge.jp/projects/freshmeat_sqlrelay ),這個東西能夠提供連接池的功能,多隆對它進行了一些功能改進之後就拿來用了。這樣系統的架構就變成了如下的樣子:
淘寶架構框架
數據一開始是放在本地的,DBA 們對 Oracle 做調優的工作,也對 SQL 進行調優。後來數據量變大了,本地存儲不行了。買了 NAS(Network Attached Storage:網路附屬存儲),NetApp 的 NAS 存儲作為了資料庫的存儲設備,加上 Oracle RAC(Real Application Clusters,實時應用集群)來實現負載均衡。七公說這實際上是走了一段彎路,NAS 的 NFS(Network File System)協議傳輸的延遲很嚴重,但那時侯不懂。後來采購了 Dell 和 EMC 合作的 SAN 低端存儲,性能一下子提升了 10 幾倍,這才比較穩定了。再往後來數據量更大了,存儲的節點一拆二、二拆四,RAC 又出問題了。這才踏上了購買小型機的道路。在那段不穩定的時間里,七公曾經在機房住了 5 天 5 夜。
替換完資料庫,時間到了 2004 年春天,俗話說「春宵一刻值千金」,但這些人的春宵卻不太好過了。他們在把數據的連接放在 SQLRelay 之後就噩夢不斷,這個代理服務經常會死鎖,如同之前的 MySQL 死鎖一樣。雖然多隆做了很多修改,但當時那個版本內部處理的邏輯不對,問題很多,唯一解決的辦法就是「重啟」它的服務。這在白天還好,連接上機房的服務 器,把進程殺掉,然後開啟就可以了,但是最痛苦的是它在晚上也要死掉,於是工程師們不得不 24 小時開著手機,一旦收到「 SQLRelay 進程掛起」的簡訊,就從春夢中醒來,打開電腦,連上機房,重啟服務。後來乾脆每天睡覺之前先重啟一下。做這事最多的據說是三豐,他現在是淘寶網的總裁。現 在我們知道,任何牛B的人物,都有一段苦B的經歷。
微博上有人說「好的架構是進化來的,不是設計來的」。的確如此,其實還可以再加上一句「好的功能也是進化來的,不是設計來的」。在架構的進化過程中,業 務的進化也非常迅猛。最早的時候,買家打錢給賣家都是通過銀行轉賬匯款,有些騙子收了錢卻不發貨,這是一個很嚴重的問題。然後這伙人研究了 PayPal 的支付方式,發現也不能解決問題。後來這幾個聰明的腦袋又想到了「擔保交易」這種第三方託管資金的辦法。於是在 2003 年 10 月,淘寶網上面上線了一個功能,叫做「安全交易」,賣家選擇支持這種功能的話,買家會把錢交給淘寶網,等他收到貨之後,淘寶網再把錢給賣家。這就是現在的 支付寶,在前兩天(2012.2.21)年會上,支付寶公布 2011 年的交易筆數已經是 PayPal 的兩倍。這個劃時代的創新,其實就是在不斷的思索過程中的一個靈光乍現。
當時開發「安全交易」功能的是茅十八和他的徒弟苗人鳳(茅十八開發到一半去上海讀 MBA 去了,苗人鳳現在是支付寶的首席業務架構師),開發跟銀行網關對接的功能的是多隆。當時多數銀行的網站已經支持在線支付了,但多隆告訴我,他們的網關五花 八門,用什麼技術的都有,必須一家一家去接。而且他們不保證用戶付錢了就一定扣款成功、不保證扣款成功了就一定通知淘寶、不保證通知淘寶了就一定能通知 到、不保證通知到了就不重復通知。這害苦了苗人鳳,他必須每天手工核對賬單,對不齊的話就一定是有人的錢找不到地方了,少一分錢都睡不著覺。另外他為了測 試這些功能,去杭州所有的銀行都辦理了一張銀行卡。一堆銀行卡擺在桌子上,不知道的人還以為這個傢伙一定很有錢,其實裡面都只是十塊八塊的。現在我們再一 次知道,任何牛B的人物,都必須有一段苦B的經歷。
有人說淘寶打敗易趣(eBay 中國)是靠免費,其實這只是原因之一。如果說和易趣過招第一招是免費的話,這讓用戶沒有門檻就願意來,那第二招就是「安全支付」,這讓用戶放心付款,不必 擔心被騙。在武俠小說中真正的高手飛花摘葉即可傷人,他們不會局限於一招兩招,一旦出手,連綿不絕。而淘寶的第三招就是「旺旺」,讓用戶在線溝通。其實淘 寶旺旺也不是自己生出來的,是從阿里巴巴的「貿易通」復制過來的。從 2004 年 3 月開始,「叮咚、叮咚」這個經典的聲音就回盪在所有淘寶買家和賣家的耳邊,「親,包郵不?」,「親,把零頭去掉行不?」,這親切的砍價聲造就了後來的「淘 寶體」。有人說中國人就是愛砍價,雖然筆者體會不到砍價成功後有多少成就感,但每次我去菜市場,看到大媽們砍價砍得天昏地暗,那滿足的勁頭堪比撿到了錢, 我就深刻的理解了淘寶旺旺在交易過程中的價值。我猜 eBay 也體會不到砍價的樂趣,他們一直不允許買賣雙方在線聊天,收購了 skype 之後也沒有用到電子商務中去。
旺旺在推出來沒多久,就惹了一個法律方面的麻煩。有個做雪餅的廠家找上門來,說我們侵權了,他們家的雪餅很好吃,牛奶也做得不錯,我們都很喜歡。然後我 們就在旺旺的前面加了兩個字,叫做「淘寶旺旺」。在那個野蠻生長的階段,其實很多產品都是想到什麼就做什麼,例如我們還搭建過一個聊天室,但似乎淘寶網不 是一個閑聊的地方,這個聊天室門可羅雀,一段時間後就關閉掉了。
SQLRelay 的問題搞得三豐他們很難睡個囫圇覺,那一年開半年會的時候,公司特地給三豐頒了一個獎項,對他表示深切的安慰。但不能總這樣啊,於是,2004 年的上半年開始,整個網站就開始了一個脫胎換骨的手術。
三、淘寶技術發展(Java時代:脫胎換骨)
我的師父黃裳@岳旭強曾經說過,「好的架構圖充滿美感」,一個架構好不好,從審美的角度就能看得出來。後來我看了很多系統的架構,發現這個言論基本成立。那麼反觀淘寶前面的兩個版本的架構,你看哪個比較美?
淘寶架構框架
淘寶架構框架
顯然第一個比較好看,後面那個顯得頭重腳輕,這也註定了它不是一個穩定的版本,只存活了不到半年的時間。2004 年初,SQL Relay 的問題解決不了,資料庫必須要用 Oracle,那從哪裡動刀?只有換開發語言了。換什麼語言好呢?Java。Java 是當時最成熟的網站開發語言,它有比較良好的企業開發框架,被世界上主流的大規模網站普遍採用,另外有 Java 開發經驗的人才也比較多,後續維護成本會比較低。
到 2004 年上半年,淘寶網已經運行了一年的時間,這一年積累了大量的用戶,也快速的開發了很多功能,當時這個網站已經很龐大了,而且新的需求還在源源不斷的過來。 把一個龐大的網站的開發語言換掉,無異於脫胎換骨,在換的過程中還不能拖慢業務的發展,這無異於邊換邊跑,對時間和技術能力的要求都非常高。做這樣的手 術,需要請第一流的專家來主刀。現在再考一下讀者,如果你在這個創業團隊裡面,請什麼樣的人來做這事?我們的答案是請 Sun 的人。沒錯,就是創造 Java 語言的那家公司,世界上沒有比他們更懂 Java 的了。除此之外,還有一個不為人知的原因,……(此處和諧掉 200 字,完整版見 aliway)
這幫 Sun 的工程師的確很強大,在筆者 2004 年底來淘寶的時候,他們還在,有幸跟他們共事了幾個月。現在擺在他們面前的問題是用什麼辦法把一個龐大的網站從 PHP 語言遷移到 Java?而且要求在遷移的過程中,不停止服務,原來系統的 bugfix 和功能改進不受影響。親,你要是架構師,你怎麼做?有人的答案是寫一個翻譯器,如同把中文翻譯成英文一樣,自動翻譯。我只能說你這個想法太超前了,換個說 法就是「too simple, sometimes naive」。當時沒有,現在也沒有人能做到。他們的大致方案是給業務分模塊,一個模塊一個模塊的替換。如用戶模塊,老的 member.taobao.com 繼續維護,不添加新功能,新的功能先在新的模塊上開發,跟老的共用一個資料庫,開發完畢之後放到不同的應用集群上,另開個域名 member1.taobao.com,同時替換老的功能,替換一個,把老的模塊上的功能關閉一個,逐漸的把用戶引導到 member1.taobao.com,等所有功能都替換完畢之後,關閉 member.taobao.com。後來很長時間裡面都是在用 member1 這樣奇怪的域名,兩年後有另外一家互聯網公司開始做電子商務了,我們發現他們的域名也叫 member1.xx.com、auction1.xx.com……
說了開發模式,再說說用到的 Java MVC 框架,當時的 Struts 1.x 是用的比較多的框架,但是用過 WebWork 和 Struts 2 的同學可能知道,Struts 1.x 在多人協作方面有很多致命的弱點,由於沒有一個輕量框架作為基礎,因此很難擴展,這樣架構師對於基礎功能和全局功能的控制就很難做到。而阿里巴巴的 18 個創始人之中,有個架構師,在 Jakarta Turbine 的基礎上,做了很多擴展,打造了一個阿里巴巴自己用的 MVC 框架 WebX (http://www.openwebx.org/docs/Webx3_Guide_Book.html), 這個框架易於擴展,方便組件化開發,它的頁面模板支持 JSP 和 Velocity 等、持久層支持 iBATIS 和 Hibernate 等、控制層可以用 EJB 和 Spring(Spring 是後來才有的)。項目組選擇了這個強大的框架,這個框架如果當時開源了,也許就沒有 WebWork 和 Struts 2 什麼事了。另外,當時 Sun 在全世界大力推廣他們的 EJB,雖然淘寶的架構師認為這個東東用不到,但他們還是極力堅持。在經歷了很多次的技術討論、爭論和爭吵之後,這個系統的架構就變成了下圖的樣子:
淘寶架構框架
Java 應用伺服器是 Weblogic,MVC 框架是 WebX、控制層用了 EJB、持久層是 iBATIS,另外為了緩解資料庫的壓力,商品查詢和店鋪查詢放在搜索引擎上面。這個架構圖是不是好看了一點了,親?
這幫 Sun 的工程師開發完淘寶的網站之後,又做了一個很牛的網站,叫「支付寶」。
其實在任何時候,開發語言本身都不是系統的瓶頸,業務帶來的壓力更多的是壓到了數據和存儲上。上面一篇也說到,MySQL 撐不住了之後換 Oracle,Oracle 的存儲一開始在本機上,後來在 NAS 上,NAS 撐不住了用 EMC 的 SAN 存儲,再然後 Oracle 的 RAC 撐不住了,數據的存儲方面就不得不考慮使用小型機了。在 2004 年的夏天,DBA 七公、測試工程師郭芙和架構師行癲,踏上了去北京測試小型機的道路。他們帶著小型機回來的時候,我們像歡迎領袖一樣的歡迎他們,因為那個是我們最值錢的設 備了,價格表上的數字嚇死人。小型機買回來之後我們爭相合影,然後 Oracle 就跑在了小型機上,存儲方面從 EMC 低端 cx 存儲到 Sun oem hds 高端存儲,再到 EMC dmx 高端存儲,一級一級的往上跳。
到現在為止,我們已經用上了 IBM 的小型機、Oracle 的資料庫、EMC 的存儲,這些東西都是很貴的,那些年可以說是花錢如流水啊。有人說過「錢能解決的問題,就不是問題」,但隨著淘寶網的發展,在不久以後,錢已經解決不了我 們的問題了。花錢買豪華的配置,也許能支持 1 億 PV 的網站,但淘寶網的發展實在是太快了,到了 10 億怎麼辦?到了百億怎麼辦?在 N 年以後,我們不得不創造技術,解決這些只有世界頂尖的網站才會遇到的問題。後來我們在開源軟體的基礎上進行自主研發,一步一步的把 IOE(IBM 小型機、Oracle、EMC 存儲)這幾個「神器」都去掉了。這就如同在《西遊記》裡面,妖怪們拿到神仙的兵器會非常厲害,連猴子都能夠打敗,但最牛的神仙是不用這些神器的,他們揮一 揮衣袖、翻一下手掌就威力無比。去 IOE 這一部分會在最後一個章節裡面講,這里先埋個千里伏筆。
欲知後事如何,且聽下回分解。
8. php 文件架構圖用什麼軟體
version
9. php有什麼可靠的框架么
這要看你是做什麼系統的了。如果你做的東西不需要時時更新數據建議你用smarty,如果是大型系統的話可以用thinkphp或者zendframework