云存储技术体系
存储涉及的知识面很广,既涉及云存储服务端的技术,又涉及终端设备应用开发相关的技术。本文章关注云存储系统服务端技术。
云存储技术体系结构分为四层:硬件层、单机存储层、分布式存储层、存储访问层,下面分别介绍。
硬件层
硬件层包括存储、网络以及CPU。在存储方面,除了传统的SAS或者SATA磁盘,SSD技术发展迅猛;在网络方面,千兆网卡已经普及,万兆网卡离我们越来越近,Google这样的互联网巨头已经开始会试通过软件自定义交换机;在CPU层面,IntelX86架构成为主流,低功耗逐步成为研究热点。为了降低成本和能耗,云存储服务提供商往往会定制服务器,甚至自建数据中心,需要考虑电源、冷却、PUE(Power Usage Eficiency,能源使用效率)等各种问题。
主机存储层
云存储系统的底层大多为定制的Linux操作系统,服务提供商需要在文件系统、网络协议以及CPU和内存使用上对Linux系统进行大量的定制化工作。单机存储系统大致分为两类:传统的关系数据库以及NoSQL存储系统。关系数据库支持二维的关系模式,并提供关系数据库查询语言SQL,支持事务,索引等操作,使用比较方便。
NoSQL存储系统则百花齐故,常见的NoSQL系统包括仅支持根据主键进行CRUD(Create,Read,Update,Delete)操作的键值(Key-Value)存储系统,也有基于传统的B树或者LSM树(Log-Structured Merge Tree)的存储系统。
分布式存储层
分布式存储层是云存储技术的核心,也是最难实现的部分。分布式存储系统需要能够将数据均匀地分散到多个存储节点上,另外,为了保证高可靠性和高可用性,需要将数据复制到多个存储节点并保证一致性。当存储节点出现故障时,需要能够自动检测到节点故障并将服务迁移到其他正常工作的节点。分布式存储层依赖一些基础服务,常见的包括分布式锁服务(例如Google Chubby系统),以及集群资源管理服务(例如Google Borg系统)。另外,分布式存储层包含分布式缓存以及服务总线,分布式缓存用于提高访问性能,服务总线用于云平台应用逻辑解耦。云存储系统既存储无结构化数据,又存储半结构化以及结构化数据,分别对应分布式文件系统、分布式表格系统以及分布式数器库,面CDN以及P2P技术将云存储系统中的热点数据缓存到离用户较近的边缘节点或者临近的其他用户的客户端,从而起到访问加速的作用,并且节省云存储服务提供商的网络带宽成本。
存储访问层
云存储系统通过存储访问层被个人用户的终端设备直接访问,或者被云存储平台中托管的应用程序访问。云存储访问层的功能包括:Web服务、负载均衡、安全服务以及计费。云存储系统对外提供统一的访问接口,常见的接口是REST或者SOAP这样的Web服务,需要通过Apache或者Nginx这样的Web服务器进行协议转化,Web服务器端经常使用LVS(Linux Vitual Server)、HaProxy这样的软件或者专业的负载均衡设备(如F5负载均衡器)进行负载均衡。存储访问层需要提供安全和计费服务、安全服务包括身份认证、访问授权、综合防护、安全审计、Ddos攻击预防/防火墙等。
用户的应用程序可能会托管在应用运行平台中,应用场景大致分为三类:
弹性计算平台。典型的弹性计算平台为Amazon EC2以及Microsoft的各种虚拟机实例,底层涉及的技术包括虚拟机、自动伸缩。弹性计算平台通过虚拟机自身的机制来保证云安全,比如虚拟机安全隔离、虚拟机防火墙。基于虚拟机的弹性计算平台的优势在于兼容性,支持各种编程语言和平台。
云引擎。典型的云引擎为Google AppEngine,底层设计的涉及的技术主要是应用容器(比如Java Tomcat、Jetty,Python Runtime)以及应用容器自动伸缩。当应用的负载过高时,自动增加应用的运行容器数;反之,自动减少应用的运行容器数。云引擎通过应用容器的沙箱机制来保证安全性,AppEngine的沙箱环境通过限制每个请求的执行时间来防止多租户之间干扰,另外,限制应用程序对网络、文件进行一些危险操作。云引擎与云存储服务提供商结合较好,但是对于每种不同的编程语言都需要定制相应的应用容器,对编程语言和平台支持比较有限。
分布式计算。云平台往往会支持分布式计算,通过后台的计算实例执行耗时较长的计算任务。MapReduce是最为常见的分布式计算模型,云平台一般都支持开源的Hadoop MapReduce计算框架。除了MapReduce之外,还有很多针对特定应用场景的计算模型,例如MPI(Message Passing Interface)、BSP(Bulk Synchronous Parallel)等。
- 点赞
- 收藏
- 关注作者
评论(0)