百度应用部署秘籍

【背景介绍】

传统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允许。

[[email protected] home]# vi /home/bae/lighttpd/conf/domain_whitelist(白名单配置文件)

加入自己要用的域名phpoffline.duapp.com,保存退出

Lighttpd配置:配置lighttpd的各种参数和路径

[[email protected] 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文件

[[email protected] 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启动/停止:

[[email protected] home]#/home/bae/bae/php/sbin/php-fpm start(stop)

Lighttpd启动/停止:

[[email protected] 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

时间: 2024-11-12 07:50:42

百度应用部署秘籍的相关文章

如何使用百度bae部署web项目

百度bae提供了支持各种开发环境的的应用引擎,包括node.js.php.java等,而且还免费提供了一定容量的mysql.mongodb.redis等数据库,所以,可以把它当作一个云服务器来使用.因为价格不贵,最低配置的才2毛钱一天(虽然说是最低配置,其实如果只是用来学习的话已经足够的了!).好吧,说了一大坨的废话,该进入正题了,说说如何使用bae吧,希望对那些没有用过bae引擎的又想找个廉价的服务器的盆友们有所帮助哈! 首先,打开bae的首页:https://bce.baidu.com/pr

微商百度霸屏秘籍

现在的互联网发展迅速,现已变成了PC端和移动端的互联网.PC端指的是我们常用的台式电脑,移动端顾名思义就是指手机上网啦. 首要来说一下移动端的霸屏秘籍. 1.小学水平 1)你要有一个微信大众号,假如有条件,最好是认证的.没有认证也没关系,能够作为自己的一个订阅号,每天能够给你的客户提供价值. 你得让你的客户查找你的品牌名时,第一时间找到你. 微信大众号怎样注册,这儿我就不具体讲,改天有时间,我再共享,今日主要是讲百度霸屏秘籍. 2)假如你有自己的公司,有公司品牌的,最好要注册一个品牌大众号和一个

Nodejs+express+mysql+百度BAE部署node后台

转载请注明出处:http://www.cnblogs.com/shamoyuu/p/node_bae.html 百度有一个应用引擎,价格非常便宜,Java的tomcat每天4毛钱,node每天2毛钱,我以前在上面搭建过一个JavaWeb的项目,今天来说说怎么搭建nodejs+express+mysql的后台. 首先打开console.bce.baidu.com,注册登录完成,然后新建一个应用引擎BAE如下图进行设置 目前基础版的BAE只支持node4.4.4,不过应该已经足够了.如果是用koa2

百度云部署SSL证书

查找中间证书 为了确保兼容到所有浏览器,我们必须在阿里云上部署中间证书,如果不部署证书,虽然安装过程可以完全也不会报错,但可能导致Android系统,Chrome 和 Firefox等浏览器无法识别.请到 中间证书下载工具,输入您的Server.cer,然后下载中间证书,请将中间证书保存为Chain.cer. 服务器证书和中间证书连接 首先我们需要将中间证书Chain.cer加入到服务器证书Server.cer文件中,请将Chain.cer中的所有内容复制,并粘贴到Server.cer,顺序是:

jenkins自动构建部署

环境 centos7   tomcat8.5.37   maven3.3.9   jdk8   git1.8.3.1 安装jdk,tomcat,maven,git(环境变量,配置文件什么的自行百度) 部署jenkins(下载jenkins.war扔进tomcat即可,如果报错了就将war包解压一下再扔进去) 配置jenkins,插件管理,系统设置,全局工具设置,添加凭证等等 (注意要安装deploy to a container插件才能构建后自动部署) 下面就是重点了 构建规则 这里我选的是定时

Jeecg社区wiki在开放,终于可以在线看文档啦!!!

Jeecg社区wiki在开放,终于可以在线看文档啦!!! 2014-12-18 scott JEECG jeecg开源社区wiki正式启动了,方便大家看文档 访问地址是: http://osbaba.com:8002/display/12/Home 大家可以点击下面的阅读原文进入该链接哟 产品介绍 技术文档 用户指南 jeecg工作流快速开发平台 easypoi文档 jeecg数据权限操作手册 jeewx(捷微)微信管家系统 jeecg3.4-maven入门-eclipse jeewx-cms配

便捷的前端开发工具

便捷的前端开发工具 说到工具?那是可是不得了的东西,它是人类文明进步的基石.人类,从石器时代发展到现代社会,也是工具,从石具到现代高科技的演变过程史!当然啦!我们现在互联网时代,前端开发,也是离不开工具的.使用工具是为了创造更好的工具,为了更高的效率.那作为前端爱好者或前端开发者们,你们知道哪些前端开发工具吗?享受了它们的便捷了吗?今天,我就给大家介绍几个开发者工具吧! CSS检查工具-CKStyle 之前的几篇文章给大家介绍有关CSS有关的知识点,想必有不少人已经遇到过有关CSS压缩或检查的问

(转) 多模态机器翻译

本文转自: http://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650722318&idx=4&sn=728e8e264ca05f2366d75a27744bb383&chksm=871b1470b06c9d669f9a077f0b41502d7682c0f54d5585091a33ddbb5c1a99b00fc9dcbf6d39&mpshare=1&scene=23&srcid=0115Pna

基于JavaEE&amp;&amp;移动平台的企业级房地产ERP采购系统

分享一套完整的系统性企业级项目的开发视频教程, 咨询QQ:779591710 课程5大亮点: 1.商业项目,业务复杂,功能繁多.依托企业真实商业项目,还原企业大型ERP系统开发全程 2.内容完整全面,共四季.分别为采购系统.客户关系销售系统.成本管理系统.Android版本的手机客户端 3.技术点实用,繁多. 包括但不限于以下技术点: (1) Spring IOC,Spring MVC,MyBatis,BeifengFlow,FushionChart,Flexigrid,jackrabbit (