百度应用部署秘籍

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

【背景介绍】

传统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

转载于:https://my.oschina.net/u/2554847/blog/681847

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/543159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java8新特性_JAVA8十大新特性详解

一、接口的默认方法Java 8允许我们给接口添加一个非抽象的方法实现&#xff0c;只需要使用 default关键字即可&#xff0c;这个特征又叫做扩展方法&#xff0c;示例如下&#xff1a;interface Formula { double calculate(int a); default double sqrt(int a) { return Math.sq…

spark1.6.1 on yarn搭建部署

注&#xff1a;本文是建立在hadoop已经搭建完成的基础上进行的。 Apache Spark是一个分布式计算框架&#xff0c;旨在简化运行于计算机集群上的并行程序的编写。该框架对资源调度&#xff0c;任务的提交、执行和跟踪&#xff0c;节点间的通信以及数据并行处理的内在底层操作都进…

主线程是如何向子线程传递数据的?_c++ 利用thread创建线程

用进行多线程开发小时候&#xff0c;老师总是教育我们上课要专心&#xff0c;“一心不可二用”。可是CPU这个不听话的“熊孩子”偏偏却在一个芯片中加入了两个甚至多个运算核心&#xff0c;想要一“芯”二用。从硬件厂商的角度&#xff0c;通过增加CPU的运算核心&#xff0c;突…

php多维数组交集,求数组差/交集函数-php数组函数(二)

求数组差集函数函数只检查了多维数组中的一维。可以用 array_diff($array1[0], $array2[0]) 检查更深的维度。u&#xff1a;自定义函数比较&#xff0c;a(association)&#xff1a;同时比较键和值。自定义函数callable $value_compare_func必须返回一个小于零&#xff0c;等于零…

正则过滤符号_多角度理解正则项

过拟合和欠拟合什么是过拟合和欠拟合过拟合&#xff1a;模型在训练集上效果好&#xff0c;在测试集上效果差欠拟合&#xff1a;在训练集上效果就不好产生过拟合的原因参数太多&#xff0c;模型复杂度太高数据量少&#xff0c;训练轮次过多样本中噪声较大&#xff0c;模型拟合了…

PHP页面中嵌套go语言,go语言嵌套类型的使用细节

1. 定义在Go语言中&#xff0c;嵌套类型是将已有的类型直接声明在新的结构类型里。被嵌入的类型被称为新的外部类型的内部类型。通过嵌入类型&#xff0c;与内部类型相关的成员变量会提升到外部类型上。就好像这些成员变量直接声明在外部类型一样。如下图所示&#xff1a;外部类…

jvm内存模型_JVM内存模型的相关概念

1.前言Android的虚拟机是根据移动设备的特点基于Java虚拟机(JVM)改进而来&#xff0c;虽然没有保留规范&#xff0c;但作为Java语言的使用者&#xff0c;了解一下JVM的规范还是有必要的。2.JVM内存模型JVM在执行Java程序时&#xff0c;会把它管理的内存划分为若干个的区域&…

LNMP/LEMP(PHP7.0.04+mysql5.7.12+nginx1.10.0)

预览:Installing Nginx with PHP 7 and MySQL 5.7 (LEMP) on Ubuntu 16.04 LTSThis tutorial exists for these OS versionsUbuntu 15.10 (Wily Werewolf)Ubuntu 14.04 LTS (Trusty Tahr)Ubuntu 13.04 (Raring Ringtail)Ubuntu 12.10 (Quantal Quetzal)Ubuntu 12.04 LTS (Preci…

length函数的头文件_Framebuffer 应用编程中涉及的 API 函数

本节程序的目的是&#xff1a;打开 LCD 设备节点&#xff0c;获取分辨率等参数&#xff0c;映射 Framebuffer&#xff0c;最后实现描点函数。5.2.1 open 函数在 Ubuntu 中执行“man 2 open”&#xff0c;可以看到 open 函数的说明&#xff1a;头文件&#xff1a;#include <s…

xib中UIScrollView固定底部内容

UIScrollView的高度在xib中设置 需要固定的部分用代码添加: UIImageView *textLogo [[UIImageView alloc] initWithFrame:CGRectMake((kMSScreenWith - 153)/2, (kMSScreenHeight - 118 > 549 ? kMSScreenHeight : 667) - 173, 153, 35)]; textLogo.image [UIImage image…

hive

hive 的 表与hdfs数据关系映射放在元数据库中&#xff0c;也就是mysql中&#xff0c;而真正的数据放在 hdfs中&#xff0c;通过mysql中表 &#xff0c;字段等与hdfs上数据的映射来查询 1.hive是基于Hadoop的一个数据仓库工具&#xff0c;可以将结构化的数据文件映射为一张数据库…

判断图像局部过暗_CVPR 2020丨基于记忆增强的全局局部整合网络:更准确的视频物体检测方法...

编者按&#xff1a;在视频物体检测任务中&#xff0c;由于相机失焦、物体遮挡等问题&#xff0c;仅基于图像的目标检测器很可能达不到令人满意的效果。针对此类问题&#xff0c;微软亚洲研究院提出了基于记忆增强的全局-局部整合网络(Memory Enhanced Global-Local Aggregation…

第三章:多态

一、多态 1、什么是多态? 解析&#xff1a;不同的对象对于同一个操作&#xff0c;做出的响应不同 具有表现多种形态的能力的特征 2、使用多态的优点 解析&#xff1a;为了实现统一调用 一个小例子&#xff1a;<父类类型作为参数> 父类(Pet) 子类(Gog,Penguin) 主人类(Ma…

请检查virtualboxapi是否正确安装_电机行业安装绝缘轴承规范

1.安装前检查轴承安装前&#xff0c;请检查滚动体表面是否有毛刺&#xff0c;划痕或裂缝。 轴承的径向游隙和轴向游隙是否合格&#xff0c;通常仅测量径向游隙。 其次&#xff0c;检查轴承型号是否正确。 有关滚动轴承的径向游隙标准&#xff0c;请参见下表。 例如&#xff1a;…

matlab时域离散信号与系统,时域离散信号和系统的频域分析

信号与系统的分析方法有两种&#xff1a;时域分析方法和频域分析方法。在连续时间信号与系统中&#xff0c;信号一般用连续变量时间t的函数表示&#xff0c;系统用微分方程描述&#xff0c;其频域分析方法是拉普拉斯变换和傅立叶变换。在时域离散信号与系统中&#xff0c;信号用…

genymotion 此应用与您的手机不兼容

2019独角兽企业重金招聘Python工程师标准>>> 安装arm芯片的转换包&#xff0c;转换包的下载地址&#xff1a;http://pan.baidu.com/s/1dE2EqAH 只要把下载下来的压缩包拖动到模拟器中&#xff0c;点击确定后安装。 安装完成后&#xff0c;需要重启模拟器。 转载于:h…

安卓按钮设置背景颜色不管用_MIUI10新功能:时钟背景黑白自选、公交卡自定义时段唤起...

经历清明假与米粉节后&#xff0c;MIUI10恢复开挂模式&#xff0c;开发版每周给大家推送新功能。本期主要跟大家分享两个要点&#xff0c;其一是时钟背景颜色支持用户选择黑色或者白色&#xff0c;其二是NFC刷卡支持设置优先唤醒时间&#xff0c;降低手工切换操作。■时钟背景可…

数字电视 星座图 matlab,数字电视 MER 及星座图剖析

向天明中国电子测量与仪器学会委员随着数字电视的发展&#xff0c;人们越来越重视数字电视的质量问题&#xff0c;数字电视质量的好坏首先是数字电视信号的质量&#xff0c;因此数字电视信号的分析、测试非常重要&#xff0c;本文重点对数字电视信号的MER及星座图剖析。1、广义…

关于ASP.NET 中的主题

2019独角兽企业重金招聘Python工程师标准>>> 网站的外观是否美观将直接决定其受欢迎的程度&#xff0c;这就意味着网站在开发过程中设计和实现美观实用的用户界面是非常重要的。 在ASP.net 2.0之前主要是用样式表css来实现外观设计。但在ASP.Net 2.0之后&#xff0c…

傅里叶变换matlab案例,基于matlab的傅里叶变换

例子1作用&#xff1a;使用傅里叶变换找出隐藏在噪声中的信号的频率成分。(指定信号的参数&#xff0c;采样频率为1 kHz&#xff0c;信号持续时间为1秒。)Fs 1000; % 采样频率T 1/Fs; % 采样周期L 1000; % 信号长度t (0:L-1)*T; % 时间向量%%形成一个信号&#xff0c;包含振…