容器
应用容器(App Container)是AWS PaaS的内核,在AWS PaaS中一切皆应用。应用容器是AWS PaaS最值得称赞的内核原创设计之一,完成于2013年8月。
AWS PaaS利用容器来运行AWS应用。每个应用的资源被容器独立的管理和调度,这些资源被应用Id(AppId)命名和隔离。
本地应用仓库
每个AWS PaaS实例的容器有特定的工作边界(应用仓库)。容器会根据应用所处的不同周期阶段,在特定的应用仓库间切换。
- apps/upload 处于待安装/升级的应用介质文件
- apps/install 安装的应用资源
- apps/uninstall 被卸载的应用资源,处于该仓库的应用可以被还原或彻底删除
- apps/dist 存放打包成可分发的介质文件(.app后缀)
- apps/history 所有操作的历史资源文件
AWS PaaS应用容器采用业内广泛采纳的机制(如文件签名)和特殊机制来确保应用被完整的传输到容器,被成功的安装。如果中途发生意外(如文件损坏、安装或升级失败、中途物理宕机等),对应用仓库的所有操作被自动回滚到之前状态。
应用周期管理
应用周期主要包括:
- 安装/升级
- 卸载/还原
- 彻底卸载
通过控制台管理
AWS PaaS管理员可以访问实例console(控制台->应用管理)完成这些操作。
可以通过终端输出信息监控应用在容器的处理过程。如下图,用户试图在PaaS中安装同事圈的安卓应用,由于依赖的父应用同事圈尚未安装,给出错误提示
通过命令行管理
对于有本地AWS PaaS环境的开发者,也可以在AWS命令行控制台中通过如下命令完成同等操作:
应用状态控制
应用状态受容器控制,状态间切换是动态的。每个应用在瞬间只存在一种状态,下面列出的八种状态有三种是中间状态(后缀ING)
- READY(就绪)
- STARTING(启动中)
- ACTIVE(启动成功)
- STOPPING(暂停中)
- STOPPED(已暂停)
- FAILED(已出错)
- UNINSTALLING(卸载中)
- UNINSTALLED(已卸载)
通过控制台控制AWS PaaS管理员可以访问实例console(控制台->应用管理)完成这些操作。
通过命令行控制
对于有本地PaaS环境的开发者,也可以在AWS命令行控制台中通过如下命令完成同等操作:
应用间互操作
应用容器基于JVM,为每个应用平行分配一个相互隔离的classloader,避免了不同开发商应用间资源冲突问题。那么,应用间的互操作该如何处理?
AWS PaaS为开发者提供了独有的ASLP 应用互操作接口协议(Application Service Locator Protocol),这是个伟大的发明。开发者可以像访问一个互联网url地址那样,访问PaaS中其他应用的接口,看起来就这么简单:
- 在AWS PaaS中每个aslp服务都拥有一个唯一的访问地址,便于ISV开发者学习和理解
- 避开ClassLoader互依赖风险和加载风险,也通过简单协议串让开发者避开ClassLoader概念
- 协议与应用具体位置和实现无关,任何授权的PaaS内部应用或外部系统(设备)都可以调用
- 支持同步调用和异步调用
- 高性能,普通计算资源配置下也可超过1万/TPS(每秒吞吐量)
容器启动
AWS PaaS服务的启动过程,主要是容器完成各个应用资源绑定的过程,当容器操作未就绪或即将关闭时,为调用者返回的错误码如下:
- 760 服务正在启动(Instance Starting) 当服务器正在启动尚未就绪时,会返回该错误信息。遇到这种错误,请稍后执行
- 761 服务正在关闭(Instance Stoping) 当服务器正在关闭时,会返回该错误信息。遇到这种错误,请不要再重复请求,服务器将被关闭
- 762 服务脱机(Instance Offline) 当服务器处于运行中,由运维人员暂停客户端响应时,会返回该错误信息。遇到这种错误,请联系系统管理员
容器日志与监控
- 在控制台的应用管理(AMC),提供各应用运行状态和日志
- AWS SLA服务为容器提供的监控和告警