Openstack Swift中间件编写

关于openstack swift的资料可以看这里,这里还有这里。
准备环境
从零开始接触的同学可以先从swift的all in one部署开始学习,在本机搭建好swift环境就可以进行简单的测试了。由于swift是用Python语言写的,如果要开发swift的中间件的还需要在本地安装Pythone的IDE,我比较喜欢JETBRAIN(他们比较出名的是JAVA的IDE——IDEA)公司的IDE——Pycharm。准备环境如下:
- Ububutn 12.04 LTS 64bit
- Python2.7(虽然现在已经有Python3了,但swift是用2.x的Python写的,Python3不向后兼容Python2)
- Pycharm3
中间件介绍
swift通过提供基于HTTP协议的API给外界调用来完成对象存储的功能,我们从swift的各个部署说明里面可以看到,proxy server和storage node的配置文件里面都有一个[pipeline:main],这个是swift各个服务的请求链,由多个中间件组成的一个中间件集合。pipeline有点像J2EE里面filter,每个http请求需要经过各个服务的pipeline。
1 |
|
1 |
|
中间件编写
了解了swift的基本功能流程后,我们就可以来写自己的中间件了。
没有写过中间件的同学可以通过学习其他中间件开始,在swift的源码中配置了很多中间件,有一些功能非常简单。比如name_check中间件,这个中间件的作用是拿来分析请求的url,判断url中是否有特殊字符,长度是否超出规定长度等。这个中间件没有配置在swift的标准配置中,有需要的可以自行加上本机的swift环境做测试。
我们先来看一下name_check中间件的配置信息:
1 |
|
在上面的例子中,name_check中间件加在healthcheck这个中间件后面,filter:name_check下面的配置信息是name_check的一些配置参数。
- forbidden_chars: 指url中不能包含的特殊字符
- maximum_length: 指url的最大长度
我们再来看name_check的单元测试:
1 |
|
看源码先从单元测试看起,可以以最快的速度了解源代码的功能。在这个测试案例中,测试先mock了一个虚拟的app,这个app不会真实的调用swift,而是会将http response返回预设好的值。
再看其中的一个测试案例,这里给定了一个最大长度url,然后通过调用name_check中间件,期望请求可以正常通过。
最后我们再来看name_check中间件的源码几个方法:
* init: 中间件的初始化方法
* call: 中间件被调用时触发的方法
* filter_factory: 这个是类以外的方法,在swift服务启动时会创建中间件实例,并加入到pipeline中。
学习完这个简单的中间件后,相信大家都可以依葫芦画瓢开始写自己的中间件了。
修改配置文件
编写完中间件之后,还需要将中间件配置到swift中,这样才算真正完成中间件的创建。
首先先停止swift的服务
1 |
|
接着修改conf文件
假设你增加的中间件是proxy server的中间件,就修改proxy-server.conf,自行决定要放到pipeline中的哪个位置,具体要看你的中间件是执行什么功能。
1 |
|
要修改swift的根目录下的setup.cfg文件
1 |
|
执行命令重新安装swift
1 |
|
最后重启swift服务
1 |
|
Openstack Swift中间件编写的更多相关文章
- 理解 OpenStack Swift (3):监控和一些影响性能的因素 [Monitoring and Performance]
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- [转载] 对象存储(2):OpenStack Swift——概念、架构与规模部署
原文: http://www.testlab.com.cn/Index/article/id/1085.html#rd?sukey=fc78a68049a14bb228cb2742bdec2b9498 ...
- 【转载】OpenStack Swift学习笔记
免责声明: 本文转自网络文章,转载此文章仅为个人收藏,分享知识,如有侵权,请联系博主进行删除. 原文作者:崔炳华 原文地址:http://blog.csdn.net/i_ch ...
- 理解 OpenStack Swift (2):架构、原理及功能 [Architecture, Implementation and Features]
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- 理解 OpenStack Swift (1):OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置
本系列文章着重学习和研究OpenStack Swift,包括环境搭建.原理.架构.监控和性能等. (1)OpenStack + 三节点Swift 集群+ HAProxy + UCARP 安装和配置 ( ...
- OpenStack Swift集群与Keystone的整合使用说明
之前已经介绍了OpenStack Swift集群和Keystone的安装部署,最后来讲一讲Swift集群与Keystone的整合使用吧. 1. 简介 本文档描述了Keystone与Swift集群的整合 ...
- OpenStack Swift集群部署流程与简单使用
之前介绍了<OpenStack Swift All In One安装部署流程与简单使用>,那么接下来就说一说Swift集群部署吧. 1. 简介 本文档详细描述了使用两台PC部署一个小型Sw ...
- OpenStack swift安装
由于实验室项目需要云存储系统,因此在实验室服务器上搭建一个基于OpenStack swift的云存储系统. 最开始按照官方网站上介绍的方法,使用SAIO方式安装http://docs.openstac ...
- Openstack Swift 原理、架构与 API 介绍
OpenStack Swift 开源项目提供了弹性可伸缩.高可用的分布式对象存储服务,适合存储大规模非结构化数据.本文将深入介绍 Swift 的基本设计原理.对称式的系统架构和 RESTful API ...
随机推荐
- RAC 移动 OCR
1.查看是否有OCR备份 # ocrconfig -showbackup 如果没有就备份一份 # ocrconfig -export /oracle/bak/ocr/ocr_11291433_exp. ...
- python 打包与部署
环境:win10.eclipse-jee-mars.python2.7 打包在linux上进行安装测试 1.1 打包 项目目录结构如下: 打包对象:utils.reg 在P1项目的顶级目录,也就是ut ...
- 【bzoj1041】圆上的整点
题意 给定一个圆\(x^2+y^2=z^2\),求圆周上有多少个点的坐标是整数. \(r\leq 2*10^9\) 分析 这道题目关键要知道一些勾股数的性质,剩下的就很好处理了. 勾股数的性质 参考: ...
- JavaScript学习笔记(十二) 回调模式(Callback Pattern)
函数就是对象,所以他们可以作为一个参数传递给其它函数: 当你将introduceBugs()作为一个参数传递给writeCode(),然后在某个时间点,writeCode()有可能执行(调用)intr ...
- @font-face字体文件用法
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- robotframework笔记14
创建用户关键字 关键字表是用于创建新的更高层次的关键词 结合现有的关键词. 这些关键字被称为 用户 关键字 区分他们的最低水平 库关键字 实现在测试库. 的语法创建用户 关键词非常接近的语法创建测试用 ...
- Completely disable mousewheel on a WinForm
this.MouseWheel += new MouseEventHandler(Form_MouseWheel); private void Form_MouseWheel(object sende ...
- 《Java程序设计》学期总结
<Java程序设计> 学期总结 课程设计小组 -迦瓦栈队 团队博客 读书笔记汇总 第一周 第二周 第三周 第四周 第五周 第六周 第七周 第八周 第九周 第十周 实验报告汇总 实验一 实验 ...
- angular-ui-router状态不变刷新页面
需求: 当前在A页面状态,要求在点击A状态时,可以刷新A状态. 解决方法:在ui-sref状态切换的标签中添加属性 ui-sref-opts="{reload: true}" ...
- org.springframework.web.servlet.PageNotFound No mapping found for HTTP request with URI [/AssetRepair/assetRepairController/test.do] in DispatcherServlet with name 'assetrepair'
web.xml文件配置: xxx-servlet.xml 我们可以发现DispatcherServlet会处理"jsp"后缀的请求;而模型视图后缀也是jsp的 如果这样配置会报以下 ...