首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    BI系统的分布式部署原理和技术实现

    关于“分布式系统”的定义,我们先看下书中是怎么说的。《分布式系统原理和范型》一书中是这样定义分布式系统的:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统”。 关于这个定义,我们直观的感受就是: 首先,这种系统相对来说很厉害,由好几台主机组成。以谷歌、亚马逊等服务商而言,他们的数据中心都由上万台主机支撑起来的。 其次,虽然很它很厉害,但对于外人来说,是感觉不到这些主机的存在。也就是说,我们只看到是一个系统在运作。以最近的“亚马逊 S3 宕机事件”为例,平时,我们压根不知道亚马逊所提供的服务背后是由多少台主机组成,但是等到 S3 宕机才知道,这货已经是占了互联网世界的半壁江山了。 从进程角度看,两个程序分别运行在两个台主机的进程上,它们相互协作最终完成同一个服务(或者功能),那么理论上这两个程序所组成的系统,也可以称作是“分布式系统”。 当然,这个两个程序可以是不同的程序,也可以是相同的程序。如果是相同的程序,我们又可以称之为“集群”。所谓集群,就是将相同的程序,通过不断横向扩展,来提高服务能力的方式。 举一个生活中的例子来说明: 小饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,两个厨师的关系是集群。 为了让厨师专心炒菜,把菜做到极致,再请了个配菜师负责切菜,备菜,备料 ... , 厨师和配菜师的关系是分布式。 一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是集群。 一个配菜师因故请假了,但是其余的配菜师还是该啥就干啥,只是没请假的配菜师任务均匀的加量了,但他们的任务和职责是不变的,这是集群。 店里生意很好,当店长接到订单后,看哪个厨师活儿不重,就将新的订单分给谁,这就是负载均衡。 集群:多个人在一起做同样的事 。 分布式 :多个人在一起做不同的事 。 负载均衡:决定将任务以某种规则分给谁做。

    02

    项目分布式部署那些事(2):一个简单的分布式锁

    什么是锁,它用来解决什么问题? 分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。 在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,这个时候,便需要使用到分布式锁。

    010

    没有“now”-分布式系统中的同时性问题

    “Now.” 从我写这个单词到你读到它,时间已经过去了至少几个星期,这种延迟我们认为是理所当然的,甚至在我们读到任何文章的时候都不会想到这个问题。 “Now.” 如果我们在同一个房间内,我大声这么说,你可能会有更强的直观性。你可能会直觉的觉得,就像我在说这个词的同时你就听到了一样。这种直觉是错误的,如果你不相信你的直觉,而是思考声音的物理原理,你就会知道从我说话到你的听觉之间一定经过了一段时间。空气的传播,带着我的话,会花费时间从我的嘴传递到你的耳朵。 “Now.” 即使我举起一个写着哪个字的牌子,我们都看着它,我们对哪个形象的感觉也不会同时发生,因为携带着这个牌子信息的光传到我们每个不同的人需要不同的时间。 虽然计算机的某些特性是虚拟的,但是他们仍然碧玺在现实世界中运行,不能忽视现实世界的挑战。海军少将Grace Hopper (我们这一领域最重要的先驱之一,他的成就包括创造了第一个编译器)用给每个学生一根11.8英寸长的电线来说明这一点,则是电在1 ns内可以传输的最大距离。这种信息,时间和距离之间的关系的物理表征可以作为一种工具来解释为什么信号(就像我们上面的比喻符号)必须总是而且不可避免地要花费时间才能到达目的地。考虑到这些延迟,很难解释“now”在计算机系统中的确切含义。 不过,如果我们提前详细计划,理论上没有什么能组织我们对“now”达成共识。(相对论在这里不是问题,尽管它很容易让人分心。人类目前所有的计算系统都有一个足够严谨的参照系,使得人们对于时间的感知存在着非物质的相对论性差异。)NTP协议用于在互联网上同步系统之间的时钟,部分工作原理是计算信息在主机之间传输的时间。一旦知道了这个传输时间,主机就可以根据这个时间来调整时钟,以匹配更权威的消息来源。通过在网络中提供一些非常精确的源,基于连续测量原子辐射的时钟。我们能够使用NTP将计算机的时钟同步到一个很小的误差范围内。在GPS中每个卫星都包含多个原子钟,这样一个时钟失败不会使卫星不可用。GPS协议允许任何人使用,只需要他们能够收到足够多的卫星信号就能解出所有的变量。不仅可以确定接收装置自己的位置,而且可以非常精确的确定时间。 我们已经理解这些协议几十年了,因此,我们很容易相信我们已经克服了这类问题,我们们应该能够建立一个假设我们的时钟是同步的系统。原子钟,NTP和GPS卫星提供了信息传播所需的时间的知识和设备。因此我,任何地方的系统都应该能够就“now”达成一致,并共享对时间进程的共同、单一的看法。然后,网络和计算中的所有困难问题都将变得容易得多。如果你所关系的所有系统对时间的感知都是完全相同的,那么即使再一些涉及主机出现故障时,许多这些问题也可以解决,但是在构建实际的分布式系统中,这些问题任然存在,并且处理它们不仅是一个持续活跃的研究领域,而且也是一个主要的关注点。 你可能会看到用于理解时间的成熟机制,并相信研究人员和系统构建者正在做大量不必要的工作。既然我们制定如何同步,为什么还要试图解决时钟可能不同的问题呢?为什么不适用时钟源和协议的正确组合来让时钟一致,继续前进,客服这些问题?有一件事情让这种说法难以置信,也让这些问题不仅重要,而且必须直面:一切都会崩溃。 真正的问题不是信息需要时间从一个地方转移到另外一个地方的理论概念。真正的问题是在计算系统所有的物理世界中,组件经常会失败。在构建系统,尤其是在商用机器和网络上的分布式计算系统时,最常见的错误之一就是假定脱离了基本的物理现实。光速就是这样一种现实,但是另外一种更有害但是同样普遍的现实也是这样,我们无法制造出永远有不坏的完美机器,正是这些现实,异步性和部分失败的结合,使得构建分布式系统变得困难。如果我们不计划考虑单个组件的故障,我们可以保证组合系统的故障。 分布式系统理论中最重要的结果之一不是可能的结果,它显示了在可能发生故障的世界中构建系统的能力的局限性。这通常被称为FLP结果,以其作者Fischer, Lynch, 和 Paterson命名。它们的工作以分布式计算领域最具影响力的论文获得了2001年的Dijkstra奖。最终证明了一些计算问题在同步模型中是可能实现的,在同步模型中,主机拥有相同或者共享的时钟,这样的不可能结果非常重要,因为它们可以引导你在涉及自己的系统的时候避免走入死胡同。它们还可以提供一个snake-oil探测器。所以你有理由怀疑哪些声称产品做了你认为不可能的事情的人。 一个相关的结果是CAP定理,用于一致性、可用性和分区耐受性。现在的开放人员相对FLP更加熟悉它。首先由Eric Brewer非正式的提出,后来由Seth Gilbert 和 Nancy Lynch证明了它。从分布式理论系统角度来看,CAP定理没有FLP有趣,一个反例击败了CAP的正式版本,它假设了一个比FLP更弱,更具有对抗性的世界模型,并要求在该模型中实现更多。虽然一个问题并不是另一

    01
    领券