您好,登錄后才能下訂單哦!
【背景介紹】
傳統PaaS采用sandbox實現app間的資源安全隔離,sandbox需要對運行環境和編程語言進行底層的功能限制,例如:禁止創建進程和線程,禁止部分系統調用,禁止對某些系統路徑的讀寫,禁止加載C語言模塊,禁止某些網絡功能等,這大大增加了開發者的開發成本,也使得應用開發和跨平臺遷移難度叫交接和學習成本變大,不利于平臺的推廣。另外困擾開發者的一個主要問題就是應用的云端運行環境與開發者的本地開發環境不一致,很多功能受到限制。開發者在本地開發調試好的應用,發布到云端就遇到沙盒限制問題無法運行,不得不針對云端環境進行修改。BAE采用輕量虛擬機技術進行資源隔離,在運行環境和編程語言層面,不做任何限制;應用在云端的運行環境與開發者本地的開發環境保持一致,從而使得學習成本、開發和遷移成本降到最低,開發者的生產力得到最大限度的解放。下圖顯示沙盒技術實現資源隔離(左)與輕量虛擬機技術實現資源隔離(右)的區別:
一、服務器部署評估
應用部署計算流量可能存在一個逐漸優化的過程,為了防止流量突增引起雪崩效益,針對php執行環境(代碼為hello world),對單個執行單元并發20時候,qps達到530最高閾值,并發再次提高qps會下降,單個執行單元配置:單核,內存 512,帶寬10M 。部分壓測數據如下:
注:當前壓測數據是對執行單元最簡單的吞吐校驗。是線上和線下的一個輔助校驗,當有后端服務的時候此數據會有量級減少
二、特性
執行單元由運行在輕量虛擬機內的一組進程構成;每個執行單元對應一個輕量虛擬機。開發者無需關心輕量虛擬機的存在,只需關注部署的執行單元即可。
假設有一個BAE部署分配了兩個執行單元,每個執行單元對應一個輕量虛擬機,執行單元啟動后,對應著輕量虛擬機里面的一組進程,包括lighttpd 和php-fpm 進程等。若其中一個輕量虛擬機出現故障,BAE平臺自動為其重新分配一個輕量虛擬機,并將執行單元部署到新的輕量虛擬機上,這就是執行單元的遷移。這種技術保證了應用的高可靠性。
運行環境和與編程語言無任何限制:對運行環境和編程語言,包括創建進程、創建線程、系統調用、執行C擴展模塊、文件系統訪問不做任何限制。
多種編程語言支持:目前支持PHP、Python、Java、Node.js,以后會陸續增加對主流開發語言的支持。目前的bae4.0開發者還可以自定義運行環境
編程框架的支持:編程語言層面沒有任何限制,相應地支持特定編程語言的所有編程框架。無論是主流還是小眾框架,只要能在開發者本地的環境中運行起來,則云端也能運行無阻。
自動安裝依賴包:通過配置依賴包文件,云端環境可以自動安裝用戶指定的依賴包。例如,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語言的應用。
三、本機環境搭建
如果用戶想搭建本地的真實運行環境,在此以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
四、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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。