分享

百度 BAE3: 自定义运行环境

xng2012 发表于 2014-4-14 00:31:40 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 2 11960
1.什么是Runtime?
2. 如何自定义 Runtime?
3.BAE系统里面目前预置了几种WEB Runtime,其架构方式都是什么?


1. 什么是Runtime
  • Runtime是一组进程,提供一个完整的服务,通常用来提供一个WEB服务,但是也可以提供别的服务;
  • 例如 lighttpd + php-fpm ,就构成了一个 PHP WEB runtime
  • nginx + rails ,构成了一个 ruby runtime
  • nodejs 可以单独成为一个 runtime
  • 这一组进程,必须被BAE框架统一管理。它们要不一起启动,要不一起停止; 并且需要在某个进程出现故障后,能够被自动重启;
  • 在BAE系统里面,通过 supervisord 来管理这一组进程。
2. BAE预置的Runtime
BAE系统里面目前预置了几种WEB Runtime,其架构方式如下:
  • PHP-Web:         lighttpd + php-fpm
  • Java-tomcat:     lighttpd + tomcat
  • Java-jetty:         lighttpd + jetty
  • Python-Web:     lighttpd + fcgid
  • Node.js:              lighttpd + nodejs
对于一部分具有hacker能力的高级开发者来说,我们预置的Runtime未必满足需求;例如,他需要对ruby、golang等语言的支持,需要采用 nginx 或 apache 作为web server,等等;为此,我们把自定义Runtime的能力放开给这部分高级开发者。


3. 如何自定义 Runtime3.1 首先来了解一下BAE的虚拟机环境
  • 虚拟机采用的 ubuntu 12.04 64位 server版,其中已安装了大量的运行期间所需要的软件包
  • Runtime里面的所有进程,都是以 bae 账号运行的;其权限是有限的。 之所以不能以root账号运行,主要是root账号权限太大,有安全风险。
  • 用户代码是部署到 /home/bae/app/ 目录下的 Runtime
  • 如果想对外提供 WEB 服务,需要监听固定端口 8080
  • Runtime的启动、停止、重启,是由BAE系统来控制的; 用户只能通过管理界面上的“重启”按钮触发重启操作;其它操作都没有权限
  • 每次更新代码后,都会先停止Runtime,然后同步代码,最后启动Runtime
3.2 我们把三个部分的能力交给用户来控制, 这包括:
  • 自定义运行环境的部署方式: 通过在代码中提供一个build_runtime.sh 脚本来实现。每次代码发布过程中,会判断这个脚本是否更新,如果更新了,则执行此脚本。因此,如何定义Runtime,完全由此脚本来控制。 如果没有此脚本,则不会执行。我们不检查该脚本是否执行成功。
  • 自定义运行环境的执行方式: 通过在代码目录中提供一个 supervisord.conf 配置文件来实现。把这一组进程如何启动的信息配置好; 自己 google 下 supervisord 的配置文件语法。这个文件放在你的app根目录下。启动Runtime 的时候,supervisord 到应用目录下找 supervisord.conf, 然后根据它来决定如何启动 runtime;我们不检查启动是否成功。
  • 自定义系统软件包: 这通过在app.conf 中新增的 system_packages 关键字来实现。,通过此关键字,可以指定通过 apt-get 安装的软件包。我们不检查软件包是否安装成功。
3.3 注意事项:
  • build_runtime.sh 是以 bae 账号执行的,因此能干的事情是受限的。执行该脚本时候的路径是 /home/bae
  • 原来的 app.conf 里面的 handlers 规则,只适用于 lighttpd, 因此在自定义Runtime情况下,不适用了; 你必须自己来考虑如何解决规则转发等问题
  • 超时限制: 每次执行 build_runtime.sh + 通过sytem_packages 安装软件包的时间,不能超过 15分钟,否则就超时失败了
  • 不建议在 build_runtime.sh 里面做太多事情; 特别是 gcc, make 只能的事情,最好别在这个阶段做; 因为系统里面很可能缺少你需要的库、工具
  • 建议把内存调整到 512M, 否则 build_runtime.sh 阶段可能会出现内存不够用的情况
  • 不建议通过 sytem_packages 安装太多包; 因为可能会超时
4. 示例5. 开通方式
  • 目前自定义Runtime 仅对部分受邀请的开发者开放;当前的方案只是一个初步版本,需要通过大家的使用反馈来进一步完善。
  • 如果你对自定义Runtime有兴趣,欢迎通过HI群或者 cloudqa.duapp.com 来发起申请,我们会为你开通权限。
  • 申请成功后,在创建部署的时候,就可以选择 ‘custom’ 类型了; 创建成功后,将示例代码拷贝到你的应用目录下, 重新发布一次,就可以体验效果了
  • 然后你就可以参考这些例子,来动手打造符合自己要求的Runtime了

欢迎加入about云群371358502、39327136,云计算爱好者群,亦可关注about云腾讯认证空间||关注本站微信

已有(2)人评论

跳转到指定楼层
x5136160 发表于 2014-7-12 18:38:07
看看,学习学习
回复

使用道具 举报

ashleyliberty 发表于 2016-4-18 09:38:38

看看,学习学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条