计算机内部数据扩展操作分为
向上扩展和横向扩展。
向上扩展,买更好的服务器,这种方式比较简单,一般情况下向上扩展就可以解决问题,但是如果代价太大了规格越高的硬件需要花费的钱越多,就不可取了。而且向上扩展总有极限的。
横向扩展是通过副本读写分离、垂直切分,水平切分的方式,把不同的数据放在不同的节点物理部署的MySQL实例中。
导语大数据技能是指从各种各样类型的数据中,快速获得有价值信息的才能,也是大数据工程师必须具备的。大数据是指无法在必定时间内用惯例软件东西对其内容进行抓取、管理和处理的数据调集,那么大数据工程师利用大数据平台作业,优势何在呢一起来看看吧。
1、横向扩展
大数据技能呈现之初所要解决的问题就是数据存储与计算,近年来跟着数据量发生速度越来越快,传统渠道存储与计算才能遇到瓶颈,而大数据渠道是分布式架构,理论上是能够无限扩展的,所以其能更好的适应年代的开展。
2、资源同享
企业经过运用单一集群,能够化零为整,整合一切可用服务器资源,并一致对外提供一切的才能,能够完成细粒度的资源调度机制。而且只需维护一个集群,降低运维本钱。
3、数据同享
运用单一存储架构,能够将企业内部一切数据会集在一个集群中,便利进行各种事务数据的整合运用,从而充分利用大数据技能全量数据剖析的优势。
4、服务同享
经过一致服务架构,可将一套一致服务设计规则应用到一切的服务完成上,例如一张表数据能够以文件方式同享也能以接口方式接口进行同享,咱们进行一致之后各个部门能够以相同办法进行调用运用,避免烟囱式架构,直接削减重复开发本钱。
5、安全保证
经过一致安全架构,在单一集群架构基础上完成细粒度的资源阻隔,对不同人员进行不同程度的授权。
关于大数据平台优势就和大家分享到这里了,希望对想要成为大数据工程的人员能有所帮助,想要学习更多大数据相关内容,欢迎大家继续学习,有问题也可以前来咨询哦!
很早之前企业可能通过购买服务器实现横向扩展,来满足业务流量不断增长的需求。
这种方式虽然在一定程度上解决了一部分问题,当时成本及其昂贵。
1节约成本
阿里很早之前随着业务爆发式增长,购买了很多高性能设备仍无法解决问题,最终决定去IOE,通过自研+云计算的方式,最终解决问题,这其中少不了虚拟化的整体解决方案。随着当前公有云、私有云的解决方案的火爆,各种虚拟化技术也层出不穷,如vmwar、docker、openstack都在底层扮演者重要角色。
2快速交付
当前软件开发讲求高效的交付,通过频繁的版本迭代来满足用户需求。如果通过传统的交付流程:采购、上架、部署、交付,中间环节耗费太多精力,最终导致产品无法及时性交付。在此虚拟化技术给快速交付带来了希望,通过可靠的技术手段,可以在秒级或分钟级实现产品的快速交付,让用户能够优先体验到产品,从而带来用户增长。
3效率提升
其实虚拟机带来的远不止这些,还有开发、运维、测试各部门之间的催化作用,带来生生效率的提升。例如通过虚拟化,运维可以给开发、测试快速部署隔离的测试环境,在上线前通过充分的测试,来避免产品bug。注意这是在不增加成本的前提下就可以做到的,这在没有虚拟化前无法想象。
以上是虚拟化给企业带来的最明显的变化,当然还远不止这些,希望我的回答对你有帮助。
虚拟化可以减少企业成本,提高资源利用率。话是这样说,但具体是如何表现,下面给你三个图,你就看得出来了:
物理机、虚拟机、容器的区别:
一、物理机
二、虚拟机
三、容器
简单说来,物理机:资源可用性比较低,当然你可以放多个应用在上面,但如果是多个人管,那管理不方便。如果不同应用要用不同操作系统,要求同一个对外端口,那就无法共同一台物理机虚拟机:可以在一台物理机上建多个虚拟机,这样就比物理机方便多,当然 在虚拟机上性能稍微差一点,但目前的技术,已经做得非常好了。
容器:大家会发现,采用虚拟机技术,每个虚拟机还要跑自己的操作系统,而且分配硬盘空间可能用不完,那就造成浪费,所以采用容器技术,只需要跑一个操作比较重的操作操作系统,各个容器跑在一个很轻量的操作系统上,这个可以省好多CPU、内存等资源,共享硬盘空间、网络可以充分利用。
从上面三图可以看出,要实现容器技术,可以在物理机上先建虚拟机,再建容器,虽然这多一个中间环节,性能损失一点,但比较符合大家逐步采用容器化策略。当然更好的,是在物理机上直接建容器技术
虚拟化不是IT趋势。它也不是新事物,但在许多组织中却是新事物,因为各种规模的公司都投资于虚拟化技术以获取其许多好处:节能,服务器和桌面配置,减少物理服务器,增加正常运行时间和可用性,更好的灾难恢复…而这样的例子不胜枚举。
切换到虚拟化意味着服务器上发生的工作负载没有绑定到特定的物理硬件,并且多个虚拟工作负载可以在同一台机器上同时发生。虚拟化的直接好处包括更高的数据中心服务器利用率和更低的成本,但也有更先进的优势。
服务器虚拟化已被证明是IT管理的革命性技术解决方案,它提供了物理基础架构无法实现的功能。从经济角度来看,服务器虚拟化的好处集中在节省成本上,因为它允许在单个物理服务器上安装多个应用程序。
那么,您的公司如何从虚拟基础架构中受益呢?让我们看一下前五种方式:
1降低硬件成本据说,理论上人类仅使用其大脑命令的10%;在严格的物理环境中,大多数服务器未充分利用,估计使用了5-15%的容量。当您实施虚拟化服务器/云计算方法时,由于一台物理服务器现在可以容纳多个虚拟机,因此可以提高硬件利用率。应用程序不再需要它们自己的服务器,因为物理服务器上的每个虚拟机现在都在运行它们。2011年,IDC报告称,采用服务器虚拟化策略的IT部门的硬件和软件成本降低了40%。
2更快的服务器配置和部署服务器虚拟化可在几分钟之内完成系统的配置和部署,使您可以克隆现有虚拟机,而无需花费通常的时间和成本来安装新的物理服务器。拥有虚拟环境的公司已经回过头来,不厌其烦地填写采购订单,等待服务器到达,然后等待数小时以等待操作系统和应用程序完成安装。
时间和成本的实质累加,更不用说您要购买的机架和电缆的数量要增加,以适应数量不断增加的物理服务器。对于大多数企业而言,数据中心虚拟化绝对必不可少,以跟上与竞争对手保持同步所需的数据资源的爆炸式增长。
3大大提高了灾难恢复能力服务器虚拟化的最大好处也许就是能够将虚拟机快速安全地从一台服务器移到另一台服务器。由于您的公司可以轻松地创建复制站点,因此可以快速有效地备份关键数据。大多数企业虚拟化平台都包含有助于在灾难期间自动进行故障转移的软件。该软件还允许您测试灾难恢复故障转移-将其视为数据中心自己的防火计划。如果发生数据中心灾难,则您的基础架构已设置为采取适当措施快速而安全地进行恢复。尝试通过物理服务器阵列实现这一目标-现在这是一场真正的灾难。
4节省大量能源成本除了将服务器虚拟化的其他好处外,将物理服务器迁移到虚拟机还可以将它们整合到更少的物理服务器上。结果?冷却和电力成本大大降低,这意味着您不仅将“走向绿色”,而且还将有更多的绿色可用于其他地方。据VMware称,服务器整合可将能源成本降低多达80%。另一个主要优点是能够关闭服务器电源,而不会影响应用程序或用户。
5提高生产力物理服务器越少,意味着要维护和管理的物理服务器就越少。如收益2所述,过去需要花费数天或数周的时间才能完成的应用现在只需数分钟即可完成。这使您的IT员工有更多时间花在更有生产力的任务上,例如推动新的业务计划,削减开支和增加收入。
服务器虚拟化带来了积极的转变,例如降低了硬件成本,改进了服务器配置和部署,更好的灾难恢复解决方案,能源的有效和经济利用以及员工生产率的提高。尽管如此,迁移到虚拟基础架构似乎是一项艰巨的任务,而且如果没有适当的专业知识,这可能是艰巨的任务!
企业是否用服务器虚拟化,考虑企业规模,如果客户端达到500台,必然用到虚拟化。使用到虚拟化有一下几个好处:
1以VMware虚拟化为例,使用虚拟化后,对服务器的管理将更加方便。
2使用虚拟化后,可减少后期增加服务器成本,如果没有使用虚拟化,每年需新增物理服务器,考虑到每年物理服务器的增加,中心机房又要增加机柜,还要考虑未来几年企业业务增量,增加的服务器目前中心机房是否有位置放置。使用了虚拟化后,只要规划好企业每年业务需求量和增加,随时可以分配一台服务器使用,既方便也快捷,同时也不占用数据中心位置。
3后期运维。使用虚拟化后,后期运维在一个界面可以同时管理所有虚拟的服务器,同时哪台服务器出现问题,都会在界面显示。减少了运维难度。
4使用虚拟化后,如果目前服务器已经不能满足当前业务需求,需要新增,实施起来也方便点。
以上就是个人对应企业服务器虚拟化的一点点意见。
服务器虚拟化技术的优点:1、提升资源利用率:通过服务器虚拟化的整合,提高了CPU、内存、存储、网络等设备的利用率,同时保证原有服务的可用性,使其安全性及性能不受影响。2、提高服务可用性:用户可以方便地备份虚拟机,在进行虚拟机动态迁移后,可以方便的恢复备份,或者在其他物理机上运行备份,大大提高了服务的可用性。3、加速应用部署:采用服务器虚拟化技术只需输入激活配置参数、拷贝虚拟机、启动虚拟机、激活虚拟机即可完成部署,大大缩短了部署时间,免除人工干预,降低了部署成本。4、降低运营成本:服务器虚拟化降低了IT基础设施的运营成本,令系统管理员摆脱了繁重的物理服务器、OS、中间件及兼容性的管理工作,减少人工干预频率,使管理更加强大、便捷。5、降低能源消耗:通过减少运行的物理服务器数量,减少CPU以外各单元的耗电量,达到节能减排的目的。6、提高应用兼容性:服务器虚拟化提供的封装性和隔离性使大量应用独立运行于各种环境中,管理人员不需频繁根据底层环境调整应用,只需构建一个应用版本并将其发布到虚拟化后的不同类型平台上即可。7、 动态调度资源:在服务器虚拟化技术中,数据中心从传统的单一服务器变成了统一的资源池,用户可以即时地调整虚拟机资源,同时数据中心管理程序和数据中心管理员可以灵活根据虚拟机内部资源使用情况灵活分配调整给虚拟机的资源。
虚拟化的初衷,通俗一点儿,就是:成本,money~
很好理解~
1、硬件成本
很好理解,例如:买一个服务,64G + 1T,上面部署一个项目的所有的服务,资源占用率50%,剩下的50%浪费
如果我还需要部署一个项目,那么我还需要一个服务器,也许还会出现以上的资源浪费情况~
通过虚拟化技术,可以很好的提高服务器的资源利用率,可以在一个服务器上装多个项目的虚拟机,然后在虚拟机上面运行相应服务。
2、运维成本
原来是维护多个物理机,现在维护是一个物理机上面的虚拟机,虚拟机的所有操作,通过虚拟化的客户端都能很好实现,例如:虚拟机的安装操作系统,部署服务等,如果是原来的物理机,你需要用U盘,甚至光驱才能安装操作系统,那个操作,简直不能同日而语~
在虚拟化技术的加持下,运维成本大大降低~
3、折旧成本
字面理解,不多赘述~
如果控制好以上三点,基本就把服务器的成本控制的差不多了,所以企业都在用虚拟化,其实现在的容器(docker)也是基于以上三点,再加上技术的实现,一切的初衷,都是成本~
最大化的提高硬件利用率,节约成本,做到数据可管可控。
让CPU、内存、磁盘、I/O等硬件变成可以动态管理的“资源池”,从而提高资源的利用率,简化系统管理,实现服务器整合,让IT对业务的变化更具适应力,这就是服务器的虚拟化
好处如下:
降低能耗整合服务器通过将物理服务器变成虚拟服务器减少物理服务器的数量,可以在电力和冷却成本上获得巨大节省。数据中心里服务器和相关硬件的数量,企业可以从减少能耗与制冷需求中获益,从而降低IT成本。
节省空间
使用虚拟化技术大大节省了所占用的空间,减少了数据中心里服务器和相关硬件的数量。避免过多部署在实施服务器虚拟化之前,管理员通常需要额外部署一下服务器来满足不时之需。利用服务器虚拟化,可以避免这种额外部署工作。
节约成本
使用虚拟化技术大大削减了采购服务器的数量,同时相对应的占用空间和能耗都变小。
提高基础架构的利用率
通过将基础架构资源池化并打破一个应用一台物理机的藩篱,虚拟化大幅提升了资源利用率。通过减少额外硬件的采购,企业可以获得大幅成本节约。
提高稳定性
提高可用性,带来具有透明负载均衡、动态迁移、故障自动隔离、系统自动重构的高可靠服务器应用环境。通过将操作系统和应用从服务器硬件设备隔离开,病毒与其他安全威胁无法感染其他应用。
减少宕机事件
迁移虚拟机服务器虚拟化的一大功能是支持将运行中的虚拟机从一个主机迁移到另一个主机上,而且这个过程中不会出现宕机事件。有助于虚拟化服务器实现比物理服务器更长的运行时间。
提高灵活性
通过动态资源配置提高IT对业务的灵活适应力,支持异构操作系统的整合,支持老应用的持续运行,减少迁移成本。支持异构操作系统的整合,支持旧应用的持续运行,支持快速转移和复制虚拟服务器,提供一种简单便捷的灾难恢复解决方案。
中小企业为了降低成本,实现服务器虚拟化,可以使用云服务器,即方便,费用低,还有专人进行维护和管理。安全等级也比较高。简单来说,就是让一台服务器变成几百甚至上万台虚拟服务器,让我们不再受限于物理资源,那么 服务器虚拟化 究竟都有什么好处呢 买服务器多少钱,租云主机和服务器价格的区别。
1、数据中心降低能耗
随着数据中心走向绿色环保,公司通过整合服务器通过将物理服务器变成虚拟服务器减少物理服务器的数量,可以在电力和冷却成本上获得巨大节省。据中心里服务器和相关硬件的数量,企业可以从减少能耗与制冷需求中获益,从而降低IT成本,数据中心也达成减排目标。
2、节省数据中心空间
比起一个机柜只放几台服务器相比,使用虚拟化技术将节省海量空间,为数据中心减负。避免过多部署在实施服务器虚拟化之前,管理员通常需要额外部署一下服务器来满足不时之需。利用服务器虚拟化,可以避免这种额外部署工作。
3、节约用户成本
使用虚拟化技术大大削减了采购服务器的数量,同时相对应的占用空间和能耗都变小了,这样用户租用的费用也降低了不少。
4、提高基础架构的利用率
服务器虚拟化将基础架构集中化不仅有利于管理,还大幅提升了资源利用率。通过减少额外硬件的采购,企业可以获得大幅成本节约,供应商管理成本降低,事故率也降低了不少。
5提高数据中心稳定性
服务器虚拟化具有透明负载均衡、动态迁移、故障自动隔离、系统自动重构的高可靠服务器应用环境。通过将操作系统和应用从服务器硬件设备隔离开,病毒与其他安全威胁无法感染其他应用。减少宕机事件、提高灵活性
通过动态资源配置提高IT对业务的灵活适应力,支持异构操作系统的整合,支持老应用的持续运行,减少迁移成本。支持异构操作系统的整合,支持老应用的持续运行,支持快速转移和复制虚拟服务器,提供一种简单便捷的灾难恢复解决方案。
服务器虚拟化又分为软件虚拟化和硬件虚拟化
IBM/HP小型机上的硬件分区就是所谓的硬件虚拟化。此处对x86架构下的虚拟化技术进行说明。从技术实现上来讲,在OS之上的虚拟化有Virtual PC、Vmware Workstation;裸金属架构的半虚拟化技术xen;裸金属架构的全虚拟化有VMware ESX、KVM等。楼主问的amazon EC2使用的是开源的Xen,Xen也是公有云中唯一被广泛使用并得到成功验证的平台。heroKu是个PaaS平台,PaaS不关心底层IaaS使用哪种虚拟化软件,故heroKu没有虚拟化软件一说。
服务器虚拟化即将服务器物理资源抽象成逻辑资源,让一台服务器变成几台甚至上百台相互隔离的虚拟服务器或者多台服务器虚拟成一台服务器,不再受限于物理上的界限,让CPU、内存、磁盘、I/O等硬件变成可以动态管理的“资源池”,从而提高资源的利用率,简化系统管理,实现服务器整合,让IT对业务的变化更具适应力,这就是服务器虚拟化的意义。
开源软件已经成为许多大型网站的基本组成部分,随着这些网站的逐步壮大,他们的网站架构和一些指导原则也出现在开发者们的面前,给予切实有用的指导和帮助。本文旨在介绍一些核心问题以及通过构建模块来制作大型网站,实现最终目标。这篇文章主要侧重于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
0条评论