信息以文件形式存储,文件用什么分类分层存放
文件、块和对象是三种以不同的方式来保存、整理和呈现数据的存储格式。这些格式各有各的功能和限制。文件存储会以文件和文件夹的层次结构来整理和呈现数据;块存储会将数据拆分到任意划分且大小相同的卷中; 对象存储会管理数据并将其链接至关联的元数据。
块存储
块存储会将数据拆分成块,并单独存储各个块。每个数据块都有一个唯一标识符,所以存储系统能将较小的数据存放在最方便的位置。这意味着有些数据可以存储在 Linux 环境中,有些则可以存储在 Windows 单元中。
块存储通常会被配置为将数据与用户环境分离,并会将数据分布到可以更好地为其提供服务的多个环境中。然后,当用户请求数据时,底层存储软件会重新组装来自这些环境的数据块,并将它们呈现给用户。它通常会部署在存储区域网络 (SAN) 环境中,而且必须绑定到正常运行的服务器。
由于块存储不依赖于单条数据路径(和文件存储一样),因此可以实现快速检索。每个块都独立存在,且可进行分区,因此可以通过不同的操作系统进行访问,这使得用户可以完全自由地配置数据。它是一种高效可靠的数据存储方式,且易于使用和管理。它适用于要执行大型事务的企业和部署了大型数据库的企业。这意味着,需要存储的数据越多,就越适合使用块存储。
块存储有一些缺点。块存储的成本高昂。它处理元数据的能力有限。
操作对象:磁盘
存储协议:SCSI、iSCSI、FC
接口命令:以SCSI为例,主要有Read/Write/Read Capacity
存储架构:DAS、SAN
文件存储
文件存储也称为文件级存储或基于文件的存储,数据会以单条信息的形式存储在文件夹中。当需要访问该数据时,计算机需要知道相应的查找路径。存储在文件中的数据会根据元数据来进行整理和检索,这些元数据会告诉计算机文件所在的确切位置。
请试想一下塞满文件柜的储藏室。每个文档都会按照某种类型的逻辑层次结构来排放 ——按文件柜、抽屉、文件夹,然后再是纸张。“分层存储”这个术语就是这么来的,而这就是文件存储。它是适用于直接和网络附加存储(NAS)系统的最古老且运用最为广泛的一种数据存储系统;当访问保存在个人计算机上的文件中的文档,就是在使用文件存储。文件存储具有丰富多样的功能,几乎可以存储任何内容。它非常适合用来存储一系列复杂文件,并且有助于用户快速导航。
问题是基于文件的存储系统必须通过添置更多系统来进行横向扩展,而不是通过增添更多容量来进行纵向扩展。
操作对象:文件和文件夹
存储协议:NFS、SAMBA(SMB)、POSIX
接口命令:以NFS为例,文件相关的接口命令包括:READ/WRITE/CREATE/REMOVE/RENAME/LOOKUP/ACCESS 等;文件夹相关的接口命令包括:MKDIR/RMDIR/READDIR 等
存储架构:NAS (LinuxNAS存储_Jacky_Feng的博客-CSDN博客)
对象存储
对象存储,也称为基于对象的存储,是一种扁平结构,其中的文件被拆分成多个部分并散布在多个硬件间。在对象存储中,数据会被分解为称为“对象”的离散单元,并保存在单个存储库中,而不是作为文件夹中的文件或服务器上的块来保存。
对象存储卷会作为模块化单元来工作:每个卷都是一个自包含式存储库,均含有数据、允许在分布式系统上找到对象的唯一标识符以及描述数据的元数据。元数据包括年龄、隐私/安全信息和访问突发事件等详细信息。为了检索数据,存储操作系统会使用元数据和标识符,这样可以更好地分配负载,并允许管理员应用策略来执行更强大的搜索。
对象存储需要一个简单的 HTTP 应用编程接口 (API),以供大多数客户端(各种语言)使用。对象存储经济高效:您只需为已用的内容付费。它可以轻松扩展,因而是公共云存储的理想之选。它是一个非常适用于静态数据的存储系统,其灵活性和扁平性意味着它可以通过扩展来存储极大量的数据。对象具有足够的信息供应用快速查找数据,并且擅长存储非结构化数据。
它的缺点是无法修改对象 ,即必须一次性完整地写入对象。对象存储也不能很好地与传统数据库搭配使用,因为编写对象是一个缓慢的过程,编写应用以使用对象存储 API 并不像使用文件存储那么简单。
操作对象:对象(Object)
存储协议:S3、Swift
接口命令:主要有PUT/GET/DELETE等
存储架构:去中心化框架
对象存储概念
对象存储的数据组成
存储桶(Bucket):存放对象的“容器”,且该“容器”无容量上限。对象以扁平化结构存放在存储桶中,无文件夹和目录的概念,用户可选择将对象存放到单个或多个存储桶中。存储桶的容量大小需要通过累加各个对象的大小得到。
每个存储桶可容纳任意数量的对象,但同一个主账号下存储桶数量最多仅能够创建200个。(???)
对于存储桶,应当以用途为粒度进行划分,确保每个存储桶的用途尽可能单一。例如,针对存放个人文件、发布静态网站、存储备份等用途都应该创建不同的存储桶。此外,不同项目的数据、不同的网站,或者完全私人的文件与工作性质、需要分享的文件,也应该划分不同的存储桶。
对象存储中也没有「文件夹」的概念。对象存储的管理平台为了模仿本地存储的使用习惯,并与本地存储系统互相兼容而模拟了目录结构,背后的原理也仅仅是根据 / 这个字符对 key 进行分隔。为了表示空目录,部分云平台也提供「文件夹」对象,实际上只是 key 以 / 结尾的空存储对象。
存储桶所在地域(Regin)
指对象存储的数据中心所在地域。对象存储允许用户在不同地域创建存储桶,可以选择在离业务最近的地域上创建存储桶,以满足低延迟、低成本以及合规性要求。
Bucket读写权限
Bucket读写权限包括:私有读写、公有读私有写和公有读写。
私有读写
只有该存储桶的创建者及有授权的账号才对该存储桶中的对象有读写权限,其他任何人对该存储桶中的对象都没有读写权限。存储桶访问权限默认为私有读写,推荐使用。
公有读私有写
任何人(包括匿名访问者)都对该存储桶中的对象有读权限,但只有存储桶创建者及有授权的账号才对该存储桶中的对象有写权限。
公有读写
任何人(包括匿名访问者)都对该存储桶中的对象有读权限和写权限,不推荐使用。
对象(Object):对象存储的基本单元,可理解为任何格式类型的数据,例如、文档和音视频文件等。
每个对象都由对象键(Key)、对象值(Data)、和对象元数据(Metadata)组成。
对象键(Key):对象键是对象在存储桶中的全局唯一标识(UID),可以理解为文件(名)路径。
key用于检索对象,文件对象的 key 与实际存储路径无关,服务器和用户不需要知道数据的物理地址,通过key就能找到对象。
对象值(Data):即存储对象内容数据,可以理解为文件内容(Object Content)。
对象元数据(Metadata):是一组键值对,可以通俗的理解为文件的属性,例如文件的修改时间、存储类型等。(传统的文件存储,元数据属于文件本身,和文件一起封装存储。而对象存储,元数据独立出来,并不在数据内部封装。)
对象访问地址
对象的访问地址由存储桶访问地址和对象键组成,其结构形式为<存储桶域名>/<对象键> 。
例如:上传对象exampleobjecttxt到广州(华南)的存储桶examplebucket-1250000000中,那么exampleobjecttxt的访问地址是:examplebucket-1250000000cosap-guangzhoumyqcloudcom/exampleobjecttxt。其中examplebucket-1250000000cosap-guangzhoumyqcloudcom为存储桶域名,exampleobjecttxt为对象键。
目录和文件夹
对象存储中本身是没有文件夹和目录的概念的,对象存储不会因为上传对象project/atxt而创建一个project文件夹。为了满足用户使用习惯,对象存储在控制台、COS browser 等图形化工具中模拟了「文件夹」或「目录」的展示方式,具体实现是通过创建一个键值为project/,内容为空的对象,展示方式上模拟了传统文件夹。
对象操作
用户通过控制台、工具、API、SDK等多种方式管理对象。
对象存储架构
对象存储设备(OSD)
OSD由存储介质、处理器、内存以及网络系统等组成,负责管理本地的对象,是对象存储系统的核心。和块设备相比,它们的差异在于提供的访问接口。OSD的主要功能是数据存储和安全访问。
数据存储:OSD管理对象数据,并将它们放置在标准的磁盘系统上,OSD不提供块接口访问方式,Client请求数据时用对象ID、偏移进行数据读写。
智能分布:OSD用其自身的CPU和内存优化数据分布,并支持数据的预取。由于OSD可以智能地支持对象的预取,从而可以优化磁盘的性能。
对象元数据管理:OSD管理存储的对象元数据与传统的inode元数据相似,通常包括对象的数据块和对象的长度。而在传统的NAS系统中,这些元数据是由文件服务器维护的,对象存储架构将系统中主要的元数据管理工作由OSD来完成,降低了Client的开销。
元数据服务器(MDS)
MDS控制Client与OSD对象的交互,为客户端提供元数据,主要是文件的逻辑视图(文件与目录的组织关系、每个文件所对应的OSD等)。主要功能如下:
对象存储访问:MDS构造和管理描述每个文件分布的逻辑视图,允许Client直接访问对象。MDS为Client提供访问该文件所含对象的能力,OSD在接收到每个请求时将先验证该能力,然后才可以访问。
文件和目录访问管理:MDS在存储系统上构建一个文件结构,包括限额控制、目录和文件的创建和删除、访问控制等。
Client Cache一致性:为了提高Client性能,在对象存储系统设计时通常支持Client方的Cache。由于引入Client方的Cache,带来了Cache一致性问题,MDS支持基于Client的文件Cache,当Cache的文件发生改变时,将通知Client刷新Cache,从而防止Cache不一致引发的问题。
客户端(Client)
对象存储系统提供给用户的也是标准的POSIX文件访问接口。接口具有和通用文件系统相同的访问方式,同时为了提高性能,也具有对数据的Cache功能和文件的条带功能。同时,文件系统必须维护不同客户端上Cache的一致性,保证文件系统的数据一致。
文件系统读访问流程:
① 客户端应用发出读请求;
② 文件系统向元数据服务器发送请求,获取要读取的数据所在的OSD;
③ 直接向每个OSD发送数据读取请求;
④ OSD得到请求以后,判断要读取的Object,并根据此Object要求的认证方式,对客户端进行认证,如果此客户端得到授权,则将Object的数据返回给客户端;
⑤ 文件系统收到OSD返回的数据以后,读操作完成。
对象存储的优缺点
(1)优点:
容量大,高扩展性
对象存储的容量是EB级以上,对象存储的所有业务、存储节点采用分布式集群方式工作,各功能节点、集群都可以独立扩容。从理论上来说,某个对象存储系统或单个桶(bucket),并没有总数据容量和对象数量的限制,即服务商就可以不停地往架构里增加资源,这个存储空间就是无限的,也是支持弹性伸缩的。
高安全性,可靠性
对象存储采用了分布式架构,对数据进行多设备冗余存储(至少三个以上节点),实现异地容灾和资源隔离。数据访问方面,所有的桶和对象都有访问控制策略,所有连接都支持SSL加密,访问用户进行身份权限鉴定。
高性能,支持海量用户的并发访问
(2)缺点:
不支持直接在存储上修改
对象存储系统保存的Object不支持修改(追加写Object需要调用特定的接口,生成的Object也和正常上传的Object类型上有差别)。用户哪怕是仅仅需要修改一个字节也需要重新上传整个Object。因此,它不适合存储需要频繁擦写的数据。
参考链接:
对象存储,为什么那么火? - 知乎 (zhihucom)
对象存储 存储桶概述 - 开发者指南 - 文档中心 - 腾讯云 (tencentcom)
基本概念 (aliyuncom)
文件存储、块存储还是对象存储? (redhatcom)
linux
驻马店市民请关注领取补贴!
巨魔-抽手机公告
广告

对比块存储、文件存储、对象存储
1242阅读·0评论·3点赞
2019年2月27日
ShapeFile的文件格式设计
90阅读·0评论·0点赞
2009年3月20日
应用ceph对象存储(ceph-13210)
72阅读·0评论·0点赞
2022年11月26日
三种存储类型比较-文件、块、对象存储
48W阅读·0评论·13点赞
2016年7月26日
常见存储格式文件简介
4534阅读·0评论·0点赞
2020年5月4日
s3cmd常用命令
781阅读·0评论·0点赞
2022年11月17日
驻马店发布,你有一台5G手机待领取

00:23
巨摩互动
广告
常见的存储格式
1083阅读·0评论·0点赞
2022年2月15日
文件、对象、块区别
1399阅读·0评论·0点赞
2020年7月13日
对象存储、文件存储、块存储的区别和联系
7330阅读·2评论·5点赞
2021年10月16日
数据分析中常见的存储方式
1537阅读·0评论·0点赞
2021年11月16日
三种存储类型:块存储、文件存储、对象存储
15W阅读·3评论·55点赞
2020年11月2日
如何设计二进制文件格式
1940阅读·0评论·1点赞
2020年3月6日
BMP文件存储格式
472阅读·0评论·2点赞
2021年8月2日
hive 的存储格式
1765阅读·0评论·1点赞
2022年6月18日
数据存储格式
446阅读·0评论·0点赞
2022年12月21日
总结:对象存储、块存储、文件存储的区别
6606阅读·0评论·3点赞
2022年4月9日
c语言中文件rw,什么是“块文件”?
386阅读·0评论·0点赞
2021年5月23日
存储块存储、文件存储和对象存储的区别?
350阅读·0评论·0点赞
2022年7月22日
块存储、文件存储与对象存储的区别与应用场景
1846阅读·1评论·0点赞
2022年6月5日
数据在内存中的存储方式
272阅读·0评论·0点赞
2022年8月21日
去首页
看看更多热门内容
随着开源系统Linux的盛行,其在大中型企业的应用也在逐渐普及,很多企业的应用服务都是构筑在其之上,例如Web服务、数据库服务、集群服务等等。因此,Linux的安全性就成为了企业构筑安全应用的一个基础,是重中之重,如何对其进行安全防护是企业需要解决的一个基础性问题,基于此,本文将给出十大企业级Linux服务器安全防护的要点。1、强化:密码管理设定登录密码是一项非常重要的安全措施,如果用户的密码设定不合适,就很容易被破译,尤其是拥有超级用户使用权限的用户,如果没有良好的密码,将给系统造成很大的安全漏洞。目前密码破解程序大多采用字典攻击以及暴力攻击手段,而其中用户密码设定不当,则极易受到字典攻击的威胁。很多用户喜欢用自己的英文名、生日或者账户等信息来设定密码,这样,黑客可能通过字典攻击或者是社会工程的手段来破解密码。所以建议用户在设定密码的过程中,应尽量使用非字典中出现的组合字符,并且采用数字与字符相结合、大小写相结合的密码设置方式,增加密码被黑客破解的难度。而且,也可以使用定期修改密码、使密码定期作废的方式,来保护自己的登录密码。在多用户系统中,如果强迫每个用户选择不易猜出的密码,将大大提高系统的安全性。但如果passwd程序无法强迫每个上机用户使用恰当的密码,要确保密码的安全度,就只能依靠密码破解程序了。实际上,密码破解程序是黑客工具箱中的一种工具,它将常用的密码或者是英文字典中所有可能用来作密码的字都用程序加密成密码字,然后将其与Linux系统的/etc/passwd密码文件或/etc/shadow影子文件相比较,如果发现有吻合的密码,就可以求得明码了。在网络上可以找到很多密码破解程序,比较有名的程序是crack和john the ripper用户可以自己先执行密码破解程序,找出容易被黑客破解的密码,先行改正总比被黑客破解要有利。2、限定:网络服务管理早期的Linux版本中,每一个不同的网络服务都有一个服务程序(守护进程,Daemon)在后台运行,后来的版本用统一的/etc/inetd服务器程序担此重任。Inetd是Internetdaemon的缩写,它同时监视多个网络端口,一旦接收到外界传来的连接信息,就执行相应的TCP或UDP网络服务。由于受inetd的统一指挥,因此Linux中的大部分TCP或UDP服务都是在/etc/inetdconf文件中设定。所以取消不必要服务的第一步就是检查/etc/inetdconf文件,在不要的服务前加上“#”号。一般来说,除了http、smtp、telnet和ftp之外,其他服务都应该取消,诸如简单文件传输协议tftp、网络邮件存储及接收所用的imap/ipop传输协议、寻找和搜索资料用的gopher以及用于时间同步的daytime和time等。还有一些报告系统状态的服务,如finger、efinger、systat和netstat等,虽然对系统查错和寻找用户非常有用,但也给黑客提供了方便之门。例如,黑客可以利用finger服务查找用户的电话、使用目录以及其他重要信息。因此,很多Linux系统将这些服务全部取消或部分取消,以增强系统的安全性。Inetd除了利用/etc/inetdconf设置系统服务项之外,还利用/etc/services文件查找各项服务所使用的端口。因此,用户必须仔细检查该文件中各端口的设定,以免有安全上的漏洞。在后继的Linux版本中(比如Red Hat Linux72之后),取而代之的是采用xinetd进行网络服务的管理。当然,具体取消哪些服务不能一概而论,需要根据实际的应用情况来定,但是系统管理员需要做到心中有数,因为一旦系统出现安全问题,才能做到有步骤、有条不紊地进行查漏和补救工作,这点比较重要。3、严格审计:系统登录用户管理在进入Linux系统之前,所有用户都需要登录,也就是说,用户需要输入用户账号和密码,只有它们通过系统验证之后,用户才能进入系统。与其他Unix操作系统一样,Linux一般将密码加密之后,存放在/etc/passwd文件中。Linux系统上的所有用户都可以读到/etc/passwd文件,虽然文件中保存的密码已经经过加密,但仍然不太安全。因为一般的用户可以利用现成的密码破译工具,以穷举法猜测出密码。比较安全的方法是设定影子文件/etc/shadow,只允许有特殊权限的用户阅读该文件。在Linux系统中,如果要采用影子文件,必须将所有的公用程序重新编译,才能支持影子文件。这种方法比较麻烦,比较简便的方法是采用插入式验证模块(PAM)。很多Linux系统都带有Linux的工具程序PAM,它是一种身份验证机制,可以用来动态地改变身份验证的方法和要求,而不要求重新编译其他公用程序。这是因为PAM采用封闭包的方式,将所有与身份验证有关的逻辑全部隐藏在模块内,因此它是采用影子档案的最佳帮手。此外,PAM还有很多安全功能:它可以将传统的DES加密方法改写为其他功能更强的加密方法,以确保用户密码不会轻易地遭人破译;它可以设定每个用户使用电脑资源的上限;它甚至可以设定用户的上机时间和地点。Linux系统管理人员只需花费几小时去安装和设定PAM,就能大大提高Linux系统的安全性,把很多攻击阻挡在系统之外。4、设定:用户账号安全等级管理除密码之外,用户账号也有安全等级,这是因为在Linux上每个账号可以被赋予不同的权限,因此在建立一个新用户ID时,系统管理员应该根据需要赋予该账号不同的权限,并且归并到不同的用户组中。在Linux系统中的部分文件中,可以设定允许上机和不允许上机人员的名单。其中,允许上机人员名单在/etc/hostsallow中设置,不允许上机人员名单在/etc/hostsdeny中设置。此外,Linux将自动把允许进入或不允许进入的结果记录到/var/log/secure文件中,系统管理员可以据此查出可疑的进入记录。每个账号ID应该有专人负责。在企业中,如果负责某个ID的职员离职,管理员应立即从系统中删除该账号。很多入侵事件都是借用了那些很久不用的账号。在用户账号之中,黑客最喜欢具有root权限的账号,这种超级用户有权修改或删除各种系统设置,可以在系统中畅行无阻。因此,在给任何账号赋予root权限之前,都必须仔细考虑。Linux系统中的/etc/securetty文件包含了一组能够以root账号登录的终端机名称。例如,在RedHatLinux系统中,该文件的初始值仅允许本地虚拟控制台(rtys)以root权限登录,而不允许远程用户以root权限登录。最好不要修改该文件,如果一定要从远程登录为root权限,最好是先以普通账号登录,然后利用su命令升级为超级用户。5、谨慎使用:“r系列”远程程序管理在Linux系统中有一系列r字头的公用程序,比如rlogin,rcp等等。它们非常容易被黑客用来入侵我们的系统,因而非常危险,因此绝对不要将root账号开放给这些公用程序。由于这些公用程序都是用。rhosts文件或者hostsequiv文件核准进入的,因此一定要确保root账号不包括在这些文件之内。由于r等远程指令是黑客们用来攻击系统的较好途径,因此很多安全工具都是针对这一安全漏洞而设计的。例如,PAM工具就可以用来将r字头公用程序有效地禁止掉,它在/etc/pamd/rlogin文件中加上登录必须先核准的指令,使整个系统的用户都不能使用自己home目录下的。rhosts文件。6、限制:root用户权限管理Root一直是Linux保护的重点,由于它权力无限,因此最好不要轻易将超级用户授权出去。但是,有些程序的安装和维护工作必须要求有超级用户的权限,在这种情况下,可以利用其他工具让这类用户有部分超级用户的权限。sudo就是这样的工具。sudo程序允许一般用户经过组态设定后,以用户自己的密码再登录一次,取得超级用户的权限,但只能执行有限的几个指令。例如,应用sudo后,可以让管理磁带备份的管理人员每天按时登录到系统中,取得超级用户权限去执行文档备份工作,但却没有特权去作其他只有超级用户才能作的工作。sudo不但限制了用户的权限,而且还将每次使用sudo所执行的指令记录下来,不管该指令的执行是成功还是失败。在大型企业中,有时候有许多人同时管理Linux系统的各个不同部分,每个管理人员都有用sudo授权给某些用户超级用户权限的能力,从sudo的日志中,可以追踪到谁做了什么以及改动了系统的哪些部分。值得注意的是,sudo并不能限制所有的用户行为,尤其是当某些简单的指令没有设置限定时,就有可能被黑客滥用。例如,一般用来显示文件内容的/etc/cat指令,如果有了超级用户的权限,黑客就可以用它修改或删除一些重要的文件。7、追踪黑客踪迹:日志管理当用户仔细设定了各种与Linux相关的配置(最常用日志管理选项),并且安装了必要的安全防护工具之后,Linux操作系统的安全性的确大为提高,但是却并不能保证防止那些比较熟练的网络黑客的入侵。在平时,网络管理人员要经常提高警惕,随时注意各种可疑状况,并且按时检查各种系统日志文件,包括一般信息日志、网络连接日志、文件传输日志以及用户登录日志等。在检查这些日志时,要注意是否有不合常理的时间记载。例如:正常用户在半夜三更登录;不正常的日志记录,比如日志只记录了一半就切断了,或者整个日志文件被删除了;用户从陌生的网址进入系统;因密码错误或用户账号错误被摈弃在外的日志记录,尤其是那些一再连续尝试进入失败,但却有一定模式的试错法;非法使用或不正当使用超级用户权限su的指令;重新开机或重新启动各项服务的记录。上述这些问题都需要系统管理员随时留意系统登录的用户状况以及查看相应日志文件,许多背离正常行为的蛛丝马迹都应当引起高度注意。8、横向扩展:综合防御管理防火墙、IDS等防护技术已经成功地应用到网络安全的各个领域,而且都有非常成熟的产品。在Linux系统来说,有一个自带的Netfilter/Iptables防火墙框架,通过合理地配置其也能起到主机防火墙的功效。在Linux系统中也有相应的轻量级的网络入侵检测系统Snort以及主机入侵检测系统LIDS(Linux Intrusion Detection System),使用它们可以快速、高效地进行防护。需要提醒注意的是:在大多数的应用情境下,我们需要综合使用这两项技术,因为防火墙相当于安全防护的第一层,它仅仅通过简单地比较IP地址/端口对来过滤网络流量,而IDS更加具体,它需要通过具体的数据包(部分或者全部)来过滤网络流量,是安全防护的第二层。综合使用它们,能够做到互补,并且发挥各自的优势,最终实现综合防御。9、评测:漏洞追踪及管理Linux作为一种优秀的开源软件,其自身的发展也日新月异,同时,其存在的问题也会在日后的应用中慢慢暴露出来。黑客对新技术的关注从一定程度上来说要高于我们防护人员,所以要想在网络攻防的战争中处于有利地位,保护Linux系统的安全,就要求我们要保持高度的警惕性和对新技术的高度关注。用户特别是使用Linux作为关键业务系统的系统管理员们,需要通过Linux的一些权威网站和论坛上尽快地获取有关该系统的一些新技术以及一些新的系统漏洞的信息,进行漏洞扫描、渗透测试等系统化的相关配套工作,做到防范于未然,提早行动,在漏洞出现后甚至是出现前的最短时间内封堵系统的漏洞,并且在实践中不断地提高安全防护的技能,这样才是一个比较的解决办法和出路。10、保持更新:补丁管理Linux作为一种优秀的开源软件,其稳定性、安全性和可用性有极为可靠的保证,世界上的Linux高手共同维护着个优秀的产品,因而起流通渠道很多,而且经常有更新的程序和系统补丁出现,因此,为了加强系统安全,一定要经常更新系统内核。Kernel是Linux操作系统的核心,它常驻内存,用于加载操作系统的其他部分,并实现操作系统的基本功能。由于Kernel控制计算机和网络的各种功能,因此,它的安全性对整个系统安全至关重要。早期的Kernel版本存在许多众所周知的安全漏洞,而且也不太稳定,只有20x以上的版本才比较稳定和安全(一般说来,内核版本号为偶数的相对稳定,而为奇数的则一般为测试版本,用户们使用时要多留意),新版本的运行效率也有很大改观。在设定Kernel的功能时,只选择必要的功能,千万不要所有功能照单全收,否则会使Kernel变得很大,既占用系统资源,也给黑客留下可乘之机。在Internet上常常有最新的安全修补程序,Linux系统管理员应该消息灵通,经常光顾安全新闻组,查阅新的修补程序。
什么是分布式文件系统?
分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点(可简单的理解为一台计算机)相连。分布式文件系统的设计基于客户机/服务器模式。一个典型的网络可能包括多个供多用户访问的服务器。另外,对等特性允许一些系统扮演客户机和服务器的双重角色。例如,用户可以“发表”一个允许其他客户机访问的目录,一旦被访问,这个目录对客户机来说就像使用本地驱动器一样。
什么是超融合架构?
超融合基础架构(Hyper-Converged Infrastructure,或简称“HCI”)也被称为超融合架构,是指在同一套单元设备(x86服务器)中不仅仅具备计算、网络、存储和服务器虚拟化等资源和技术,而且还包括缓存加速、重复数据删除、在线数据压缩、备份软件、快照技术等元素,而多节点可以通过网络聚合起来,实现模块化的无缝横向扩展(scale-out),形成统一的资源池。
超融合产品和分布式文件系统的区别是什么?
超融合架构一般包括存储模块,虚拟化模块,控制管理模块,数据保护与容灾模块等,而这个存储一般用的就是分布式存储。而分布式存储不一定是分布式文件系统,也可能是分布式块存储。比如SmartX的超融合架构就是基于分布式块存储,还有一些厂商是基于分布式文件存储。
但如果深究分布式块存储的实现技术的时候,我们会发现一些分布式块存储是基于分布式文件系统实现的。大致的原理是:先用分布式文件系统将物理磁盘管理起来,形成一个池(十分类似于Google GFS);从这个池里面创建文件,例如500GB的文件;然后通过块设备网关,例如iSCSI网关,将这个500GB的文件变成500GB的虚拟硬盘(块设备),对外提供服务。
超融合系统架构
使用 Azure Site Recovery 复制设备保护 VMware 虚拟机的更可靠的新方法现已正式发布。 创建新的恢复服务保管库时,默认情况下将选择新式体验。
更改体验 -
在 Azure 门户中打开保管库。
选择“开始”部分下,单击“Site Recovery” 。
单击该页面顶部的横幅。

随即将打开体验选择边栏选项卡。 如果要使用配置服务器,请选择经典体验,然后单击“确定”。 如果不想使用,请关闭该窗格。

备注
请注意,体验类型从新式切换到经典后,不能在同一恢复服务保管库中再次切换。 在保存此更改之前,请确保选择所需的体验。
是否可以迁移到新式体验?
使用经典体验复制的所有 VMware VM 或物理服务器都可以迁移到新式体验。 在此处检查详细信息并按照教程进行操作。
VMware VM 灾难恢复需用到哪些组件?
了解 VMware VM 灾难恢复涉及到的组件。
是否可以使用 Site Recovery 将 VMware VM 迁移到 Azure?
是的。 除了使用 Site Recovery 设置 VMware VM 的完全灾难恢复以外,还可以使用 Site Recovery 将本地 VMware VM 迁移到 Azure。 在此场景中,可将本地 VMware VM 复制到 Azure 存储。 然后从本地故障转移到 Azure。 故障转移后,应用和工作负荷可供使用并在 Azure VM 上运行。 该过程类似于设置完全灾难恢复,不过,在迁移时,无法从 Azure 故障回复。
我的 Azure 帐户是否需要拥有创建 VM 的权限?
如果你是订阅管理员,则已经获得了所需的复制权限。 如果你不是管理员,则需要拥有执行以下操作的权限:
在配置 Site Recovery 时指定的资源组和虚拟网络中创建 Azure VM。
根据配置写入选定的存储帐户或托管磁盘。
详细了解所需权限。
可以复制哪些应用程序?
可以复制 VMware VM 中运行的、符合复制要求的任何应用或工作负荷。
Site Recovery 支持应用程序感知型复制,因此,应用可以故障转移或故障回复到智能状态。
Site Recovery 与 Microsoft 应用程序集成,例如 SharePoint、Exchange、Dynamics、SQL Server 和 Active Directory。 Microsoft 还与 Oracle、SAP、IBM 和 Red Hat 等领先供应商密切合作。
详细了解工作负荷保护。
是否可以在 Azure 上使用来宾 OS 服务器许可证?
可以,Microsoft 软件保障客户可以使用 Azure 混合权益来节省迁移到 Azure 的 Windows Server 计算机的许可成本,或将 Azure 用于灾难恢复。
安全性
Site Recovery 需要对 VMware 服务器拥有哪些访问权限?
Site Recovery 需要访问 VMware 服务器,才能够:
设置运行 Site Recovery 配置服务器的 VMware VM。
自动发现要复制的 VM。
Site Recovery 需要对 VMware VM 拥有哪些访问权限?
若要完成复制,必须在 VMware VM 上安装并运行 Site Recovery 移动服务。 可以手动部署所需的工具,或者在为 VM 启用复制时,指定 Site Recovery 要执行服务的推送安装。
在复制期间,VM 将与 Site Recovery 通信,如下所述:
VM 通过 HTTPS 端口 443 与配置服务器通信,以进行复制管理。
VM 通过 HTTPS 端口 9443 向进程服务器发送复制数据。 (此设置可修改。)
如果启用了多 VM 一致性,则 VM 通过端口 20004 相互通信。
复制数据是否会发送到 Site Recovery?
不会。Site Recovery 不会拦截复制的数据,也没有 VM 上运行的组件的任何相关信息。 复制数据在 VMware 虚拟机监控程序与 Azure 存储之间交换。 站点恢复并不具有拦截该数据的能力。 只有协调复制与故障转移所需的元数据会发送到站点恢复服务。
Site Recovery 已通过 ISO 27001:2013、27018、HIPAA 和 DPA 认证, 目前正在接受 SOC2 和 FedRAMP JAB 评估。
定价
如何计算 VMware 灾难恢复的大约费用?
可以使用定价计算器来估算使用 Site Recovery 时的费用。
若要对费用进行详细的估算,请运行适用于 VMware 的部署规划器工具,并使用成本估算报告。
复制到存储的费用与直接复制到托管磁盘的费用是否有任何差别?
托管磁盘的收费与存储帐户略有不同。 详细了解托管磁盘的定价。
复制到常规用途 v2 存储帐户时,开销是否有什么不同?
你通常会发现 GPv2 存储帐户产生的事务成本增加,因为 Azure Site Recovery 的事务量很大。 详细了解如何估算费用。
移动服务
在哪里可以找到移动服务安装程序?
安装程序位于配置服务器上的 %ProgramData%\ASR\home\svsystems\pushinstallsvc\repository 文件夹中。
如何安装移动服务?
在要复制的每个 VM 上,使用以下多种方法之一安装该服务:
推送安装
从 UI 或 PowerShell 手动安装
使用 Configuration Manager 等部署工具进行部署
托管磁盘
Site Recovery 将数据复制到何处?
Site Recovery 将本地 VMware VM 和物理服务器复制到 Azure 中的托管磁盘。
Site Recovery 进程服务器将复制日志写入到目标区域中的缓存存储帐户。
这些日志用于在带有 asrseeddisk 前缀的 Azure 托管磁盘上创建恢复点。
故障转移时,将使用所选的恢复点来创建新的目标托管磁盘。 此托管磁盘附加到 Azure 中的 VM。
以前已复制到存储帐户的 VM(2019 年 3 月以前)不受影响。
是否可将新计算机复制到存储帐户?
否。 从 2019 年 3 月开始,在 Azure 门户中只能复制到 Azure 托管磁盘。
只能使用 PowerShell(AzRecoveryServices 模块版本 145)或 REST API(版本 2018-01-10 或 2016-08-10)将新 VM 复制到存储帐户。 了解如何使用 PowerShell 命令来设置复制。
复制到托管磁盘的优点是什么?
了解 Site Recovery 如何使用托管磁盘简化灾难恢复。
计算机受保护后,是否可以更改托管磁盘类型?
是的,可以轻松针对正在进行的复制更改托管磁盘的类型。 在更改类型之前,请确保未在托管磁盘上生成任何共享访问签名 URL:
在 Azure 门户中转到“托管磁盘”资源,并检查“概述”边栏选项卡上是否出现了共享访问签名 URL 横幅。
如果出现了横幅,请选择它以取消正在进行的导出。
在接下来的几分钟内更改磁盘类型。 如果更改了托管磁盘类型,需要等待 Azure Site Recovery 生成全新的恢复点。
对将来的任何测试故障转移或故障转移使用新恢复点。
是否可将复制目标从托管磁盘切换为非托管磁盘?
否。 不支持从托管磁盘切换为非托管磁盘。
复制
复制的 VM 要满足哪些要求?
详细了解 VMware VM 和物理服务器的支持要求。
可以多久复制到 Azure 一次?
将 VMware VM 复制到 Azure 时,复制是持续性的。
是否可以扩展复制?
不支持扩展或链式复制。 请在反馈论坛中请求此功能。
如何跟踪初始复制/同步的进度?
此功能最近已应用于 Site Recovery 服务。 将 Site Recovery 基础结构(配置服务器、横向扩展进程服务器)和移动代理更新至版本 936 或更高版本,以获取准确的详细信息。 有关如何跟踪进度的详细信息,请参阅此处。
是否可以执行脱机初始复制?
不支持脱机复制。 请在反馈论坛中请求此功能。
什么是 asrseeddisk?
对于每个源磁盘,数据将复制到 Azure 中的托管磁盘。 此磁盘带有 asrseeddisk 前缀。 其中存储了源磁盘的副本和所有恢复点快照。
是否可从复制中排除磁盘?
是的,可以排除磁盘。
是否可以复制包含动态磁盘的 VM?
可以复制动态磁盘。 操作系统磁盘必须是基本磁盘。
如果我使用复制组实现多 VM 一致性,是否可以将新 VM 添加到现有复制组?
是的,可以在为新 VM 启用复制时将这些 VM 添加到现有复制组。 但是:
开始复制后,无法将 VM 添加到现有的复制组。
无法为现有的 VM 创建复制组。
是否可以通过添加磁盘或调整磁盘大小来修改正在复制的 VM?
对于从 VMware 复制到 Azure,可以修改源 VM 的磁盘大小。 如果要添加新磁盘,则必须为 VM 添加磁盘并重新启用保护。
是否可以在不影响进行中复制的情况下将本地计算机迁移到新的 vCenter Server?
请参阅我们的指南将计算机迁移到新 vCenter
是否可以复制到在其上配置了虚拟网络(具有 Azure 防火墙)的缓存或目标存储帐户?
否,Site Recovery 不支持复制到虚拟网络上的 Azure 存储。
生成崩溃一致性恢复点的频率是多少?
Site Recovery 每隔 5 分钟生成一次崩溃一致性恢复点。
组件升级
我的移动服务代理或配置服务器版本较低,并且升级失败。 我该怎么办?
Site Recovery 遵循 N-4 支持模型。 详细了解如何从很低的版本升级。
在哪里可以找到 Azure Site Recovery 的发行说明和更新汇总?
了解新的更新并获取汇总信息。
在哪里可以找到有关灾难恢复到 Azure 的升级信息?
了解如何升级。
每次升级后是否都需要重新启动源计算机?
建议每次升级后重新启动,但不一定非要这样做。 了解详细信息。
配置服务器
配置服务器的作用是什么?
配置服务器运行本地 Site Recovery 组件,包括:
配置服务器本身。 该服务器协调本地组件与 Azure 之间的通信,并管理数据复制。
充当复制网关的进程服务器。 此服务器:
接收复制数据。
通过缓存、压缩和解密来优化数据。
将数据发送到 Azure 存储。 进程服务器还会在 VM 上推送安装移动服务,并执行本地 VMware VM 的自动发现。
处理从 Azure 进行故障回复期间生成的复制数据的主目标服务器。
详细了解配置服务器组件和流程。
要在哪个位置设置配置服务器?
需要为配置服务器提供一个高度可用的本地 VMware VM。 对于物理服务器灾难恢复,请在物理计算机上安装配置服务器。
配置服务器需要满足哪些条件?
请查看先决条件。
是否可以手动设置配置服务器,而不使用模板进行设置?
我们建议使用最新版本的开放虚拟化格式 (OVF) 模板来创建配置服务器 VM。 如果你无法使用该模板(例如,无法访问 VMware 服务器),请从门户下载安装程序文件并设置配置服务器。
是否可将配置服务器复制到多个区域?
否。 若要复制到多个区域,需在每个区域中设置一个配置服务器。
是否可以在 Azure 中托管配置服务器?
虽然可以这样做,但运行配置服务器的 Azure VM 需要与本地的 VMware 基础结构和 VM 通信。 这种通信可能会增大延迟并影响正在进行的复制。
如何更新配置服务器?
了解如何更新配置服务器。
可以在 Azure 更新页中找到最新的更新信息。
可从门户下载最新版本。 也可以直接从 Microsoft 下载中心下载最新版本的配置服务器。
如果你的版本比当前版本低 4 个版本,请参阅支持声明获取升级指导。
是否应备份配置服务器?
建议定期备份配置服务器。
若要成功进行故障回复,要故障回复的 VM 必须位于配置服务器数据库中。
配置服务器必须正在运行且处于连接状态。
详细了解常见的配置服务器管理任务。
设置配置服务器时,是否可以手动下载并安装 MySQL?
是的。 请下载 MySQL 并将其置于 C:\Temp\ASRSetup 文件夹中。 然后手动安装它。 设置配置服务器 VM 并接受条款后,MySQL 在“下载并安装”中将列出为“已安装”。
我是否可以避免下载 MySQL 但让 Site Recovery 安装它?
是的。 请下载 MySQL 安装程序并将其置于 C:\Temp\ASRSetup 文件夹中。 设置配置服务器 VM 时,请接受条款,然后选择“下载并安装”。 门户将使用你添加的安装程序来安装 MySQL。
是否可以将配置服务器 VM 用于任何其他项?
否。 请仅将 VM 用于配置服务器。
是否可以克隆配置服务器并将其用于业务流程?
否。 请设置新配置服务器以避免注册问题。
是否可以更改配置服务器注册到的保管库?
否。 将某个保管库关联到配置服务器后,无法更改该保管库。 了解如何将配置服务器注册到不同的保管库。
是否可以将同一配置服务器同时用于 VMware VM 和物理服务器的灾难恢复?
可以,但请注意,物理计算机仅可故障回复到 VMware VM。
在哪里可以下载配置服务器的密码?
了解如何下载通行短语。
在哪里可以下载保管库注册密钥?
在“恢复服务保管库”中,选择“Site Recovery 基础结构”>“管理”中的“配置服务器”。 然后在“服务器”中,选择“下载注册密钥”以下载保管库凭据文件。
是否可以使用单个配置服务器来保护多个 vCenter 实例?
是,单个配置服务器可以保护多个 vCenter 中的 VM。 对于可以添加到配置服务器的 vCenter 实例的数量没有限制,但是对于单个配置服务器可以保护的 VM 数量的限制确实适用。
单个配置服务器是否可以保护 vCenter 中的多个群集?
是,Azure Site Recovery 可以保护不同群集上的 VM。
进程服务器
为何启用复制时无法选择进程服务器?
9\24 和更高版本中的更新现在会在启用复制时显示进程服务器的运行状况。 此功能有助于避免发生进程服务器限制,并尽量避免使用不正常的进程服务器。
如何将进程服务器更新到 924 或更高版本,以获取准确的运行状况信息?
从版本 924 开始添加了更多警报来指示进程服务器的运行状况。 将 Site Recovery 组件更新到 924 或更高版本,以生成所有警报。
如何确保进程服务器的高可用性?
通过配置多个进程服务器,可以灵活地将受保护的计算机从运行不正常的进程服务器移动到正常工作的进程服务器。 若要将计算机从一个进程服务器移动到另一个进程服务器,则必须通过此处定义的步骤显式/手动启动:在进程服务器之间移动 VM。
故障转移和故障回复
是否可以使用本地进程服务器进行故障回复?
我们强烈建议在 Azure 中创建一个进程服务器用于故障回复,以免出现数据传输延迟。 此外,如果已在配置服务器将源 VM 网络与面向 Azure 的网络相隔离,则必须使用 Azure 中创建的进程服务器进行故障回复。
是否可以在故障转移之后保留 IP 地址?
是的,可以在故障转移之后保留 IP 地址。 在故障转移之前,请确保在 VM 的“计算和网络”设置中指定目标 IP 地址。 此外,故障转移时请关闭计算机,以免故障回复期间发生 IP 地址冲突。
在故障转移之前是否可以更改目标 VM 大小或 VM 类型?
是的,在故障转移之前的任何时间,都可以更改 VM 的类型或大小。 在门户中使用已复制的 VM 的“计算和网络”设置即可。
可以恢复到哪个最早的时间点?
对于 VMware 到 Azure 的复制,可以使用的最早恢复点是 15 天。
如何修剪恢复点?
每隔 5 分钟生成一次崩溃一致性恢复点。 应用一致性快照根据你输入的输入频率生成。 对于超出两小时的情况,可能会根据你输入的保留期来修剪恢复点。 下面是场景:
保留期输入 修剪机制
0 天 未保存恢复点。 只能故障转移到最新点
1 天 过去两小时之前每小时保存一个恢复点
2 - 7 天 过去两小时之前每两个小时保存一个恢复点
8 - 15 天 过去两小时之前每两个小时保存一个恢复点,持续 7 天。 该时段过后,每四小时保存一个恢复点。
即使输入的应用一致性快照频率较低,也会根据上面提到的持续时间删除应用一致性快照。
恢复点保留期的增加是否会增加存储费用?
是的。 例如,如果将保留期从 1 天增加到 3 天,Site Recovery 会额外保存恢复点 2 天。添加的时间会导致存储更改。 之前,它每小时保存恢复点 1 次,持续 1 天。 现在,它每 2 小时保存恢复点 1 次,持续 3 天。 请参阅修剪恢复点。 因此,保存了 12 个额外的恢复点。 例如,如果单个恢复点包含 10 GB 的增量更改,每 GB 费用为 016 美元/月,则每月会产生 160 美元 × 12 的额外费用。
故障转移后如何访问 Azure VM?
故障转移后,可以通过安全的 Internet 连接、站点到站点 *** 或 Azure ExpressRoute 来访问 Azure VM。 若要进行连接,必须做好一些准备工作。 了解详细信息。
故障转移的数据是否有复原能力?
Azure 具有复原能力。 Site Recovery 能够根据 Azure 服务级别协议 (SLA) 故障转移到辅助 Azure 数据中心。 发生故障转移时,我们会确保元数据和保管库保留在为保管库选择的同一地理区域中。
故障转移是自动发生的吗?
故障转移不是自动的。 可以在门户中单击一下鼠标来启动故障转移,或者使用 PowerShell 来触发故障转移。
是否可以故障回复到不同位置?
是的。 故障转移到 Azure 后,如果原始位置不可用,可以故障回复到不同的位置。 了解详细信息。
为何需要配合专用对等互连使用 *** 或 ExpressRoute 进行故障回复?
从 Azure 故障回复时,Azure 中的数据将复制回到本地 VM,这需要提供专用访问权限。
自动化和脚本
是否可以使用脚本设置复制?
是的。 可以使用 REST API、PowerShell 或 Azure SDK 将 Site Recovery 工作流自动化。 了解详细信息。
性能和容量
是否可以限制复制带宽?
是的。 了解详细信息。
后续步骤
查看支持要求。
设置 VMware 到 Azure 的复制。
建议的内容
设置源设置,以便使用 Azure Site Recovery 将 VMware 灾难恢复到 Azure - Azure Site Recovery
本文介绍如何设置本地环境,以便使用 Azure Site Recovery 将 VMware VM 复制到 Azure。
在 Azure Site Recovery 中准备 VMware VM 复制目标 - Azure Site Recovery
本文介绍如何准备目标 Azure 环境,以便将 VMware VM 复制到 Azure。
VMware 灾难恢复 - Azure Site Recovery 中的配置服务器要求。 - Azure Site Recovery
本文介绍了为了使用 Azure Site Recovery 执行 VMware 到 Azure 的灾难恢复而部署配置服务器时的支持和要求。
在 Azure Site Recovery(新版)中切换复制设备 - Azure Site Recovery
本文介绍了在 Azure Site Recovery(新版)中将 VMware VM 复制到 Azure 时,如何在不同的复制设备之间进行切换

显示更多
杉岩海量对象存储MOS,针对海量非结构化数据存储的最优化解决方案,采用去中心化、分布式技术架构,支持百亿级文件及EB级容量存储,
具备高效的数据检索、智能化标签和分析能力,轻松应对大数据和云时代的存储挑战,为企业发展提供智能决策。
1、容量可线性扩展,单名字空间达EB级
SandStone MOS可在单一名字空间下实现海量数据存储,支持业务无感知的存储服务器横向扩容,为爆炸式增长的视频、音频、、文档等不同类型的非结构化数据提供完美的存储方案,规避传统NAS存储的单一目录或文件系统存储空间无法弹性扩展难题
2、海量小文件存储,百亿级文件高效访问
SandStone MOS基于完全分布式的数据和元数据存储架构,为海量小文件存储而生,将企业级NAS存储的千万文件量级提升至互联网规模的百亿级别,帮助企业从容应对几何级增长的海量小文件挑战。
3、中心灵活部署,容灾汇聚分发更便捷
SandStone MOS支持多数据中心灵活部署,为企业数据容灾、容灾自动切换、多分支机构、数据就近访问等场景提供可自定义的灵活解决方案,帮助企业实现跨地域多活容灾、数据流转、就近读写等,助力业务高速发展。
4、支持大数据和AI,统一数据存储和分析
SandStone MOS内置文件智能化处理引擎,实现包括语音识别、OCR识别、文件格式转换等批量处理功能,结合标签检索能力还可实现语音、证件照片检索,从而帮助企业更好地管理非结构化数据。同时,SandStone MOS还支持与Hadoop、Spark等大数据分析平台对接,一套存储即可满足企业数据存储、管理和挖掘的需求。
开源软件已经成为许多大型网站的基本组成部分,随着这些网站的逐步壮大,他们的网站架构和一些指导原则也出现在开发者们的面前,给予切实有用的指导和帮助。本文旨在介绍一些核心问题以及通过构建模块来制作大型网站,实现最终目标。这篇文章主要侧重于Web系统,并且也适用于其他分布式系统。Web分布式系统设计的原则构建并运营一个可伸缩的Web站点或应用程序到底指的是什么在最初,仅是通过互联网连接用户和访问远程资源。和大多数事情一样,当构建一个Web服务时,需要提前抽出时间进行规划。了解大型网站创建背后的注意事项以及权衡可能会给你带来更加明智的决策,当你在创建小网站时。下面是设计大型Web系统时,需要注意的一些核心原则:1可用性2性能3可靠性4可扩展5易管理6成本上面的这些原则给设计分布式Web架构提供了一定的基础和理论指导。然而,它们也可能彼此相左,例如实现这个目标的代价是牺牲成本。一个简单的例子:选择地址容量,仅通过添加更多的服务器(可伸缩性),这个可能以易管理(你不得不操作额外的服务器)和成本作为代价(服务器价格)。无论你想设计哪种类型的Web应用程序,这些原则都是非常重要的,甚至这些原则之间也会互相羁绊,做好它们之间的权衡也非常重要。基础当涉及到系统架构问题时,这几件事情是必须要考虑清楚的:什么样的模块比较合适如何把它们组合在一起如何进行恰当地权衡在扩大投资之前,它通常需要的并不是一个精明的商业命题,然而,一些深谋远虑的设计可以帮你在未来节省大量的时间和资源。讨论的重点几乎是构建所有大型Web应用程序的核心:服务、冗余、分区和故障处理能力。这里的每个因素都会涉及到选择和妥协,特别是前面所讨论的那些原则。解释这些核心的最佳办法就是举例子。托管应用程序有时,你会在线上传,而一些大型网站需要托管和传送大量的,这对于构建一个具有成本效益、高可用性并具有低延时(快速检索)的架构是一项挑战。在一个系统中,用户可以上传到一个中央服务器里,通过网络连接或API对这些进行请求,就像Flickr或者Picasa。简单点,我们就假设这个应用程序只包含两个核心部分:上传(写)和检索。上传时最好能够做到高效,传输速度也是我们最关心的,当有人向发出请求时(例如是一个Web页面或其他应用程序)。这是非常相似的功能,提供Web服务或内容分发网络(一个CDN服务器可以在许多地方存储内容,所以无论是在地理上还是物理上都更加接近用户,从而导致更快的性能)边缘服务器。该系统需要考虑的其他重要方面:1存储的数量是没有限制的,所以存储应具备可伸缩,另外计算也需要考虑2下载/请求需要做到低延迟3用户上传一张,那么就应该始终在那里(数据的可靠性)4系统应该易于维护(易管理)5由于托管不会有太高的利润空间,所以系统需要具备成本效益图1是个简化的功能图 图1 托管系统的简化结构图在这个例子中,系统必须具备快速、数据存储必须做到可靠和高度可扩展。构建一个小型的应用程序就微不足道了,一台服务器即可实现托管。如果这样,这篇文章就毫无兴趣和吸引力了。假设我们要做的应用程序会逐渐成长成Flickr那么大。服务当我们考虑构建可伸缩的系统时,它应有助于解耦功能,系统的每个部分都可以作为自己的服务并且拥有清晰的接口定义。在实践中,这种系统设计被称作面向服务的体系结构(SOA)。对于此类系统,每个服务都有它自己的独特功能,通过一个抽象接口可以与外面的任何内容进行互动,通常是面向公众的另一个服务 API。把系统分解成一组互补性的服务,在互相解耦这些操作块。这种抽象有助于在服务、基本环境和消费者服务之间建立非常清晰的关系。这种分解可以有效地隔离问题,每个块也可以互相伸缩。这种面向服务的系统设计与面向对象设计非常相似。在我们的例子中,所有上传和检索请求都在同一台服务器上处理。然而,因为系统需要具备可伸缩性,所以把这两个功能打破并集成到自己的服务中是有意义的。快进并假设服务正在大量使用;在这种情况下,很容易看到写的时间对读时间有多大影响(他们两个功能在彼此竞争共享资源)。根据各自体系,这种影响会是巨大的。即使上传和下载速度相同(这是不可能的,对于大多数的IP网络来说,下载速度:上传速度至少是3:1),通常,文件可以从缓存中读取,而写入,最终是写到磁盘中(也许在最终一致的情况下,可以被多写几次)。即使是从缓存或者磁盘(类似SSD)中读取,数据写入都会比读慢(Pole Position,一个开源DB基准的开源工具和结果)。这种设计的另一个潜在问题是像Apache或者Lighttpd这些Web服务器通常都会有一个并发连接数上限(默认是500,但也可以更多),这可能会花费高流量,写可能会迅速消掉所有。既然读可以异步或利用其他性能优化,比如gzip压缩或分块传输代码,Web服务可以快速切换读取和客户端来服务于更多的请求,超过每秒的最大连接数(Apache的最大连接数设置为500,这种情况并不常见,每秒可以服务几千个读取请求)。另一方面,写通常倾向于保持一个开放的链接进行持续上传,所以,使用家庭网络上传一个1 MB的文件花费的时间可能会超过1秒,所以,这样的服务器只能同时满足500个写请求。 图2:读取分离规划这种瓶颈的一个非常好的做法是把读和写进行分离,如图2所示。这样我们就可以对它们单独进行扩展(一直以来读都比写多)但也有助于弄明白每个点的意思。这种分离更易于排除故障和解决规模方面问题,如慢读。这种方法的优点就是我们能够彼此独立解决问题——在同种情况下,无需写入和检索操作。这两种服务仍然利用全球语料库的图像,但是他们可以自由地优化性能和服务方法(例如排队请求或者缓存流行——下面会介绍更多)。从维护和成本角度来看,每一个服务都可以根据需要独立进行扩展,但如果把它们进行合并或交织在一起,那么有可能无意中就会对另一个性能产生影响,如上面讨论的情景。当然,如果你有两个不同的端点,上面的例子可能会运行的很好(事实上,这非常类似于几个云存储供应商之间的实现和内容分发网络)。虽然有很多种方法可以解决这些瓶颈,但每个人都会有不同的权衡,所以采用适合你的方法才是最重要的。例如,Flickr解决这个读/写问题是通过分发用户跨越不同的碎片,每个碎片只能处理一组用户,但是随着用户数的增加,更多的碎片也会相应的添加到群集里(请参阅Flickr的扩展介绍)。在第一个例子中,它更容易基于硬件的实际用量进行扩展(在整个系统中的读/写数量),而Flickr是基于其用户群进行扩展(but forces the assumption of equal usage across users so there can be extra capacity)。而前面的那个例子,任何一个中断或者问题都会降低整个系统功能(例如任何人都没办法执行写操作),而Flickr的一个中断只会影响到其所在碎片的用户数。在第一个例子中,它更容易通过整个数据集进行操作——例如,更新写服务,包括新的元数据或者通过所有的元数据进行搜索——而 Flickr架构的每个碎片都需要被更新或搜索(或者需要创建一个搜索服务来收集元数据——事实上,他们就是这样做的)。当谈到这些系统时,其实并没有非常正确的答案,但有助于我们回到文章开始处的原则上看问题。确定系统需求(大量的读或写或者两个都进行、级别并发、跨数据查询、范围、种类等等),选择不同的基准、理解系统是如何出错的并且对以后的故障发生情况做些扎实的计划。冗余为了可以正确处理错误,一个Web架构的服务和数据必须具备适当的冗余。例如,如果只有一个副本文件存储在这台单独的服务器上,那么如果这台服务器出现问题或丢失,那么该文件也随即一起丢失。丢失数据并不是什么好事情,避免数据丢失的常用方法就是多创建几个文件或副本或冗余。同样也适用于服务器。如果一个应用程序有个核心功能,应确保有多个副本或版本在同时运行,这样可以避免单节点失败。在系统中创建冗余,当系统发生危机时,如果需要,可以消除单点故障并提供备份或备用功能。例如,这里有两个相同的服务示例在生产环境中运行,如果其中一个发生故障或者降低,那么该系统容错转移至那个健康的副本上。容错转移可以自动发生也可以手动干预。服务冗余的另一重要组成部分是创建一个无共享架构。在这种体系结构中,每个节点都能相互独立运行,并且没有所谓的中央“大脑”管理状态或协调活动其他节点。这对系统的可扩展帮助很大,因为新节点在没有特殊要求或知识的前提下被添加。然而,最重要的是,这些系统是没有单点故障的,所以失败的弹性就更大。例如在我们的服务器应用程序中,所有的在另一个硬件上都有冗余副本(理想情况下是在不同的地理位置,避免在数据中心发生一些火灾、地震等自然事故),服务去访问将被冗余,所有潜在的服务请求。(参见图3:采用负载均衡是实现这点的最好方法,在下面还会介绍更多方法) 图3 托管应用程序冗余分区数据集有可能非常大,无法安装在一台服务器上。也有可能这样,某操作需要太多的计算资源、性能降低并且有必要增加容量。在这两种情况下,你有两种选择:纵向扩展或横向扩展。纵向扩展意味着在单个服务器上添加更多的资源。所以,对于一个非常大的数据集来说,这可能意味着添加更多(或更大)的硬件设备,来使一台服务器能容下整个数据集。在计算操作下,这可能意味着移动计算到一个更大的服务器上,拥有更快的CPU或更大的内存。在各种情况下,纵向扩展可以通过提升单个资源的处理能力来完成。横向扩展在另一方面是添加更多的节点,在大数据集下,这可能会使用第二服务器来存储部分数据集,对于计算资源来说,这意味着分割操作或跨节点加载。为了充分利用横向扩展,它应作为一种内在的系统架构设计原则,否则修改或拆分操作将会非常麻烦。当谈到横向扩展时,最常见的做法是把服务进行分区或碎片。分区可以被派发,这样每个逻辑组的功能就是独立的。可以通过地理界限或其他标准,如非付费与付费用户来完成分区。这些方案的优点是他们会随着容量的增加提供一个服务或数据存储。在我们的服务器案例中,用来存储的单个文件服务器可能被多个文件服务器取代,每个里面都会包含一套自己独特的图像。(见图4)这种架构将允许系统来填充每一个文件/服务器,当磁盘填满时会添加额外的服务器。这样的设计需要一个命名方案,用来捆绑文件名到其相应的服务器上。图像名字可以形成一个一致的哈希方案并映射到整个服务器上;或者给每张分配一个增量ID,当客户端对发出请求时,检索服务只需要检索映射到每个服务器上(例如索引)的ID。 图4 托管应用程序冗余和分区当然,跨越多个服务器对数据或功能进行分区还是有许多挑战的。其中的关键问题是数据本地化。在分布式系统中,数据操作或计算点越接近,系统性能就会越好。因此,它也可能是个潜在问题,当数据分散在多个服务器上时。有时数据不是在本地,那么就要迫使服务器通过网络来获取所需的信息,这个获取的过程就会设计到成本。另一潜在问题是不一致。当这里有多个服务对一个共享资源执行读写操作时,潜在可能会有另一个服务器或数据存储参与进来,作为竞选条件——一些数据需要更新,但是读的优先级高于更新——在这种情况下,数据就是不一致的。例如在托管方案中,有可能出现的不一致是:如果一个客户端发送更新“狗”请求,进行重新命名,把“Dog”改成“Gizmo”,但同时,另一个客户端正在读这张。在这种情况下,标题就是不清楚的。“Dog”或“Gizmo” 应该被第二个客户端接收。当然,在进行数据分区时会产生一些障碍,但是分区允许把每个问题拆分到管理群里——通过数据、负载、使用模式等。这样对可扩展和易管理都是有帮助的,但也不是没有风险的。这里有很多方式来降低风险和故障处理;然而,为了简便起见,并未在本文中详细说明,如果你有兴趣,可以访问我的博客。总结以上介绍的都是设计分布式系统需要考虑的核心要素。可用性、性能、可靠性、可扩展、易管理、成本这几个原则非常重要,但在实际应用中可能会以牺牲某个原则来实现另外一个原则,在这个过程中就要做好权衡工作,做到因时制宜。在下面的构建分布式系统实战中,我们将会深入介绍如何设计可扩展的数据访问,包括负载均衡、代理、全局缓存、分布式缓存等。英文地址:DrDobb's文:CSDN
在国内,服务器整合已经有很多成功的应用案例。随着云计算和虚拟化步伐的日益加速,更多尚未进行服务器整合的客户也逐渐开始关注这一基础架构解决方案。和全球许多企业的IT部门一样,国内的IT应用也经历过一段服务器硬件设备的高速扩张期。特别是在2005年左右,随着单位计算价格大幅下降,以及服务器供应商的同质化价格竞争,使得服务器采购价格变得极为低廉。而且由于国内许多企业的财务模式,为每个部门的每个应用建立独立的系统是非常常见的事情。从2007年开始,我们就不断发现IT硬件支出在整个IT开销中所占比率日益减少,而机房资源,能耗等隐性成本迅速递增。计算资源可以带来的优势是不言而喻的,除了可以消除上述隐性成本外,对国内用户而言,很重要的一点是可以更加迅速地面对多变的商业环境。原来的系统建设模式一般是内部预算申请、立项、采购、到货、安装、测试、上线一般都会延续3个月甚至更长的时间。而如何可以实现完全的资源池化,更易于整个系统资源的监控、预测和调配,以及减少那些次要应用所占的计算资源,释放出更多的处理能力。同时,如果每台服务器的资源需求峰值不在同一时刻发生,还可以进行错峰整合。比如一些财务系统一般仅在月末有大交易量发生,可以在这时降低其它不是核心应用的响应速度。在服务器虚拟化方式上,有横向和纵向两种模式。我们目前更多地关注于横向扩展模式,即将大量小型服务器整合在一个计算池中,按需分配资源。而其实纵向扩展的方式在国内亦有很大应用场合。这里将两者的优劣和适用场景略做介绍。横向扩展目前最多的做法是通过VMware等虚拟化软件,在已有硬件平台上搭建一个虚拟层,在其上运行操作系统及应用程序。这种方式可以充分利用用户已有的系统资源,在有些情况下,通过相应的系统分析软件(如VMwareROITCO等)分析整合后,不需额外购买任何服务器设备,就可以获取更大的计算资源。但这种方式也不是万能的,国内有些客户常会有这样一个设想,即利用原本的2台服务器(每台上面运行2颗处理器)来运行一个需要4颗处理器的应用程序,这种想法在横向的虚拟化方式上得不到支持。(高性能计算应用例外)此外,这种虚拟化整合方式也会带来一些隐性成本,例如整合后出现故障如何快速找到供应商提供服务响应,国内不少x86架构的服务器一般的使用周期是5年,而超过3年的保修期后用户需要支付设备供应商不小的维护费用,加上额外虚拟化软件的咨询、部署和维护费用,横向扩展的总体拥有成本不一定低于纵向扩展的虚拟化整合方式。而且,横向扩展的方式需要将目前的应用环境做大规模迁移。这对用户来说也不是一项愿意轻易尝试的工作。纵向扩展是指将原本多台设备上的应用迁移到一台高端设备上,例如将原本4台2路的服务器整合到1台8路的服务器上。这种方式所带来的最大好处在于提升了管理性,这样在故障发生时就可以更高地定位故障发生点;同时降低了服务器总体数量。而且纵向扩展可以更为安全地将已有应用迁移到新的高端平台上,不会出现因为规划错误而引发资源紧张的情况。纵向扩展的劣势在于需要额外采购的大型服务器,这对于企业而言就是一笔开销,特别是在有大量服务器需要整合时。更好的一种做法是用户先对已有的应用进行充分评估(不是简单运行资源分析软件)。将应用分为两类,关键的核心应用,如财务、计费、客户关系等系统,和非关键应用,如邮件、网络门户等(对于不同类型的企业分类不同)。将核心应用部署在单独的服务器上以确保运行性能,并可以考虑部署集群环境。而将非核心也能够用运行在使用时间较长的计算池上,通过虚拟化软件的容错性确保系统不会宕机。在这一过程中,已有设备的使用状况,故障情况和服务器供应商维保期也是需要考虑的因素。
0条评论