架构解密分布式到微服务:深入解析分布式文件存储,软件定义存储
Posted king哥Java架构
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了架构解密分布式到微服务:深入解析分布式文件存储,软件定义存储相关的知识,希望对你有一定的参考价值。
软件定义存储
实际上,在云计算时代,只有两类存储系统吸引了众多厂商的极大关注:第1类是分布式的块存储系统,它提供了原始的存储媒介和接口,虚机和Docker容器所在的主机也都需要块存储设备;第﹖类是新型的分布式对象存储系统,因为它符合众多互联网应用的存储需求,所以传统的分布式文件系统显得有点没落。本节将聊聊分布式对象存储及由此引发的“软件定义存储”这种新型的存储概念及产品。
首先,什么是对象存储?互联网应用中的很多文件如图像、照片、视频、文档、表格、演示文档及邮件附件都是典型的对象数据,这种数据的典型特点就是“一次写入后基本不变,并且需要多次读取”。对象数据尽管是文件,但它是已被封装的文件(编程中的对象就有封装性),也就是说,在对象存储系统里,我们不能直接打开、修改文件,而是通过编程让特定的程序读取,所有对象存储系统都提供了REST API接口来供应用使用。另外,对象存储没有像文件系统那样有一个多层级的文件结构,只有一个桶(bucket,也就是存储空间)的概念,在桶里面全部都是对象,没有目录分级,这是一种非常扁平化的存储方式,你只能用对象的唯一标识来访问这个对象。简单来说,块存储读写快,不利于共享;文件存储读写慢,利于共享;对象存储系统则集二者的优点,是一个利于共享、读写快的网络存储技术。
对象存储也是一种分布式存储,将多台X86服务器内置于大容量硬盘中,再装上开源对象存储软件即可形成一套存储方案。对象存储所面临的唯一问题是接口和标准化问题,我们知道,块存储和文件存储都有自己的标准接口规范,但对象存储这种新型的存储没有标准接口规范,在这种情况下,“最早吃螃蟹的人”给出的接口就自然而然地成为业界标准了,这个标准就是Amazon S3。Amazon S3是一个公开的云服务,Web应用程序开发人员可以使用它存储数字信息,包括图片、视频、音乐和文档。Amazon S3提供的RESTful API成为业界公认的对象存储标准接口规范。
下面是Amazon S3提供的写对象的RESTAPI定义,写对象的逻辑类似于我们创建一个文件并保存到磁盘里,只不过写文件的过程变成了上传文件到云端,将文件保存到某个磁盘目录等同于将对象保存到某个桶里。
Request(请求)如下:
PUT/0bjectName HTTP/1.1
Host: BucketName.s3.amazonaws.comDate: date
Authorization: authorization string
. . .Object data in the body. . .
Response(例子)如下:
HTTP/1.1 200 OK
x-amz-request-id:8D017A90827290BADate: Fri,13 Apr 201205:40:25GMT
ETag: "dd038b344cf9553547f8b395a814b274"Content-Length: 0
Server: Amazons3
可以看出,Amazon S3的 RESTAPI还是比较简单、清晰的,它在本质上就是一个HTTP Put方式的文件上传接口。下面这段来自Amazon S3官网的Java代码给出了上述接口的一个具体调用示例:
public class Uploadobjectsingle0peration{
private static String bucketName
="★*★ Provide bucket name ***";
private static String keyName="***Provide key ***";
private static String uploadFileName = "*** Provide file name ***";
public static void main (String[] args) throws IOException{
AmazonS3 s3client = new AmazonS3client(new ProfilecredentialsProvider())try {
System.out.println("Uploading a new object to $3 from a file\\n");File file - new File(uploadFileName) ;
s3client. putObject (new PutObjectRequest(
bucketName, keyName, file));
}
catch (AmazonServiceException ase) {
System.out.println ("caught an AmazonServiceException,which " +
"means your request made it "+
"to Amazon S3, but was rejected with an error response"+"for some reason."");
System.out.println("Error Message: " +ase.getMessage ());System.out.println ("HTTP Status Code: " +ase.getstatusCode ());System.out.println("AWS Error Code: " +ase.getErrorCode());System.out.println("Error Type:
" +ase.getErrorType());
System.out.println ( "Request ID: " + ase.getRequestId ());Hcatch (AmazonClientException ace) {
System.out.println ( "Caught an AmazonclientException,which " +
"means the client encountered "+
"an internal error while trying to "+"communicate with s3,"+
"such as not being able to access the network.");
System.out.println("Error Message: " + ace.getMessage());
}
}
}
第1个模仿Amazon S3的开源对象存储系统是OpenStack 的Swift(后简称Swift),它完全开放,有广泛的用户群和社区贡献者,所以打破了Amazon S3在市场上的垄断状态,推动了云计算朝着更加开放和可互操作的方向前进。Swift 也是被商业化部署最多的OpenStack 组件,目标是提供对象存储服务。如下所示是Swift的一张精简示意图,多个X86服务器组成Swift存储集群,并在前端安置了Swift Proxy Server作为网关对外提供对象存储服务,该服务兼容AmazonS3的REST API接口。
如下所示是Swift集群的一个参考部署图。
与Ceph类似,为了将存储对象均匀分布到后端的多个存储设备上,Swift 也用了一套特殊的Hash算法——一致性哈希算法,在Swift 里叫作弹性哈希环。Swift 的哈希环是存储设备节点线性分布的,无法人工配置和干预;Ceph的CRUSH算法则采用层级结构,用户可以定义细致的策略,因此从生产应用的角度来说比Swift更合适,加上 Ceph同时支持块存储、文件存储及对象存储,因此后来居上。雅虎的Cloud Object Store (COS)是雅虎基于商用硬件的软件定义存储解决方案,雅虎也是在对比了Swift、Ceph 及其他一些商业化的解决方案后最终选择了Ceph,其中最重要的一个原因就是Ceph通过一个固有的架构把对象存储、块存储和文件存储整合到了一个存储层,同时有很好的灵活性。
下图显示了一个基于Ceph 的对象存储方案,里面涉及存储网络的划分细节。
下面看看什么是软件定义存储。
2012年,VMware在其 vForum大会上首次提出了软件定义数据中心(SDDC)的概念。作为VMware软件定义数据中心的五大组成部分(计算、存储、网络、管理和安全)之一,软件定义存储(SDS)的概念也被首次提出。EMC公司在当年的EMC World 发布大会上也发布了SDS战略,引发了业界对SDS的热烈讨论,SDS迅速成为存储业界的研究热点,成为拯救传统存储厂商的一种新技术。
VMware作为SDS概念的创造者,对SDS的定义如下。
软件定义存储的产品是一种将硬件抽象化的解决方案,使你可以轻松地将所有资源池化并通过一个友好的用户界面(UI)或API提供给消费者。软件定义存储的解决方案使你可以在不增加任何工作量的情况下进行纵向扩展(Scale-Up)或横向扩展(Scale-Out)。
实际上,最权威的SDS定义莫过于SNIA对SDS的定义了,SNIA曾先后定义了DAS、SAN、NAS、对象存储及云存储等标准。作为一家非盈利行业组织,SNIA拥有420多家来自世界各地的公司成员及7100多位个人成员,遍及整个存储行业。SNIA认为,SDS需要满足的是:提供自助的服务接口,用于分配和管理虚拟存储空间。SDS应该提供这些功能:自动化;标准接口;虚拟数据路径;扩展性;透明性。
在企业方面,惠普的SDS战略分为两个领域:一个领域针对主数据存储,主要是惠普的StoreVirtual VSA系列产品;另一个领域针对数据备份,相应的“软件定义备份”解决方案是惠普的StoreOnce VSA。StoreVirtual VSA是针对主数据存储的软件定义存储解决方案,在早期是软硬件集成解决方案,后来将其中的软件部分剥离出来,单独以软件形式销售,客户可以通过StoreVirtual VSA 软件将自己现有的服务器存储环境整合起来变成存储资源池。StoreOnce VSA是备份解决方案,早期也是将软硬件整合在一起,后来,惠普同样将其中的软件部分抽离出来,这就是StoreOnce VSA,适用于分支机构的备份环境,可以在现有的PC服务器上非常简单地建立备份节点。2015年2月底,IBM软件定义存储产品系列——光谱存储(Spectrum Storage)正式发布。IBM把XIV打造成像Spectrum Accelerate一样的软件定义存储,同时将大型机里面的GPFS(通用并行文件系统)更名为Spectrum Scale,在 IDC的市场统计中,IBM的软件定义存储产品多次排在第一位。IBM 于2019年发布了新一代软件定义存储的 IBM Elastic StorageSystem 3000产品,该产品的核心技术是Spectrum Scale并行文件系统,它以容器化软件交付的方式提供产品,2U空间可提供高达40GB/s 的数据访问带宽和 320TB的存储容量,整个系统由多个节点构成,当数据量急剧增大的时候,它可以更简单地实现快速扩展,能够满足不同的人工负载的要求。
虽然SDS这个新口号看起来比较虚,但实际上我们之前介绍的Ceph就是一种开源的SDS产品。在VMware的官网论坛上有一句话可翻译为:Ceph是一种 SDS解决方案,提供了块存储、文件存储及对象存储的能力。
下面这些软件也可以被理解为SDS产品。
- GlusterFS。
- Nexenta(文件与块存储,支持OpenStack 与Docker)。
- Swift。
自从软件定义存储的概念提出后,一直独立于服务器技术单独发展的企业存储技术也在加速优化。
最后
给大家分享一篇一线开发大牛整理的java高并发核心编程神仙文档,里面主要包含的知识点有:多线程、线程池、内置锁、JMM、CAS、JUC、高并发设计模式、Java异步回调、CompletableFuture类等。
码字不易,如果觉得本篇文章对你有用的话,请给我一键三连!关注作者,后续会有更多的干货分享,请持续关注!
以上是关于架构解密分布式到微服务:深入解析分布式文件存储,软件定义存储的主要内容,如果未能解决你的问题,请参考以下文章
架构解密从分布式到微服务:深入Kubernetes微服务平台
架构解密从分布式到微服务:分布式系统基石之ZooKeeper