3.3 BAE环境搭建
Baidu App Engine(BAE)是百度公司(baidu.com)推出的云应用引擎,支持的语言环境包括PHP、Java、Python、Node.js、static等。
说到BAE,不得不说一下2.0到3.0的“巨变”。
开发者在使用BAE 2.0的过程中会发现很多功能受到限制,最大的障碍在于禁止本地写操作。有一些著名的CMS或博客系统在安装过程中通常要求配置文件是可写的,但BAE2.0禁止本地写操作,导致安装不了。另外,有些系统有cache缓存目录,要求该目录可读写,但在BAE 2.0上实现不了。本地开发环境和云端环境不一致,开发者不得不针对BAE做相应的修改,于是就出现了WordPress for BAE这样类似的移植版本。
这个问题的主要原因在于传统PaaS(如BAE 2.0等)采用“沙盒技术”实现应用之间的资源隔离,“沙盒技术”需要对运行环境和编程语言进行功能限制,如禁止创建进程和线程、禁止某些系统调用、禁止对某些文件系统路径的读写、禁止加载C语言模块、禁止某些网络功能等,这就大大增加了开发者的学习成本,也使得应用的开发和迁移难度变大。
为了解决这个困扰广大开发者的问题,百度推出了BAE 3.0。BAE 3.0在底层采用“轻量虚拟机技术”完美解决了资源隔离问题,而在运行环境和编程语言层面不做任何限制,应用在云端的运行环境与开发者本地的开发环境保持一致,从而使学习成本、开发和迁移成本降到最低,开发者的生产力得到最大限度的解放。
这里介绍BAE的几个基本概念:
- 执行环境 云环境中应用程序执行的环境。执行环境由执行组组成,每个执行组包含执行单元。执行环境分为公共集群和私有集群。
- 执行单元 执行单元是云环境里运行用户代码的最小服务实例。
- 执行组 若干执行单元组成的集合。同一个执行组内的不同执行单元的环境是同构的。执行组内的执行单元个数会根据实际负载自动调整,但会受到系统阈值的限制或用户配额的限制。
- 公共集群 指属于云环境系统的执行组的集合。云环境会保证公共集群里不同用户、不同应用之间代码和数据的安全隔离。公有集群对用户来说是完全透明的。
- 私有集群 完全属于用户自己的执行组的集合。用户可以选择应用的代码部署到自己拥有的任意执行组内。私有执行组内的执行单元不会和其他用户共享。
3.3.1 创建工程
BAE采用百度通行证登录,如果还没有通行证,请到百度网站注册。下面介绍创建一个工程的步骤。
步骤01 进入百度开放云平台(http://developer.baidu.com/),单击页面右上角的“登录”,在弹出的浮层中登录,如图3-34所示。
步骤02 在顶部导航处单击“开发者服务管理”,选择弹出菜单中的“开发者服务管理”,进入已创建的工程列表,如图3-35所示。
图3-34
图3-35
或者直接输入开发者服务管理的网址:http://developer.baidu.com/console#app/project。
步骤03 单击“创建工程”按钮,勾选“解决方案”中的“使用BAE”复选框,会出现完整的选项。注意,如果需要PHP环境,“类型”应该选择php-web。域名一经创建,不能更改,请慎重填写。确认信息填写完整后,单击“创建”按钮完成工程创建,如图3-36所示。
图3-36
步骤04 在开发者服务管理页面单击刚才创建的“微信开发”工程,进入该工程的详细信息页。左边栏是可用的服务,单击项目可进入相应的设置页,如图3-37所示。
图3-37
步骤05 单击左边栏的“应用引擎”可以看到已创建的执行单元。单击“SVN/GIT地址”栏下的“点击复制”可以得到仓库地址。仓库的登录账号为BAE账号,如图3-38所示。
图3-38
BAE环境已经创建好了,可以进行开发了。
3.3.2 BAE常用服务
BAE的常用服务包括Cache(缓存)、Image(图片处理)、MySQL(数据库)、Redis(数据库)、MongoDB(数据库)、Cron(定时任务)、FetchURL(网页抓取)、TaskQueue(任务队列)等。
- Cache(缓存):是一个内存对象缓存服务,使用接口和Memcache相似。将短期内需要集中访问的数据放在内存中,从内存中读取,从而减少数据库访问次数,提高读取速度。
- Image(图片处理):BAE提供的Image服务功能很强大,除了基本的图片处理(图片裁剪、缩放、旋转、合成)外,还提供了二维码、文字水印、验证码等功能。只需很少的代码就能实现基本的图片处理。
- 关系型数据库RDS:关系型数据库(Relational Database Service,RDS)提供在线数据库服务,支持MySQL等数据库。MySQL是世界上最受欢迎的开源数据库,广泛应用于各类应用。
- Redis(数据库):key-value型NoSQL数据库服务。服务器端采用Redis(http://redis.io/)。
- MongoDB(数据库):是一个分布式NoSQL数据库服务。服务器端采用著名的文档型数据库Mongodb(http://www.mongodb.org),使用方式和标准MongoDB完全一致,并且支持各语言原生的SDK访问数据库。
Cron(定时任务)、FetchURL(网页抓取)、TaskQueue(任务队列)分别提供定时任务、网页抓取、任务队列服务,此处不再赘述。