RAID技术介绍与小结

简介

前言:最近档面临接触到内购,本文主要介绍如何开发使内购(In App
Purchase),有部分凡是冲实际需求做的考虑,有两样的见地欢迎留言指教~本文demo:https://github.com/maligh/MLIAPManager
运行时不要遗忘更改Bundleid
跟productId。如果对而发出帮扶要不要吝惜你的star~

RAID是一个我们经常能够来看的名词。但可为老少会当实际上条件被感受,所以非常不便对该原理
能有好理解的认识和操纵。本文将对准RAID技术拓展介绍和小结,以期能尽量阐明其定义。

前期需准备:* 1.于苹果后台添加商品,记下而的商品id.
*2.在苹果后台创建好沙盒测试账号.这片步就是不介绍了,可以简书搜一下,bing一下,soso一下,google一下。(我要断意识中百度一下这种说法,)

RAID全称为单独磁盘冗余阵列(Redundant Array of Independent
Disks),基本思想就是管多独相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能上甚至超越一个价格昂贵、
容量巨大的硬盘。RAID通常给用在服务器电脑上,使用完全相同的硬盘组成一个逻辑扇区,因此操作系统只见面把它看成一个硬盘。
RAID分为差之路,各个不同的品都于数据可靠性以及读写性能及做了不同的权衡。
在实际应用中,可以依据自己的实际要求选择不同之RAID方案。


标准RAID

 

图一.png

RAID 0

RAID0称为条带化(Striping)存储,将数据分段存储于
各个磁盘中,读写均可以并行处理。因此其读写速率为单个磁盘的N倍(N为组成RAID0的磁盘个数),但是可没有数
据冗余,单个磁盘的磨损会促成数据的不可修复。图片 1大多数striping的贯彻允许管理者通过调节两个举足轻重之参数来定义数据分段和写副磁盘的
方式,这点儿只参数对RAID0的性质有那个重要的影响。

合内购流程如下:

STRIPE WIDTH

stripe width是负可被并行写副的 stripe
的个数,即当磁盘阵列中磁盘的个数。

  1. 使发送请求到服务器,获取有的可用Products Id聚拢,(当然你吧足以管Products Id硬编码到程序中,这样见面导致不克动态配置商品).
  2. 据悉服务器返回的Products Id
    以及消息设置购买界面UI.(这里跟图一微不同)
  3. 用户点击市商品.
  4. 客户端根据对应的Product Id向App
    Store请求产品信息,并发起购买payment.(使用StoreKit)
  5. App Store处理该payment,并赶回就的transaction
  6. 客户端起transaction中获取receipt凭证数据,并将其发送给服务器,等待返回.
  7. 服务器验证receipt凭证数据是不是动过,保存然后关App
    Store验证是否合法
  8. 服务器得到App Store验证结果,返回给客户端相应购买成功还是黄信息
  9. 客户端提示用户买结果及处理相应UI.

STRIPE SIZE

也可称之为block size(chunk sizestripe lengthgranularity),指写副每个磁
盘的数码块大小。以块分段的RAID通常只是容选择的块大小从 2KB 到
512KB不等于,也有重复
高之,但一定要是是2底指数倍。以字节分段的(比如RAID3)一般的stripe size呢1字节或
512字节,并且用户不能够调动。 stripe size对性能的震慑是颇不便简单估量的,最好当骨子里应用中依自己需求多多调整并
观察该震慑。通常来说,减少stripe size,文件会吃分成更小的丘,传输数据会另行快,但
是倒用再多的磁盘来保存,增加positioning performance,反的则相反。应该说,没有
一个辩护及之尽精美的价。很多辰光,也使考虑磁盘控制器的策略,比如一些磁盘控制器会等于
等到得数据量才起往磁盘写入。


RAID 1

镜像存储(mirroring),没有数量校验。数据让同样地描绘副鲜独或多独磁盘中,可想而知,写副速度会比
慢,但读取速度会比较快。读取速度可接近所有磁盘吞吐量的总数,写副速度受限于极端慢
的磁盘。
RAID1也是磁盘利用率最低的一个。如果因此有限独不等尺寸的磁盘建立RAID1,可以就此空间比较小
的那么一个,较充分的磁盘多出来的片好发外所以,不见面浪费。图片 2

以上流程需注意:

RAID 2

RAID0之改良版,加入了汉明码(Hanmming Code)错误校验。图片 3

汉明码能够检测最多片单以发出的比特错误,并且能又凑巧单一比仅仅的缪。汉明码的各项
数与数量的位数有一个不等式关系,即:

 

 

1
2^P ≥ P + D +1

P代表汉明码的个数,D代表数据位的个数,比如4位数据要3位汉明码,7号数据要4号汉
明码,64各类数据经常便需要7各项汉明码。RAID2凡本1bit来分数据写入的,而P:D就表示了数量
盘与校验盘的个数。所以要是数额位富有更怪,用于校验的旋的比重虽愈聊。由于汉明码能够
纠正单纯比仅仅的谬误,所以当单个磁盘损坏时,汉明码便会改正数据。

RAID 2
以每次读写都需全组磁盘联动,所以为了最大化其性,最好保证各块磁盘主
轴同步,使同一时刻每块磁盘磁头所处的扇区逻辑编号都无异,并存并取,达到最佳性能。
如果不克一起,则会产生等待,影响进度。

及RAID0相比,RAID2的传输率更好。因为RAID0一般stripe size对立于RAID2的1bit以来
实在无比非常,并无能够保证每次都是大抵磁盘并行。而RAID2每次IO都能够担保是基本上磁盘并行,为了
发挥这个优势,磁盘的寻道时间一定要是缩减(寻道时间较数据传时间如稀几乎独数据级),所
以RAID2适合吃连IO,大块IO(比如观频流服务)的情况。

  • 6~7步之时光,请求或发送失败。客户端需考虑将receipt凭证数据地方持久化,并在请求失败重发机制;除了重发,请求也恐怕遭受阻拦篡改,合理之加密方法可以长伪造破解的难度。
  • 6~7步也可改变成为客户端本地验证,不过未引进除非是局部单机应用。
  • 服务器验证的上注意:测试时当下地点:https://sandbox.iTunes.Apple.com/verifyReceipt
    ,生产条件地址:https://buy.itunes.apple.com/verifyReceipt
    . 这里要注意APP提交对的时节测试人员使用的貌似是沙盒环境

RAID 3

看似于RAID2,数据条带化(stripe)存储于不同之硬盘,数据为字节为单位,只是RAID3用单块磁盘存储简单的
奇偶校验信息,所以最后磁盘数量为 N+1
。当这N+1个硬盘中之里一个硬盘出现故障时,
从任何N个硬盘中之多少为足以回复原数据,当更换一个初硬盘后,系统可再回升完整
的校验容错信息。

图片 4

由当一个硬盘阵列中,多于一个硬盘同时出现故障率的几带队十分有些,所以一般景象下,使用
RAID3,安全性是足以拿走保障的。RAID
3会拿多少的写入操作分散到大半只磁盘上拓展,不管是朝着哪一个数据盘写副数据,
都需要而还写校验盘中的有关消息。因此,对于那些常得实施大气写入操作的行使来
说,校验盘的载荷将会晤非常特别,无法满足程序的运转速度,从而导致整个RAID系统性能的下滑。
鉴于这种由,RAID
3更加切合下为那些写入操作比较少,读取操作比较多的应用环境,例如
数据库和WEB服务器等。


RAID 4

同RAID3类似,但RAID4是按块(扇区)存取。无须像RAID3那么,哪怕每一样浅小I/O操作为如涉
及全组,只待涉及组中简单块硬盘(一片数据盘,一片校验盘)即可,从而加强了少量数据
I/O速度。

图片 5

客户端内请代码就未列支了,请看demo:https://github.com/maligh/MLIAPManager
,注释写的不可开交详细的,有还好见解之请留言,觉得出帮助要star~~😄
下我贴一下大约服务端代码:
demo文件中iap.py:

RAID 5

奇偶校验(XOR),数据以块分段条带化存储。校验信息交叉地囤积在富有的数据盘上。

图片 6

RAID5管数量及互对应之奇偶校验信息存储到组成RAID5的逐一磁盘上,并且奇偶校验信息与
相对应之多少分别存储于不同的磁盘上,其中擅自N-1块磁盘上且存储完整的数量,也尽管是
说有一定给同一块磁盘容量的半空中用于存储奇偶校验信息。因此当RAID5的一个磁盘发生损坏
后,不见面影响数的完整性,从而确保了数据安全。当损坏的磁盘被轮换后,RAID还会见活动
利用剩余奇偶校验信息去重建此磁盘上的数量,来维持RAID5的高可靠性。

RAID 5可以解呢是RAID 0和RAID 1的折衷方案。RAID
5可以呢系统提供数据安全保持,但
保障程度而于镜像没有而磁盘空间利用率要比较镜像高。RAID 5有跟RAID
0相仿佛的数目读取
速度,只是为多矣一个奇偶校验信息,写副数据的快相对独立写副一块硬盘的快慢有点慢。

import httplib
import  json
receipt = raw_input("Enter Your transactionReceiptString:")
jsonStr = json.dumps({"receipt-data": receipt})
#connect = httplib.HTTPSConnection("buy.itunes.apple.com")
# sandbox
connect = httplib.HTTPSConnection("sandbox.itunes.apple.com")
headers = {"Content-type": "application/json"}
connect.request("POST", "/verifyReceipt", jsonStr)
result = connect.getresponse()
data = result.read()
connect.close()
decodedJson = json.loads(data)
print decodedJson#测试查看
# status = decodedJson[u'status']
# if status == 0:
    # 验证成功逻辑
# elif status == 21007:
    # 重新给沙盒环境发送一遍
# else:
    # 验证失败逻辑

RAID 6

看似RAID5,但是多了亚独独立的奇偶校验信息块,两个单身的奇偶系统利用不同的算法,
数据的可靠性很大,即使简单片磁盘同时失效也无见面潜移默化多少的运用。但RAID
6需要分配受 奇偶校验信息再特别的磁盘空间,相对于RAID
5有再充分之“写损失”,因此“写性能”非常例外。

图片 7

由于图所知道,每个硬盘上除都来同级数据XOR校验区外,还有一个针对每个数据
块的XOR校验区。当然,当前盘数据块的校验数据不容许有即盘而是交错存储的。从数
学角度来说,RAID 5使用一个方程式解出一个茫然变量,而RAID
6则能够经过简单独独立的线性 方程构成方程组,从而恢复两个不为人知数据。

随同着硬盘容量的增进,RAID6已经更换得越来越重要。TB级别之硬盘上更易造成数丢失,
数据重建过程(比如RAID5,只同意同一块硬盘损坏)也越发丰富,甚至到数完美,这是截然不可接受之。而RAID6允许两
片硬盘同时产生故障,所以慢慢遇人们的推崇。

伴随CD,DVD和蓝光光盘的出版,存储介质出现了摩除码技术,即使媒介表面出现划痕,仍然可以播放,大多数广泛的吹拂除码算法都演化为直达世纪60年代麻省理工学院林肯实验室开
发的Reed-Solomon码。实际情形遇,多数RAID6贯彻还利用了业内的RAID5使得校验比特和Reed-Solomon
。而纯擦除码算法的使让RAID
6阵列好失效两块以上的硬盘,保护力度还胜似,有些实现方式供了多种级别的保护,甚至同意用户(或存储管理员)指定保护级别。

利用方法:
替换iap.py 中的receipt值
接下来进入命令行中执行 /usr/bin/python2.7 iap.py
然后你见面博得近似:

混合RAID

receipt.png

RAID 01

顾名思义,是RAID0和RAID1的成。先做条带(0),再举行镜像(1)。

图片 8


RAID 10

与齐,但是先做镜像(1),再举行条带(0)

图片 9

RAID01和RAID10不胜相像,二者在读写性能上未曾啊差别。但是于安全性上RAID10万一好于
RAID01。如图被所著,假设DISK0损坏,在RAID10备受,在剩下的3片盘中,只有当DISK1故障,
整个RAID才见面失效。但以RAID01中,DISK0损坏后,左边的条带将无法读取,在剩余的3急忙盘
中,只要DISK2或DISK3个别独盘中任何一个毁,都见面促成RAID失效。

RAID10及RAID5也是时用来比的星星种植方案,二者都于生产实践中获得了大规模的用。
RAID10安全性更强,但是空间利用率低。至于读写性能,与cache有不行可怜关系,最好因实
际情况测试于挑选。

结尾:吓啊,不啰嗦了,快点儿点了,有未知道要不同视角之请留言,互相交流互相学习欢迎star,最后感谢你的时间

非标准RAID

DRFS

DRFS,即DistributedRaidFileSystem,是一律种植尝试以RAID与Hadoop的DFS结合起来的技巧。
通常的HDFS在实践中需要将replication factor若是为3为保证数据完整性,而如利用
RAID的stripepartity(奇偶校验)技术,将数据分为多独片,并且存储各个块的校验信
息(XOR或错除码)。有了这些主意,块的合乎本数就可降低以保证同一的数据可靠性,就可知节省相当一管辖
分的储存空间。

DRFS包含以下几独零件:

  • DRFS client:
    提供应用程序访问DRFS的接口,在发现读取到之文书来破坏时修复,整个操作对应用程序透明
  • RaidNode: 创建,维护检查文件的daemon
  • BlockFixer: 周期性地检查文件,重新计算校验和,修复文件.
  • RaidShell: 类似于hadoop shell.
  • ErasureCode:
    即DRFS所动的生成校验码的算法,可也XOR或者Reed-Solomon算法。
    XOR仅能够创一个校验字节,而Reed-Solomon尽管如此足以创造无数员(位数越多,能东山再起的累
    据也更为多),如果用Reed-Solomonreplication竟足以退为1,缺点是降低了多少读
    写的并行程度(只能从单机读写)。

实现

软件实现

今天特别都操作系统还提供了RAID的软件实现,主要是因为以下几单方面:

  • 由于软件以差不多独设备上创立RAID,比如linux上之mdadm工具.具体采用方式可查参考链接中
    的事例。
  • LVM或者Veritas,虚拟卷管理工具.
  • 文件系统实现
    :btrfsZFSGPFS.这些文件还可以直接管理几近只装备及之多少,实
    现了接近各级RAID的机能。
  • 在已经发生文件系统之上提供数据校验功能的RAID系统(RAID-F)

固件/驱动实现

软件实现并接连和网的启动进程兼容,硬件实现(RAID控制器)总是太贵并且都是厂商专有的艺,所以
有了同遭掺杂的兑现:系统启动时,由固件(firmware)来兑现RAID,系统启动的多了,由让来无
理RAID。当然,这要操作系统对这种让提供支撑。

发表评论

电子邮件地址不会被公开。 必填项已用*标注