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预置的RuntimeBAE系统里面目前预置了几种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了
|