openstack storlet 文档(四):storlet引擎
2017-08-16 11:16
288 查看
Storlet Engine Overview
在高层视图中, the storlet engine由一下描述的组件组成。The storlet middleware
storlet middleware是一个Swift WSGI中间件,它拦截storlet调用请求(storlet invocation requests),并将输入数据和计算输出路由到执行storlet的Docker容器中。这个中间件需要在代理服务器和对象服务器的piplines中。该storlet中间件是允许扩展引擎以支持Docker以外的沙盒技术的方式编写的。 这表现在“storlet gateway”API中,该API定义了从沙盒运行storlet所需的功能。 而且,部分storlet中间件配置是“storlet gateway”实现的类的加载。(原文: Moreover, part of the storlet middleware configuration is what “storlet gateway” implementation class to load.) 目前,我们有一个单一的API实现,我们称之为“storlet docker gateway”。
Swift accounts
storlet引擎与Swift中的account紧密结合,方式如下:为了在驻留在某个Swift帐户中的数据对象上调用storlet,该帐户必须启用storlet。也就是说,它必须在帐户设置中将特定的用户定义的元数据标志为true。
每个Swift帐户必须具有引擎所需的某些容器。一个这样的容器是“storlet”容器,在其中storlet被上传。上传到这个container中的storlets可以调用这个账户中的任意数据对象,给定调用用户对“storlet”容器具有读取权限。
每个帐户都有一个独立的Docker映像(和容器),storlets在其中执行。在属于某个帐户的数据对象上执行的所有的storlet将在同一个Docker容器中执行。 这有助于为不同的Swift帐户提供不同的images。Docker映像名称必须是其所属的帐户ID。
the docker image
如上所述,每个帐户都有一个Docker映像,可以用于storlet。在高层次,这个images包含:一个Java运行时环境。 当您运行用Java编写的storlet时,这是必需的
一个守护工厂(A daemon factory)。是一个Python进程,它作为Docker容器启动的一部分。该进程根据在storlet_middleware的上下文中运行的“storlet docker gateway”的请求产生“per storlet守护程序”。
一个storlet守护进程。 storlet守护进程是一个通用的守护进程,加载某个storlet并等待调用请求。 不同的storlets,例如 一个filter storlet和一个compresssion storlet会被加载到不同的守护进程中。当第一次需要执行某个storlet时会调用守护程序。目前,我们有两种类型的守护进程,一种用于加载和运行Java编写的storlet的Java守护进程,以及一个用于加载和运行Python编写的storlet的Python守护程序。
The storlet common jar。这是用于开发Javax编写的storlet的jar。除其他事项之外,它还定义了storlet必须实现的invoke API。
the storlet bus
the storlet bus是Swift端的storlet中间件和Docker容器中的工厂守护程序以及storlet守护程序之间的通信通道。对于每个Docker容器(或Swift帐户),都有与该容器的storlet工厂的通信通道。对于容器中的每个storlet守护程序,都有一个通信通道,在其上侦听调用。这些通道基于unix域套接字。(PS: 不懂??)the storlet engine components illustration
Flow
为了把所有的东西结合起来,我们展示一个端到端的场景。writing and deploying a storlet
流程开始于编写一个storlet,然后部署它。编写和部署一个storlet的过程将在写入和部署storlet指南中进行介绍。Invoking a storlet
storlet可以在对象下载、上传或复制操作(分别为GET,PUT和COPY)时调用。对于流程描述,我们假设我们希望在对象下载时调用该storlet。这涉及使用额外header“X-Run-Storlet”进行Swift GET请求,该头部指定了要调用的storlet,例如:”X-Run-Storlet:compress-1.0.jar”handling the request at the proxy server
看到“X-Run-Storlet”头,代理服务器的storlet_middleware拦截请求,并在用户指定的storlet上执行HEAD。该HEAD操作包括:执行execution权限:访问storlet容器意味着允许用户调用storlet。如果HEAD失败,则引擎返回HTTP未授权。
获取storlet元数据。此元数据稍后用于验证正在执行的实际代码是最新更新的代码。
一旦HEAD成功,那么storlet中间件将storlet元数据添加到请求中,并让请求继续流过代理管道。管道结束,请求被路由到一个对象服务器,该对象服务器保存了GET uri中指定的对象的副本。
handling the request at the object server
看到“X-Run-Storlet”头,对象服务器上的storlert_middleware拦截请求并执行以下两个阶段流:phase one
第一阶段确保Docker容器内运行的本地storlet守护程序是在适当帐户中。在这个阶段,中间件执行以下操作:检查出现在请求uri中的帐户是否有运行的Docker容器。如果没有,中间件试图产生它。
检查要执行的所需的storlet是否有一个本地更新的副本。 如果没有本地副本或副本不是最新的,则中间件启动内部GET请求,以从“storlet”容器中提取它。(PS:???本地更新的副本?从storlet容器中获取??)
如果本地副本已更新,则中间件将检查容器中是否存在该storlet的运行守护程序。这是通过在名为“factory pipe”的命名管道上查询storlet守护程序来完成的。
如果没有运行守护程序,中间件要求工厂为其生成一个。一旦产生了守护进程,在指定的命名管道上开始监听调用。
phase two
在第二阶段,中间件实际在request上调用了这个storlet。一旦运行守护进程就会执行一下中间件过程:中间件允许request继续流过对象服务器的管道,直到它得到响应。响应带有一个描述符标识哪个对象数据可以被访问。
中间件使用名为管道的storlet守护进程来实现对storlet的实际调用。实际的invocation是通过沿着管道传递一个包含对象数据的描述符,以及一个描述符用于storlet写入其输出,另一个描述符用于存储日志。(ps:通过管道传递3个描述符,输入对象、输出、日志)
一旦storlet开始将结果写入输出描述符,storlet_middleware将返回一个携带storlet输出描述符的响应,以使输出可以流回代理和用户。
Note: 注意上述是一个简化,突出显示了由storlet引擎完成的主要工作。
Note: 有些情况下,代理服务器上执行了这些代码。 一个这样的情况是PUT请求。 在代理上执行一个storlet涉及到上述几个精确的步骤.
相关文章推荐
- openstack storlet文档(三):storlet术语和角色
- openstack storlet 文档(九):python storlet编写和部署指南
- OpenStack Object Storage Developer Guide/Swift官方API文档 -- 翻译 (二)
- OpenStack Object Storage Developer Guide/Swift官方API文档 -- 翻译 (三)
- openstack H版安装参考文档
- OpenStack keystone节点搭建(官方2018年4月份文档)
- 一步一步跟着官方文档安装部署Openstack(icehouse)附官方文档(一)
- 技术文档网址收藏(应该是针对Openstack的学习)
- fuel自动安装openstack文档
- OpenStack Object Storage Developer Guide/Swift官方API文档 -- 翻译 (四)
- Openstack 快速入门(官方文档直译)
- 构建标准OpenStack API接口文档
- openstack ice版文档horizon整理(页面resize)
- OpenStack-Grizzly OpenvSwitch-GRE-MultiNode安装文档
- Linux(CentOS、Ububtu)一键安装Openstack及其它参考文档汇总
- openstack storlet 文档(七):storlet编写和部署向导
- 一步一步跟着官方文档安装部署Openstack(icehouse)二
- openstack-mitaka安装文档-块存储服务
- openstack--newton安装过程(官方文档)controller
- openstack juno 完全按照官方文档安装