1. 程式人生 > >lamp生產環境部署

lamp生產環境部署

tro 時也 顯示 sca express 系列 res stc oracl

1. LAMP介紹

LAMP=Linux+Apache(httpd)+MySQL(MairaDB)+PHP(Python)

1.1 Web資源類型

靜態資源:原始形式與相應內容一致(html,css,js,jpg,gif,png等文件)
動態資源:原始形式通過為程序文件,需要在服務器端執行之後結果返回給客戶端(php,jsp,asp等)

客戶端技術:javascript
服務器端技術:php, jsp, python
MIME協議支持的資源: application/x-http-php

1.2 CGI

CGI: Command Cateway Interface,通用網管接口(協議)
作用:可以讓一個客戶端,從網頁瀏覽器向執行在網絡服務器上的程序輸出數據;CGI描述了客戶端和服務器程序之間傳輸的一種標準。

程序是指令和數據的集合。

指令是代碼文件,數據是數據存儲系統或文件。

數據模型:

  • 層次模型
  • 網狀模型
  • 關系模型:表(行+列)

關系模型:IngreSQL,Oracle,Sybase,Infomix,DB2,SQL Server,MySQL, PostgreSQL,MariaDB

請求流程:
靜態資源:Client瀏覽器通過http協議無狀態連接請求資源,服務器端監聽的httpd服務接受請求並I/O讀寫請求文件並響應給客戶端。

動態資源:Client瀏覽器通過http協議無狀態連接請求資源,服務器端監聽的httpd服務接受請求資源,其資源請求類型為PHP資源時,通過httpd的php模塊請求I/O並把結果返回給httpd服務,最終httpd服務響應給客戶端。

動態資源:Client瀏覽器通過http協議無狀態連接請求資源,服務器端監聽的httpd服務接受請求資源,其資源請求類型為PHP資源時,通過httpd的php模塊處理請求,其處理過程有數據請求時通過PHP的數據庫服務接口連接數據庫服務器並處理結果返回給PHP處理陳旭,PHP處理程序結果返回給httpd服務,最終httpd服務響應給客戶端。

1.3 PHP

  服務器腳本編程語言、嵌入到html中的嵌入式web程序開發語言;基於zend編譯成opcode(二進制格式的字節碼,重復運行,可省略編譯環境)

1.3.1 PHP簡介
  PHP是通用**服務器端腳本編程語言**,其主要用於web開發以實現動態web頁面,它也是最早實現將腳本嵌入HTML源碼文檔中的服務器端腳本語言之一。同時,php還提供了一個命令行接口,因此,其也可以在大多數系統上作為一個獨立的shell來使用。

  Rasmus Lerdorf於1994年開始開發PHP,它是初是一組被Rasmus Lerdorf稱作“Personal Home Page Tool” 的Perl腳本, 這些腳本可以用於顯示作者的簡歷並記錄用戶對其網站的訪問。後來,Rasmus Lerdorf使用C語言將這些Perl腳本重寫為CGI程序,還為其增加了運行Web forms的能力以及與數據庫交互的特性,並將其重命名為“Personal Home Page/Forms Interpreter”或“PHP/FI”。此時,PHP/FI已經可以用於開發簡單的動態web程序了,這即是PHP 1.0。1995年6月,Rasmus Lerdorf把它的PHP發布於comp.infosystems.www.authoring.cgi Usenet討論組,從此PHP開始走進人們的視野。1997年,其2.0版本發布。

  1997年,兩名以色列程序員Zeev Suraski和Andi Gutmans重寫的PHP的分析器(parser)成為PHP發展到3.0的基礎,而且從此將PHP重命名為PHP: Hypertext Preprocessor。此後,這兩名程序員開始重寫整個PHP核心,並於1999年發布了Zend Engine 1.0,這也意味著PHP 4.0的誕生。2004年7月,Zend Engine 2.0發布,由此也將PHP帶入了PHP 5時代。PHP5包含了許多重要的新特性,如增強的面向對象編程的支持、支持PDO(PHP Data Objects)擴展機制以及一系列對PHP性能的改進。

1.3.2 PHP Zend Engine
Zend Engine是開源的、PHP腳本語言的解釋器,它最早是由以色列理工學院(Technion)的學生Andi Gutmans和Zeev Suraski所開發,Zend也正是此二人名字的合稱。後來兩人聯合創立了Zend Technologies公司。

  Zend Engine 1.0於1999年隨PHP 4發布,由C語言開發且經過高度優化,並能夠做為PHP的後端模塊使用。Zend Engine為PHP提供了內存和資源管理的功能以及其它的一些標準服務,其高性能、可靠性和可擴展性在促進PHP成為一種流行的語言方面發揮了重要作用。

  Zend Engine的出現將PHP代碼的處理過程分成了兩個階段:首先是分析PHP代碼並將其轉換為稱作Zend opcode的二進制格式(類似Java的字節碼),並將其存儲於內存中;第二階段是使用Zend Engine去執行這些轉換後的Opcode。

1.3.3 PHP的Opcode
Opcode是一種PHP腳本編譯後的中間語言,就像Java的ByteCode,或者.NET的MSL。PHP執行PHP腳本代碼一般會經過如下4個步驟(確切的來說,應該是PHP的語言引擎Zend):

1.Scanning(Lexing) —— 將PHP代碼轉換為語言片段(Tokens)
2.Parsing —— 將Tokens轉換成簡單而有意義的表達式
3.Compilation —— 將表達式編譯成Opocdes
4.Execution —— 順次執行Opcodes,每次一條,從而實現PHP腳本的功能

掃描 -> 分析 -> 編譯 -> 執行

1.3.4 php的加速器
  基於PHP的特殊擴展機制如opcode緩存擴展也可以將opcode緩存於php的共享內存中,從而可以讓同一段代碼的後續重復執行時跳過編譯階段以提高性能。由此也可以看出,這些加速器並非真正提高了opcode的運行速度,而僅是通過分析opcode後並將它們重新排列以達到快速執行的目的。

常見的php加速器有
APC (Alternative PHP Cache)
遵循PHP License的開源框架,PHP opcode緩存加速器,目前的版本不適用於PHP 5.4。項目地址,http://pecl.php.net/package/APC。

eAccelerator
源於Turck MMCache,早期的版本包含了一個PHP encoder和PHP loader,目前encoder已經不在支持。項目地址, http://eaccelerator.net/。

XCache
快速而且穩定的PHP opcode緩存,經過嚴格測試且被大量用於生產環境。項目地址,http://xcache.lighttpd.net/

Zend Optimizer和Zend Guard Loader
Zend Optimizer並非一個opcode加速器,它是由Zend Technologies為PHP5.2及以前的版本提供的一個免費、閉源的PHP擴展,其能夠運行由Zend Guard生成的加密的PHP代碼或模糊代碼。 而Zend Guard Loader則是專為PHP5.3提供的類似於Zend Optimizer功能的擴展。項目地址,http://www.zend.com/en/products/guard/runtime-decoders

NuSphere PhpExpress
NuSphere的一款開源PHP加速器,它支持裝載通過NuSphere PHP Encoder編碼的PHP程序文件,並能夠實現對常規PHP文件的執行加速。項目地址,http://www.nusphere.com/products/phpexpress.htm

1.3.5 PHP源碼目錄結構
  PHP的源碼在結構上非常清晰。其代碼根目錄中主要包含了一些說明文件以及設計方案,並提供了如下子目錄:

1、build —— 顧名思義,這裏主要放置一些跟源碼編譯相關的文件,比如開始構建之前的buildconf腳本及一些檢查環境的腳本等。
2、ext —— 官方的擴展目錄,包括了絕大多數PHP的函數的定義和實現,如array系列,pdo系列,spl系列等函數的實現。 個人開發的擴展在測試時也可以放到這個目錄,以方便測試等。
3、main —— 這裏存放的就是PHP最為核心的文件了,是實現PHP的基礎設施,這裏和Zend引擎不一樣,Zend引擎主要實現語言最核心的語言運行環境。
4、Zend —— Zend引擎的實現目錄,比如腳本的詞法語法解析,opcode的執行以及擴展機制的實現等等。
5、pear —— PHP 擴展與應用倉庫,包含PEAR的核心文件。
6、sapi —— 包含了各種服務器抽象層的代碼,例如apache的mod_php,cgi,fastcgi以及fpm等等接口。
7、TSRM —— PHP的線程安全是構建在TSRM庫之上的,PHP實現中常見的*G宏通常是對TSRM的封裝,TSRM(Thread Safe Resource Manager)線程安全資源管理器。
8、tests —— PHP的測試腳本集合,包含PHP各項功能的測試文件。
9、win32 —— 這個目錄主要包括Windows平臺相關的一些實現,比如sokcet的實現在Windows下和*Nix平臺就不太一樣,同時也包括了Windows下編譯PHP相關的腳本。

http與php結合的方式:

  • CGI
  • FastCGI
  • modules (把php編譯成為httpd的模塊)
    • MPM
      • prefork: libphp5.so
      • event, worker: libphp5-zts.so

1.4 sendfile()

lamp生產環境部署