|
12.6 云存储技术体系
* o6 M4 K0 j2 x2 p8 s5 ]. R云存储涉及的知识面很广,既涉及云存储服务端的技术,又涉及终端设备应用. u4 h- x; A3 x( {1 C
开发相关的技术。本书关注云存储系统服务端技术,其技术体系如图12-8所示。3 c; T( Q- s# Z. l; ^8 s* ?- \/ j
图 12-8 云存储技术体系
( A. `$ ?# V1 e1 |' Q6 @5 w) R云存储技术体系结构分为四层:硬件层、单机存储层、分布式存储层、存储访
6 h$ m1 f3 T( T6 S问层,下面分别介绍。/ `# t9 h, {2 w4 Y/ a( ]. m* u" g
(1)硬件层
b( L3 N* R4 `, r硬件层包括存储、网络以及CPU。在存储方面,除了传统的SAS或者SATA磁1 W& P2 i! C% |4 E }8 l
盘,SSD技术发展迅猛;在网络方面,千兆网卡已经普及,万兆网卡离我们越来越
& O# p- u* _! |& e, B近,Google这样的互联网巨头已经开始尝试通过软件自定义交换机;在CPU层面,; ^& h) B7 ~# }7 x
Intel x86架构成为主流,低功耗逐步成为研究热点。为了降低成本和能耗,云存储服
a. ^" N' `5 B. X7 s务提供商往往会定制服务器,甚至自建数据中心,需要考虑电源、冷却、& t$ e1 b4 M, b
PUE(Power Usage Efficiency,能源使用效率)等各种问题。
& b( T. W) h& i(2)单机存储层' `( U$ H1 g. l# A3 R# @; Q
云存储系统的底层大多为定制的Linux操作系统,服务提供商需要在文件系统、7 y' b7 C7 Z4 [+ ], Y# V
网络协议以及CPU和内存使用上对Linux系统进行大量的定制化工作。单机存储系统% \2 j$ Z. `) d- E' ^$ D$ z9 R. v/ [% {
大致分为两类:传统的关系数据库以及NoSQL存储系统。关系数据库支持二维的关
7 o; e5 J. {. ? L& R$ Q系模式,并提供关系数据库查询语言SQL,支持事务,索引等操作,使用比较方便。4 A$ S7 C" r: I
NoSQL存储系统则百花齐放,常见的NoSQL系统包括仅支持根据主键进行
- g) t# N+ m: q3 i8 G c% DCRUD(Create,Read,Update,Delete)操作的键值(Key-Value)存储系统,也有基于传
" |: ]& {0 i' [/ o: e0 Q统的B树或者LSM树(Log-Structured Merge Tree)的存储系统。3 z* [! M0 M8 G, Z# k( {
(3)分布式存储层
( [! v% x3 Y& P" p分布式存储层是云存储技术的核心,也是最难实现的部分。分布式存储系统需; v/ \/ t* |; n: C
要能够将数据均匀地分散到多个存储节点上,另外,为了保证高可靠性和高可用
! C: ?2 q7 f# C% `! [ T. c性,需要将数据复制到多个存储节点并保证一致性。当存储节点出现故障时,需要% o' G1 e9 W6 T! q* L' R
能够自动检测到节点故障并将服务迁移到其他正常工作的节点。分布式存储层依赖! T+ q# B' v8 K7 x
一些基础服务,常见的包括分布式锁服务(例如Google Chubby系统),以及集群资
& K6 }8 y5 A3 c源管理服务(例如Google Borg系统)。另外,分布式存储层包含分布式缓存以及服/ t+ _+ Z& N" ^% @' g: c' P/ p
务总线,分布式缓存用于提高访问性能,服务总线用于云平台应用逻辑解耦。云存
. ]9 B3 {3 A* C储系统既存储无结构化数据,又存储半结构化以及结构化数据,分别对应分布式文
+ p' e) Z- c. F& [$ V: m& _件系统、分布式表格系统以及分布式数据库,而CDN以及P2P技术将云存储系统中的- w$ \" a% p; B& A
热点数据缓存到离用户较近的边缘节点或者临近的其他用户的客户端,从而起到访
- f. [/ G2 k+ ~- n3 b5 g7 d% p问加速的作用,并且节省云存储服务提供商的网络带宽成本。
) a- E/ a& a9 \- I(4)存储访问层* A5 e! B% w- o- L& c
云存储系统通过存储访问层被个人用户的终端设备直接访问,或者被云存储平
' O& ~0 L' j+ i+ s1 X) a台中托管的应用程序访问。云存储访问层的功能包括:Web服务、负载均衡、安全服
! L- L" v/ W9 c务以及计费。云存储系统对外提供统一的访问接口,常见的接口是REST或者SOAP
2 _0 Y/ j0 J2 z$ l6 V这样的Web服务,需要通过Apache或者Nginx这样的Web服务器进行协议转化,Web服$ E$ a) r+ Z4 ^) t- I( M9 o, J
务器前端经常使用LVS(Linux Virtual Server)、HaProxy这样的软件或者专业的负载4 _: Q' [/ S9 V9 f9 x
均衡设备(如F5负载均衡器)进行负载均衡。存储访问层需要提供安全和计费服' n) Q, y0 x; @$ z5 {8 Y% f
务,安全服务包括身份认证、访问授权、综合防护、安全审计、DDos攻击预防/防火8 z' { {' L' R4 p5 j
墙等。
* I) _$ M7 k* B2 K2 C- A F0 E用户的应用程序可能会托管在应用运行平台中,应用场景大致分为三类:! ^. [/ h+ ~0 i
●弹性计算平台。典型的弹性计算平台为Amazon EC2以及Microsoft的各种虚拟机
+ w9 ]& I0 G; p实例,底层涉及的技术包括虚拟机、自动伸缩。弹性计算平台通过虚拟机自身的机
( ^9 [& V Y2 h' c1 M制来保证云安全,比如虚拟机安全隔离、虚拟机防火墙。基于虚拟机的弹性计算平
# g( `+ C: O6 Z- F6 o台的优势在于兼容性,支持各种编程语言和平台。
0 A- O' t d4 c4 P●云引擎。典型的云引擎为Google App Engine,底层设计的涉及的技术主要是应3 w0 K6 j7 A9 v9 [6 m, W1 l+ {
用容器(比如Java Tomcat、Jetty,Python Runtime)以及应用容器自动伸缩。当应用的
) F! I5 h* j" }& V2 ]) A2 C负载过高时,自动增加应用的运行容器数;反之,自动减少应用的运行容器数。云1 \5 Y9 t( j, A6 j; x1 y( M* P
引擎通过应用容器的沙箱机制来保证安全性,App Engine的沙箱环境通过限制每个请2 u0 `/ [4 j: G* D( e
求的执行时间来防止多租户之间干扰,另外,限制应用程序对网络、文件进行一些
' K4 d H3 t7 i: [/ L危险操作。云引擎与云存储服务提供商结合较好,但是对于每种不同的编程语言都
/ k! J/ Q3 F X, O+ z/ {需要定制相应的应用容器,对编程语言和平台支持比较有限。
: B1 ^$ j h. B3 A9 N/ u @●分布式计算。云平台往往会支持分布式计算,通过后台的计算实例执行耗时较5 @* W1 I. H0 a6 D5 l
长的计算任务。MapReduce是最为常见的分布式计算模型,云平台一般都支持开源的
% |6 {5 C8 \) A7 ?9 o3 `1 sHadoop MapReduce计算框架。除了MapReduce之外,还有很多针对特定应用场景的+ m: Y3 O/ z" i' \0 p8 e: W
计算模型,例如MPI(Message Passing Interface)、BSP(Bulk Synchronous Parallel)" W$ |! E+ U+ r8 D* j0 G5 i/ |
等。
% G1 a6 z0 K# w7 f* ~1 ]( {1 e. R) {2 z G) ~9 G
3 } e1 ^ I0 F/ E6 Q# j+ l
|
|