随笔分类 -  Swift

摘要:说起较大型系统的源码阅读,算上目前正在进行的Swift,也就只有两次经验(去年的上半年有阅读过学习过Openfire的源码)。虽说还是菜鸟级别啦,但两次也可以总结经验嘛:P,哈哈~我的这个经验呢,就是对于这种服务器端的源码,最好首先对系统的“启动过程”和请求到来时的“data flow”进行一遍跟踪阅读,了解程序的运作流程以及各个关键类、方法之间的关系,然后再从这条主线进行各个分叉流程的细致学习。这种方式一来目的性比较强,代码比较容易看得下去,二来不会有越看越茫然的感觉,总体上是逐渐清晰了解细节的过程。好啦,废话说完咯,进入正题。这两周开始了swift源码(swift 1.8.0)的学习,首先 阅读全文
posted @ 2013-06-05 21:47 YUKI小糖 阅读(2123) 评论(8) 推荐(0) 编辑
摘要:在Swift 1.8.0(Grizzly)的新特性中有这么一条:Added support for a region tier above zones,即swift可以允许开发者将zones组织成一个组进行管理了,这个组就是region。这两天在看Swift G版Ring部分的源码的时候,也发现device字典中增加了region属性,因此决定仔细的理解一下这个层次概念。首先推荐两篇文章,我对region的理解从这两篇文章中获益颇多:第一篇是Swift的重要贡献者、region特性的贡献者SwiftStack的文章:A Globally Distributed OpenStack Swift 阅读全文
posted @ 2013-05-20 16:09 YUKI小糖 阅读(1068) 评论(0) 推荐(0) 编辑
摘要:对siwft有些了解的人都知道,Ring是swift中非常核心的组件,它决定着数据如何在集群中分布。Swift根据设置的partition_power决定集群中的分区数量(2的partition_power次方),并根据一致性哈希算法将分区分配到不同的node上,并将数据分布到对应的分区上。因此,构建Ring就成为swift初始化必须经历的过程。简单说来:新的Ring创建的过程:ring-builder根据device weight计算出每个设备上应该被分配的分区的数量。(2的partition_power次方得到分区总数,再根据weight和设备数进行分配)ring-builder将每个分区 阅读全文
posted @ 2013-05-10 18:55 YUKI小糖 阅读(5502) 评论(10) 推荐(0) 编辑
摘要:在看Dev Guide的时候,有一些关于请求参数的约束内容,但分布的比较零散。今天早上整理了一下,并做了验证,现在PO出来。1)account、object、container的自定义元数据约束每次请求:自定义的X-Account/Object/Container-Meta-*的条目数量 <= 90 个;每次请求:自定义的X-Account/Object/Container-Meta-*的每个value,经过UTF-8的URL-Encoded之后的字节 <= 256(一个汉字算3个字节);每次请求:自定义的X-Account/Object/Container-Meta-*的所有&l 阅读全文
posted @ 2013-03-28 15:45 YUKI小糖 阅读(821) 评论(0) 推荐(0) 编辑
摘要:本文翻译整理自swift官方文档《OpenStack Object Storage Administration Manual》中的“Managing Large Objects (Greater than 5 GB)”一节,并实测,验证文档中的内容。点这里可以看到在线文档。默认情况中,Swfit上传的最大单个对象的大小为5GB。然而,对于下载对象的大小却是没有限制的,这种“下载无限制”的概念是通过将分段对象组织起来模拟实现的。大对象的每个分段被分别上传,然后再创建一个清单文件(manifest file)指明这个对象所包含的分段,下载时,清单所指示所有分段会被组织成一个单独的对象进行下载。这 阅读全文
posted @ 2013-03-21 19:58 YUKI小糖 阅读(3188) 评论(0) 推荐(0) 编辑
摘要:OK啦,这是最后一篇,其实从原官方文档的组织上,该小节是3.3——container之后,object之前,为了API整体思路的连贯性,我自己擅作主张放到了最后一部分。这章是我觉得swift中比较有趣的一章,可以直接将swift配置成静态站点,作为数据下载站,直接解决了静态站点数据备份的问题。于是,让我们愉快的继续吧 =D3.3. 创建静态站点(Create Static Website)你可以使用swift账户在互联网上创建一个静态站点。这种模式通常是匿名请求的,如果你希望在这种模式下使用认证请求,则需要在请求头中将 X-Web-Mode 设置为 TRUE。过滤器 staticweb 也应该 阅读全文
posted @ 2013-03-12 20:39 YUKI小糖 阅读(1037) 评论(7) 推荐(0) 编辑
摘要:3.4. 对象存储服务(Storage Object Services)一个对象(Object)是存储在系统中的一个文件数据和这个文件的元数据。通过ReST接口,我们可以使用HTTP的自定义headers来包含对象的元数据、HTTP的消息体(body)来包含数据实际的有效荷载。对象的大小不能超过5GB,且对象的名字在经过URL编码后不能超过1024个字节。然而,对于大于5GB的对象,我们可以将其分段,然后再将对象片段串联起来,这样就可以实现分段上传5GB以内的对象,并在下载时下载一个大于5GB的串联对象了。你可以直接使用HTTP请求来处理分段并管理好分段之间的组合关系。3.4.1. 获取对象在 阅读全文
posted @ 2013-03-08 20:29 YUKI小糖 阅读(1856) 评论(0) 推荐(0) 编辑
摘要:3.2. Container存储服务(Storage Container Services)本节阐述了container上可以执行的ReST操作。所有的操作都是有效的HTTP请求,并被组织成以下格式: 例3.16. Container存储的HTTP请求:基本结构METHOD /v1/<account>/<container> HTTP/1.13.2.1. 获取对象列表对一个container的名称执行GET操作将会获取存储在这个容器中的objects列表。此外,这里有一些可选的查询参数用于进一步细化查询结果。一个不包含任何查询参数的的请求将会返回存储在这个容器中的所有对 阅读全文
posted @ 2013-03-07 22:22 YUKI小糖 阅读(1304) 评论(7) 推荐(0) 编辑
摘要:在上一篇中,翻译介绍了Swift官方文档的第2部分API基本信息,本篇来完成最主要的存储服务的API操作部分。那么,现在就让我们开始吧=D3. 存储服务的API操作(API Operations for Storage Services)3.1. Account存储服务(Storage Account Services) 3.1.1. 获取容器列表(List Containers) 3.1.2. 获取账号元数据(Retrieve Account Metadata) 3.1.3. 创建/更新账号元数据(Create/Update Account Metadata) 3... 阅读全文
posted @ 2013-03-06 22:10 YUKI小糖 阅读(1272) 评论(0) 推荐(0) 编辑
摘要:关于开源代码的学习,主要就只接触过XMPP服务端实现Openfire和现在的Swift了。想想这段时间对swift学习的停滞感,越来越觉得“如果想要学习一个东西的原理,首先要会使用它”,这会在一定程度上增加对功能处理流程的理解,并在源码阅读时产生共鸣。对于swift API的学习,由于之前一直没有找到比较系统的资料,官方文档主页上也没有相关的链接,所以都是对照着swift-python-client的curl命令自己进行整理,这几天突然发现swift官方文档主页上增加了Swift’s API docs链接!内容非常的全,以前真没见到过哎,可能藏的太深,哈哈哈,PDF请点击这里下载。在文档的1. 阅读全文
posted @ 2013-03-05 17:46 YUKI小糖 阅读(2382) 评论(2) 推荐(0) 编辑
摘要:在学习新的东西时,常常会遇到一些问题,然后当时不得其解,想着记录下来,之后再深入理解,但总是会忘掉。所以,对!本文就是个坑!留着填!问题描述:使用swift API,在具有一定数量的object、container的账号下,执行如show account、list container操作,返回的结果中具有container的数量、container的名称,但是对于container的占用字节和object的数量都是0。但是师兄某次在上传了一个文件后,再执行以上操作就有正确的结果显示了。(也不是很确定是正确的结果,但是反正不是0了)猜测:count、calculate used bytes这种操 阅读全文
posted @ 2013-01-07 16:13 YUKI小糖 阅读(400) 评论(1) 推荐(0) 编辑