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,mp3和蓝光光盘的出版,存储介质出现了擦除码技术,即便媒介表面出现划痕,如故能够播放,一大半广阔的擦除码算法已经衍变为上世纪60年份俄亥俄州立高校Lincoln实验室开
发的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。当然,那亟需操作系统对那种驱动提供匡助。

发表评论

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