您好,登錄后才能下訂單哦!
【背景介紹】
傳統(tǒng)PaaS采用sandbox實(shí)現(xiàn)app間的資源安全隔離,sandbox需要對運(yùn)行環(huán)境和編程語言進(jìn)行底層的功能限制,例如:禁止創(chuàng)建進(jìn)程和線程,禁止部分系統(tǒng)調(diào)用,禁止對某些系統(tǒng)路徑的讀寫,禁止加載C語言模塊,禁止某些網(wǎng)絡(luò)功能等,這大大增加了開發(fā)者的開發(fā)成本,也使得應(yīng)用開發(fā)和跨平臺遷移難度叫交接和學(xué)習(xí)成本變大,不利于平臺的推廣。另外困擾開發(fā)者的一個(gè)主要問題就是應(yīng)用的云端運(yùn)行環(huán)境與開發(fā)者的本地開發(fā)環(huán)境不一致,很多功能受到限制。開發(fā)者在本地開發(fā)調(diào)試好的應(yīng)用,發(fā)布到云端就遇到沙盒限制問題無法運(yùn)行,不得不針對云端環(huán)境進(jìn)行修改。BAE采用輕量虛擬機(jī)技術(shù)進(jìn)行資源隔離,在運(yùn)行環(huán)境和編程語言層面,不做任何限制;應(yīng)用在云端的運(yùn)行環(huán)境與開發(fā)者本地的開發(fā)環(huán)境保持一致,從而使得學(xué)習(xí)成本、開發(fā)和遷移成本降到最低,開發(fā)者的生產(chǎn)力得到最大限度的解放。下圖顯示沙盒技術(shù)實(shí)現(xiàn)資源隔離(左)與輕量虛擬機(jī)技術(shù)實(shí)現(xiàn)資源隔離(右)的區(qū)別:
一、服務(wù)器部署評估
應(yīng)用部署計(jì)算流量可能存在一個(gè)逐漸優(yōu)化的過程,為了防止流量突增引起雪崩效益,針對php執(zhí)行環(huán)境(代碼為hello world),對單個(gè)執(zhí)行單元并發(fā)20時(shí)候,qps達(dá)到530最高閾值,并發(fā)再次提高qps會下降,單個(gè)執(zhí)行單元配置:單核,內(nèi)存 512,帶寬10M 。部分壓測數(shù)據(jù)如下:
注:當(dāng)前壓測數(shù)據(jù)是對執(zhí)行單元最簡單的吞吐校驗(yàn)。是線上和線下的一個(gè)輔助校驗(yàn),當(dāng)有后端服務(wù)的時(shí)候此數(shù)據(jù)會有量級減少
二、特性
執(zhí)行單元由運(yùn)行在輕量虛擬機(jī)內(nèi)的一組進(jìn)程構(gòu)成;每個(gè)執(zhí)行單元對應(yīng)一個(gè)輕量虛擬機(jī)。開發(fā)者無需關(guān)心輕量虛擬機(jī)的存在,只需關(guān)注部署的執(zhí)行單元即可。
假設(shè)有一個(gè)BAE部署分配了兩個(gè)執(zhí)行單元,每個(gè)執(zhí)行單元對應(yīng)一個(gè)輕量虛擬機(jī),執(zhí)行單元啟動后,對應(yīng)著輕量虛擬機(jī)里面的一組進(jìn)程,包括lighttpd 和php-fpm 進(jìn)程等。若其中一個(gè)輕量虛擬機(jī)出現(xiàn)故障,BAE平臺自動為其重新分配一個(gè)輕量虛擬機(jī),并將執(zhí)行單元部署到新的輕量虛擬機(jī)上,這就是執(zhí)行單元的遷移。這種技術(shù)保證了應(yīng)用的高可靠性。
運(yùn)行環(huán)境和與編程語言無任何限制:對運(yùn)行環(huán)境和編程語言,包括創(chuàng)建進(jìn)程、創(chuàng)建線程、系統(tǒng)調(diào)用、執(zhí)行C擴(kuò)展模塊、文件系統(tǒng)訪問不做任何限制。
多種編程語言支持:目前支持PHP、Python、Java、Node.js,以后會陸續(xù)增加對主流開發(fā)語言的支持。目前的bae4.0開發(fā)者還可以自定義運(yùn)行環(huán)境
編程框架的支持:編程語言層面沒有任何限制,相應(yīng)地支持特定編程語言的所有編程框架。無論是主流還是小眾框架,只要能在開發(fā)者本地的環(huán)境中運(yùn)行起來,則云端也能運(yùn)行無阻。
自動安裝依賴包:通過配置依賴包文件,云端環(huán)境可以自動安裝用戶指定的依賴包。例如,package.json是nodejs-web部署類型的NPM配置文件,用于配置node.js編譯時(shí)的依賴包及啟動時(shí)的入口文件,從package.json配置的依賴包在編譯時(shí)安裝在應(yīng)用根目錄的.bae/node_modules目錄下。相似地,requirements.txt是python-web/python-worker部署類型的用戶自定義依賴配置文件,用于配置編譯時(shí)的依賴包。開發(fā)者部署代碼時(shí)添加requirements.txt文件,其中指定的依賴包會下載安裝到應(yīng)用根目錄的deps目錄下。
豐富的服務(wù)支持:提供多樣性的擴(kuò)展服務(wù),包括MySQL、MongoDB、Redis、Log、Port等。
自由的網(wǎng)絡(luò)訪問:多數(shù)PaaS對外的網(wǎng)絡(luò)訪問需要通過HTTP Proxy或Socket Proxy代理出去,而BAE對外的網(wǎng)絡(luò)訪問無需代理層的轉(zhuǎn)發(fā)。此外,BAE提供擴(kuò)展服務(wù)Port,允許開發(fā)者自定義對外提供服務(wù)的TCP端口,從而實(shí)現(xiàn)更復(fù)雜的業(yè)務(wù)邏輯。
新增worker類型:多數(shù)PaaS只提供web部署類型,BAE在此基礎(chǔ)上提供worker類型,主要用于后臺任務(wù),例如爬蟲,長期運(yùn)行于后臺,不停的去爬取各種網(wǎng)絡(luò)資源。
本地開發(fā)環(huán)境:BAE提供基于跨平臺虛擬化工具VirtualBox和虛擬機(jī)創(chuàng)建工具Vagrant的本地開發(fā)環(huán)境,通過模擬與BAE云端執(zhí)行單元完全一致的虛擬環(huán)境,確保本地調(diào)試通過的代碼部署到云端后可順利發(fā)布,節(jié)省了因本地與云端環(huán)境不一致導(dǎo)致的調(diào)試成本,在一定程度上提高了開發(fā)效率。
環(huán)境部署:本地開發(fā)環(huán)境是BAE為方便開發(fā)者使用BAE CLI工具進(jìn)行本地調(diào)試提供的Ubuntu虛擬機(jī)(12.04.2 LTS, 64bit)。
依賴于跨平臺虛擬化工具VirtualBox和虛擬機(jī)創(chuàng)建工具Vagrant,本地開發(fā)環(huán)境通過模擬與BAE遠(yuǎn)端執(zhí)行單元完全一致的虛擬環(huán)境,確保本地調(diào)試通過的代碼部署到BAE后可順利發(fā)布,節(jié)省了因本地與遠(yuǎn)端環(huán)境不一致導(dǎo)致的調(diào)試成本,在一定程度上提高了開發(fā)效率。
注意: 搭建并使用本地開發(fā)環(huán)境可以幫助開發(fā)者繞開本地與遠(yuǎn)端環(huán)境不一致引起的潛在問題,屬于可選(optional)范疇,不是使用BAE部署Web應(yīng)用的必須操作
Windows下安裝依賴包
A. 下載localenv壓縮包并解壓。
B. 從解壓包內(nèi)的localenv/SOFTWARE目錄安裝Vagrant和Virtual Box
C. 將依賴包的安裝路徑加入可執(zhí)行路徑PATH。
1) 單擊“開始”,在彈出菜單中右擊“計(jì)算機(jī)”,在下拉菜單中選擇“屬性”打開系統(tǒng)屬性對話框。
2) 單擊右側(cè)面板中的“高級系統(tǒng)設(shè)置”,打開高級系統(tǒng)設(shè)置對話框。
3) 單擊“高級”視圖右下方的“環(huán)境變量”,打開環(huán)境變量對話框。
4) 編輯用戶可執(zhí)行路徑或系統(tǒng)可執(zhí)行路徑,添加依賴包的安裝路徑并保存。路徑之間需用分號(;)隔開,以默認(rèn)方式安裝依賴包為例,需添加的路徑如下所示:
D:\HashiCorp\Vagrant\bin; C:\Program Files\Oracle\VirtualBox\
注意:
修改用戶可執(zhí)行路徑僅影響當(dāng)前用戶,修改系統(tǒng)可執(zhí)行路徑將影響所用用戶。
Linux下安裝依賴包
A. 下載依賴包。Vagrant (版本高于1.2.2) VirtualBox
1. 安裝依賴包。
以debian-based系統(tǒng)(Ubuntu, Debian)安裝Vagrant 1.3.5和Virtual Box
4.2.4為例,執(zhí)行如下命令:
$ 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
使用本地開發(fā)環(huán)境的常用開發(fā)調(diào)試命令如下:
使用BAE CLI工具本地發(fā)布
$ bae app publish --local
更多BAE CLI工具的使用方法,參見CLI入門指南。
查看本地發(fā)布的部署
PHP/Python/Node.js/Static:$ curl 127.0.0.1:8080 -H "Host: $app_domain"
Java:$ curl 127.0.0.1:8080/$war_name/
單一語言虛擬機(jī)環(huán)境中添加對其他語言的支持:$ bae_install <Programming_Language>
如當(dāng)前虛擬機(jī)環(huán)境僅支持PHP語言,執(zhí)行`bae_install,java,后可以在本地同時(shí)調(diào)試PHP和Java語言的應(yīng)用。
三、本機(jī)環(huán)境搭建
如果用戶想搭建本地的真實(shí)運(yùn)行環(huán)境,在此以linux環(huán)境搭建為例,整理步驟如此:確定自己要使用什么域名訪問應(yīng)用,以下例子用phpoffline.duapp.com.
/home/bae(應(yīng)該已存在,bae用戶主目錄,運(yùn)行入口目錄)
/home/bae/bae(php目錄,php環(huán)境)
/home/bae/lighttpd(lighttpd目錄, lighttpd-1.5.0)
/home/bae/wwwdata
/home/bae/wwwdata/htdocs(lighttpd訪問根目錄)
/home/bae/wwwdata/htdocs/phpoffline.duapp.com(bae平臺的應(yīng)用目錄,就是你定義的域名)
使用bae用戶部署lighttpd
到我的網(wǎng)盤下載tar包:
http://pan.baidu.com/share/link?shareid=78893&uk=1846015233
解包后,包內(nèi)的lighttpd目錄對應(yīng)/home/bae/lighttpd目錄,(按此目錄結(jié)構(gòu)將會節(jié)省大量配置工作,自己衡量:)
接下來修改lighttpd的配置文件:
Lighttpd白名單:使用白名單內(nèi)的域名訪問所在機(jī)器,才會被lighttpd允許。
[root@test.baidu.com home]# vi /home/bae/lighttpd/conf/domain_whitelist(白名單配置文件)
加入自己要用的域名phpoffline.duapp.com,保存退出
Lighttpd配置:配置lighttpd的各種參數(shù)和路徑
[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(此處是你機(jī)器IP):9898/log”
添加使用lua轉(zhuǎn)發(fā):
$HTTP["host"] =~ "^(.*)$" {
vhost-magnet.path-pattern = var.wwwdir + "/%_"
vhost-magnet.attract-raw-url-to = ( "/bae_app_conf.lua" )
}
hosts 和軟鏈
Root賬戶登錄虛擬機(jī),修改hosts文件
[root@test.baidu.com home]# vi /etc/hosts
添加這樣一行:
10.**.**.**.** phpoffline.duapp.com,保存退出
Bae用戶在/home/bae/wwwdata/htdocs下創(chuàng)建軟鏈,指向應(yīng)用的目錄/home/bae/wwwdata/phpoffline.duapp.com
如果在windows下訪問,請?jiān)趆osts中配置域名和應(yīng)用部署ip的映射關(guān)系,如:10.**.**.**.** phpoffline.duapp.com(linux sebserver服務(wù)器地址)
部署PHP
首先還是到我的網(wǎng)盤下載PHP部署用的tar包:http://pan.baidu.com/share/link?shareid=78968&uk=1846015233
下載后,里面有三個(gè)目錄,放到/home/bae/bae下面去
修改PHP相應(yīng)的配置文件:
首先檢查/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項(xiàng),把/home/bae/wwwdata/htdocs/*******.com替換為:/home/bae/wwwdata/htdocs/phpoffline.duapp.com
找到error_log項(xiàng),確認(rèn)是這個(gè):/home/bae/lighttpd/log/php.log.wf
啟動服務(wù)
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)
部署應(yīng)用
首先從svn上co自己需要的版本(待開發(fā)的4位版本或者最新基線,等等)
進(jìn)入虛擬機(jī)的/home/bae/wwwdata/htdocs/phpoffline.duapp.com下,通過svn co命令把代碼拿到該目錄下下(拿下來應(yīng)該是個(gè)appid****目錄,目錄結(jié)構(gòu)應(yīng)該是:app.conf,index.php)。在次場景對于的url是https://svn.duapp.com/appid0d9c295kd8。/home/bae/wwwdata/htdocs/目錄下面建立域名 phpoffline.duapp.com 到ci 目錄的appid0d9c295kd8的軟鏈接。通過windows或是linux都能訪問對于的應(yīng)用。 Ln –s appid0d9c295kd8 /home/bae/htdocs/phpoffline.duapp.com
四、app.conf 和bae_app_conf.lua 轉(zhuǎn)換關(guān)系
上傳代碼的時(shí)候使用時(shí)app.conf,但是轉(zhuǎn)發(fā)的時(shí)候再lighttpd使用時(shí)lua轉(zhuǎn)發(fā)。這是因?yàn)樵诖a發(fā)布的時(shí)候平臺對app.conf做了轉(zhuǎn)發(fā)切換,app.conf介紹請參考:https://bce.baidu.com/doc/BAE/GUIGettingStarted.html#.E9.85.8D.E7.BD.AEapp.conf
這里以一個(gè)基準(zhǔn)app.conf和bae_app_conf.lua生成轉(zhuǎn)化:
其他轉(zhuǎn)換請參考:http://pan.baidu.com/s/1bnTUijP
更多干貨分享請關(guān)注”百度MTC學(xué)院“http://mtc.baidu.com/academy/article
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。