【背景介紹】php
傳統PaaS採用sandbox實現app間的資源安全隔離,sandbox須要對運行環境和編程語言進行底層的功能限制,例如:禁止建立進程和線程,禁止部分系統調用,禁止對某些系統路徑的讀寫,禁止加載C語言模塊,禁止某些網絡功能等,這大大增長了開發者的開發成本,也使得應用開發和跨平臺遷移難度叫交接和學習成本變大,不利於平臺的推廣。另外困擾開發者的一個主要問題就是應用的雲端運行環境與開發者的本地開發環境不一致,不少功能受到限制。開發者在本地開發調試好的應用,發佈到雲端就遇到沙盒限制問題沒法運行,不得不針對雲端環境進行修改。BAE採用輕量虛擬機技術進行資源隔離,在運行環境和編程語言層面,不作任何限制;應用在雲端的運行環境與開發者本地的開發環境保持一致,從而使得學習成本、開發和遷移成本降到最低,開發者的生產力獲得最大限度的解放。下圖顯示沙盒技術實現資源隔離(左)與輕量虛擬機技術實現資源隔離(右)的區別:html
1、服務器部署評估java
應用部署計算流量可能存在一個逐漸優化的過程,爲了防止流量突增引發雪崩效益,針對php執行環境(代碼爲hello world),對單個執行單元併發20時候,qps達到530最高閾值,併發再次提升qps會降低,單個執行單元配置:單核,內存 512,帶寬10M 。部分壓測數據以下:node
注:當前壓測數據是對執行單元最簡單的吞吐校驗。是線上和線下的一個輔助校驗,當有後端服務的時候此數據會有量級減小python
2、特性linux
執行單元由運行在輕量虛擬機內的一組進程構成;每一個執行單元對應一個輕量虛擬機。開發者無需關心輕量虛擬機的存在,只需關注部署的執行單元便可。web
假設有一個BAE部署分配了兩個執行單元,每一個執行單元對應一個輕量虛擬機,執行單元啓動後,對應着輕量虛擬機裏面的一組進程,包括lighttpd 和php-fpm 進程等。若其中一個輕量虛擬機出現故障,BAE平臺自動爲其從新分配一個輕量虛擬機,並將執行單元部署到新的輕量虛擬機上,這就是執行單元的遷移。這種技術保證了應用的高可靠性。編程
運行環境和與編程語言無任何限制:對運行環境和編程語言,包括建立進程、建立線程、系統調用、執行C擴展模塊、文件系統訪問不作任何限制。json
多種編程語言支持:目前支持PHP、Python、Java、Node.js,之後會陸續增長對主流開發語言的支持。目前的bae4.0開發者還能夠自定義運行環境windows
編程框架的支持:編程語言層面沒有任何限制,相應地支持特定編程語言的全部編程框架。不管是主流仍是小衆框架,只要能在開發者本地的環境中運行起來,則雲端也能運行無阻。
自動安裝依賴包:經過配置依賴包文件,雲端環境能夠自動安裝用戶指定的依賴包。例如,package.json是nodejs-web部署類型的NPM配置文件,用於配置node.js編譯時的依賴包及啓動時的入口文件,從package.json配置的依賴包在編譯時安裝在應用根目錄的.bae/node_modules目錄下。類似地,requirements.txt是python-web/python-worker部署類型的用戶自定義依賴配置文件,用於配置編譯時的依賴包。開發者部署代碼時添加requirements.txt文件,其中指定的依賴包會下載安裝到應用根目錄的deps目錄下。
豐富的服務支持:提供多樣性的擴展服務,包括MySQL、MongoDB、Redis、Log、Port等。
自由的網絡訪問:多數PaaS對外的網絡訪問須要經過HTTP Proxy或Socket Proxy代理出去,而BAE對外的網絡訪問無需代理層的轉發。此外,BAE提供擴展服務Port,容許開發者自定義對外提供服務的TCP端口,從而實現更復雜的業務邏輯。
新增worker類型:多數PaaS只提供web部署類型,BAE在此基礎上提供worker類型,主要用於後臺任務,例如爬蟲,長期運行於後臺,不停的去爬取各類網絡資源。
本地開發環境:BAE提供基於跨平臺虛擬化工具VirtualBox和虛擬機建立工具Vagrant的本地開發環境,經過模擬與BAE雲端執行單元徹底一致的虛擬環境,確保本地調試經過的代碼部署到雲端後可順利發佈,節省了因本地與雲端環境不一致致使的調試成本,在必定程度上提升了開發效率。
環境部署:本地開發環境是BAE爲方便開發者使用BAE CLI工具進行本地調試提供的Ubuntu虛擬機(12.04.2 LTS, 64bit)。
依賴於跨平臺虛擬化工具VirtualBox和虛擬機建立工具Vagrant,本地開發環境經過模擬與BAE遠端執行單元徹底一致的虛擬環境,確保本地調試經過的代碼部署到BAE後可順利發佈,節省了因本地與遠端環境不一致致使的調試成本,在必定程度上提升了開發效率。
注意: 搭建並使用本地開發環境能夠幫助開發者繞開本地與遠端環境不一致引發的潛在問題,屬於可選(optional)範疇,不是使用BAE部署Web應用的必須操做
Windows下安裝依賴包
A. 下載localenv壓縮包並解壓。
B. 從解壓包內的localenv/SOFTWARE目錄安裝Vagrant和Virtual Box
C. 將依賴包的安裝路徑加入可執行路徑PATH。
1) 單擊「開始」,在彈出菜單中右擊「計算機」,在下拉菜單中選擇「屬性」打開系統屬性對話框。
2) 單擊右側面板中的「高級系統設置」,打開高級系統設置對話框。
3) 單擊「高級」視圖右下方的「環境變量」,打開環境變量對話框。
4) 編輯用戶可執行路徑或系統可執行路徑,添加依賴包的安裝路徑並保存。路徑之間需用分號(;)隔開,以默認方式安裝依賴包爲例,需添加的路徑以下所示:
D:\HashiCorp\Vagrant\bin; C:\Program Files\Oracle\VirtualBox\
注意:
修改用戶可執行路徑僅影響當前用戶,修改系統可執行路徑將影響所用用戶。
Linux下安裝依賴包
A. 下載依賴包。Vagrant (版本高於1.2.2) VirtualBox
1. 安裝依賴包。
以debian-based系統(Ubuntu, Debian)安裝Vagrant 1.3.5和Virtual Box
4.2.4爲例,執行以下命令:
$ sudo dpkg -i ~/Downloads/vagrant_1.3.5_x86_64.deb
$ sudo dpkg -i ~/Downloads/virtualbox-4.2_4.2.16-86992~Ubuntu~precise_amd64.deb
使用本地開發環境的經常使用開發調試命令以下:
• 使用BAE CLI工具本地發佈
• $ bae app publish --local
更多BAE CLI工具的使用方法,參見CLI入門指南。
• 查看本地發佈的部署
• PHP/Python/Node.js/Static:$ curl 127.0.0.1:8080 -H "Host: $app_domain"
• Java:$ curl 127.0.0.1:8080/$war_name/
• 單一語言虛擬機環境中添加對其餘語言的支持:$ bae_install <Programming_Language>
如當前虛擬機環境僅支持PHP語言,執行`bae_install,java,後能夠在本地同時調試PHP和Java語言的應用。
3、本機環境搭建
若是用戶想搭建本地的真實運行環境,在此以linux環境搭建爲例,整理步驟如此:肯定本身要使用什麼域名訪問應用,如下例子用phpoffline.duapp.com.
/home/bae(應該已存在,bae用戶主目錄,運行入口目錄)
/home/bae/bae(php目錄,php環境)
/home/bae/lighttpd(lighttpd目錄, lighttpd-1.5.0)
/home/bae/wwwdata
/home/bae/wwwdata/htdocs(lighttpd訪問根目錄)
/home/bae/wwwdata/htdocs/phpoffline.duapp.com(bae平臺的應用目錄,就是你定義的域名)
使用bae用戶部署lighttpd
到個人網盤下載tar包:
http://pan.baidu.com/share/link?shareid=78893&uk=1846015233
解包後,包內的lighttpd目錄對應/home/bae/lighttpd目錄,(按此目錄結構將會節省大量配置工做,本身衡量:)
接下來修改lighttpd的配置文件:
Lighttpd白名單:使用白名單內的域名訪問所在機器,纔會被lighttpd容許。
[root@test.baidu.com home]# vi /home/bae/lighttpd/conf/domain_whitelist(白名單配置文件)
加入本身要用的域名phpoffline.duapp.com,保存退出
Lighttpd配置:配置lighttpd的各類參數和路徑
[root@test.baidu.com home]# vi /home/bae/lighttpd/conf/lighttpd.conf
var.rundir = 「/home/bae/lighttpd」
var.wwwdir = 「/home/bae/wwwdata/htdocs」
var.netpath = 「10.40.72.110(此處是你機器IP):9898/log」
添加使用lua轉發:
$HTTP["host"] =~ "^(.*)$" {
vhost-magnet.path-pattern = var.wwwdir + "/%_"
vhost-magnet.attract-raw-url-to = ( "/bae_app_conf.lua" )
}
hosts 和軟鏈
Root帳戶登陸虛擬機,修改hosts文件
[root@test.baidu.com home]# vi /etc/hosts
添加這樣一行:
10.**.**.**.** phpoffline.duapp.com,保存退出
Bae用戶在/home/bae/wwwdata/htdocs下建立軟鏈,指向應用的目錄/home/bae/wwwdata/phpoffline.duapp.com
若是在windows下訪問,請在hosts中配置域名和應用部署ip的映射關係,如:10.**.**.**.** phpoffline.duapp.com(linux sebserver服務器地址)
部署PHP
首先仍是到個人網盤下載PHP部署用的tar包:http://pan.baidu.com/share/link?shareid=78968&uk=1846015233
下載後,裏面有三個目錄,放到/home/bae/bae下面去
修改PHP相應的配置文件:
首先檢查/home/bae/bae/php/etc/php-fpm.conf,這2處配置與下圖路徑一致
而後檢查/home/bae/bae/php/sbin/php-fpm,這3處與下圖一致
最後,vi /home/bae/bae/phplib/php.ini
找到open_basedir項,把/home/bae/wwwdata/htdocs/*******.com替換爲:/home/bae/wwwdata/htdocs/phpoffline.duapp.com
找到error_log項,確認是這個:/home/bae/lighttpd/log/php.log.wf
啓動服務
Php啓動/中止:
[bae@dbl-wise-tt-newrd07.vm.baidu.com home]#/home/bae/bae/php/sbin/php-fpm start(stop)
Lighttpd啓動/中止:
[bae@dbl-wise-tt-newrd07.vm.baidu.com home]#/home/bae/lighttpd/bin/lighttpd_control start(stop)
部署應用
首先從svn上co本身須要的版本(待開發的4位版本或者最新基線,等等)
進入虛擬機的/home/bae/wwwdata/htdocs/phpoffline.duapp.com下,經過svn co命令把代碼拿到該目錄下下(拿下來應該是個appid****目錄,目錄結構應該是:app.conf,index.php)。在次場景對於的url是https://svn.duapp.com/appid0d9c295kd8。/home/bae/wwwdata/htdocs/目錄下面創建域名 phpoffline.duapp.com 到ci 目錄的appid0d9c295kd8的軟連接。經過windows或是linux都能訪問對於的應用。 Ln –s appid0d9c295kd8 /home/bae/htdocs/phpoffline.duapp.com
4、app.conf 和bae_app_conf.lua 轉換關係
上傳代碼的時候使用時app.conf,可是轉發的時候再lighttpd使用時lua轉發。這是由於在代碼發佈的時候平臺對app.conf作了轉發切換,app.conf介紹請參考:https://bce.baidu.com/doc/BAE/GUIGettingStarted.html#.E9.85.8D.E7.BD.AEapp.conf
這裏以一個基準app.conf和bae_app_conf.lua生成轉化:
其餘轉換請參考:http://pan.baidu.com/s/1bnTUijP
更多幹貨分享請關注」百度MTC學院「http://mtc.baidu.com/academy/article