大数据篇:三大指标

大数据篇:三大指标大数据篇:三大指标上一篇文章中文章讲了如何用服务等级协议(SLA)来评估我们的系统,并讲解了几个常用的SLA指标今天我们来讲分布式系统中另外几个基本概念可扩展性(Scalability)先从我们为什么需要分布式系统说起。原因是我们系统的数据量越来越大,从原来的GB到TB到现在的PB级,单机已经无法胜任这样的工作了。工作中也常有这样的场景,随着业务变得原来越复杂,之前设计的系统无法处理日渐…

大家好,又见面了,我是你们的朋友全栈君。

大数据篇:三大指标

上一篇文章中文章讲了如何用服务等级协议(SLA)来评估我们的系统,并讲解了几个常用的SLA指标

今天我们来讲分布式系统中另外几个基本概念

可扩展性(Scalability)

先从我们为什么需要分布式系统说起。原因是我们系统的数据量越来越大,从原来的GB到TB到现在的PB级,单机已经无法胜任这样的工作了。

工作中也常有这样的场景,随着业务变得原来越复杂,之前设计的系统无法处理日渐增长的负载。这时,我们就需要增加系统的容量。

分布式系统的核心就是可扩展性。

最基本且最流行的增加系统容量的模型由两种:水平扩展(Horizontal Scaling)、垂直扩展(Vertical Scaling)。

所谓的水平扩展,就是指在现有的系统中增加新的机器节点。

在这里插入图片描述

垂直扩展是指不改变机器数量,通过增加现有机器的性能,比如增加机器的内存。

在这里插入图片描述
举个例子:假设你是一个包工头。你有5个人手,他们每人一小时平均可以搬500块砖,那么一个小时最多搬5人×500块×1小时=2500块/小时。

如果你要使这个系统的负荷量增加一倍,用水平扩展的方式,我们可以讲雇佣人数加倍到10个人,或者使现在的人搬砖速度加倍。

到此,你是不是发现水平扩展的适用范围更广,操作更加的简单,并且会提升系统的可用性(Availability)。

如果你的系统部署在AWS或者其他主流的云服务器上,你会发现只需要点几个按钮,就可以轻松的增加一个新的节点。

但是,无节制的增加机器数量会带来许多问题,例如加大的系统的运维、系统间的通讯更加复杂,出错的几率更大,更难保持数据一致性。

与之相反,垂直扩展并没有使系统变得更加复杂,控制系统的代码也不需要做调整,但是它受到的限制也比较多。多数情况,单个机器的性能提升是有限的。而且受制于摩尔定律(-当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会提升一倍。换言之,每一美元所能买到的电脑性能,将每隔18-24个月翻上一倍以上 来源:百度百科),提高机器的性能往往比购买新的机器更加的昂贵。

所以在工作中,我们要对这两种模式进行取舍,要具体情况具体分析。

在大数据时代,数据增长速度越来越快,数据规模越来越大,对数据存储系统的扩展性要求也会越来越高。

传统的关系型数据库因为表与表之间地数据关联,经常会进行Join操作,所有数据放在单机系统中,很难支持水平扩展。而NoSql(非关系数据库)型的数据库天生支持水平扩展,所有这类存储系统应用越来越广,如:Redis、MongoDB等。

一致性(Consistency)

一般来说分布式系统的节点可用性会比整个系统的可用性低。

假设我们需要构建一个系统达到了99.999%的可用性(每年约有5分钟不可用),而单个节点的可用性为99.9%(每年约有8小时的宕机时间)。那么这时我们能想到的便是多增加几个结点,即使其中几个节点宕机,也有部分节点可以使用,这样系统的可用性就会提高了。

这时当节点不断增加,我们怎样保证不同节点同一时间接收和输出的数据是一致的呢?下面我讲解下一致性。

要保证分布式系统的内的机器节点有相同的信息,就需要机器间,定期同步。

然而,发送的消息并不一定是成功的,比如节点宕机、脑裂等。因此,一致性也是一个非常重要的概念。

接下来我讲解几个常见的一致性模型:强一致性(Strong Consistency)、弱一致性(Weak Consistency)、最终一致性(Eventual Consistency)。

  • 强一致性:系统中的某个数据被成功更新后,后续任何数据的读取操作都将得到更新后的值。所有在任意时刻。同一系统所有节点中的数据是一样的。
  • 弱一致性:系统中的某个数据被更新后,后续对该数据的读取操作可能得到更新后的值,也可能是更改前的值。但经够“不一致的时间窗口”后,读取到的值都是更新后的值。
  • 最终一致性:最终一致性可以说是弱一致性的特例。系统保证在没有新的更新条件下,最终的所有访问都是最新的值。

上面的表述可能有些过于官方了,下面我来详细讲解下。

在强一致性系统中,只要某个数据的值有更新,这个数据的副本都要进行同步,以保证这个更新被传播到所有备份的数据库中,直到这个过程结束,才允许服务器来读取这个数据(这里有点像锁一样)。

所以必定会牺牲掉一部分延迟性,而且对于全局时钟的要求很高。举个例子:Google Cloud的Cloud Spanner就是一款强一致性的全球分布式企业级数据库服务。

在最终一致性系统中,我们无需等待数据更新到所有节点就可以获取。尽管不同的进程读同一数据,可能读到不同的结果,但是最终还是可以读取到同一数据。

很多认为银行间转账应该是强一致性,但是其实并不然。

举个例子,张三给李四转500块钱,张三扣款了,但是李四并不一定会收到500块钱。这里便会产生一个不一致性的时间窗口:张三扣款,而李四没有收到钱的时候。

另一个例子:你在12306系统上买票,也不是强一致性。

在这里插入图片描述
如果你买票的时候你发现票剩余5张,你发起订票请求,系统提示你“正在排队,现在还有5张票,前方还有10人在购买”。

这时你可能就会去查询订单详情,因为系统没有立即返回你成功或者失败。如果有人退了一张票,那么这张票会立即回到票池。这里也存在一个时间窗口。

但是5张票,只会卖给5人,不会卖给第6个人,这就是最终一致性(“最终所有数据都会同步”);

持久性(Durability)

数据持久性(Data Durability)意味着数据一旦被成功存储就可以一直使用,即使宕机、节点下线或数据损坏也是如此。

不同分布式数据拥有不同级别的持久性。有些系统支持机器(节点)级别的持久性,有些支持集群的持久性。有些压根没有持久性。

想要提高持久性,复制是一个非常好的做法,同一数据存储在不同节点上,即使节点无法连接,数据仍然可以从其他节点读取。

除了数据持久性还有另一个重要的持久性概念:消息持久性。在分布式系统中,节点之间需要经常相互发送消息去同步以保证一致性。对于重要的系统,常常不会允许任何消息丢失。

分布式系统间的消息通讯一般由分布式消息服务完成,如:Kafka,RabbitMq等。这些消息服务都支持不同级别的消息送达可靠性。消息持久性大致包含两个方面:1.当消息服务节点发生了错误,已经发生的消息仍然会在错误解决之后被处理。2.如果一个消息队列声明了持久性,那么即使队列在消息发送后掉线,仍然会在重新上线之后收到这条消息。

总结

上一篇我们讲了可用性、延迟性、准确性与这篇文章中的一致性、持久性、扩展性。我们不难发现一个系统想要在不牺牲某一指标的前提下,让每个指标都达到最好,是几乎不可能的。

下期预告:CAP理论
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/143048.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网络爬虫原理

    目录1网络爬虫原理2写网络爬虫的原因3网络爬虫的流程4网络抓包5HTTP状态码说明6Java网络爬虫需要的基础知识1、网络爬虫原理网络爬虫指按照一定的规则(模拟人工登录网页的方式),自动抓取网络上的程序。简单的说,就是讲你上网所看到页面上的内容获取下来,并进行存储。网络爬虫的爬行策略分为深度优先和广度优先。如下图是深度优先的一种遍历方式是A到B到D到E到C

    2022年4月6日
    43
  • 7月13一个不平凡的日子

    7月13一个不平凡的日子7月13一个不平凡的日子,3点起床去海淀医院吊瓶,7点到家补觉。全天共接到10电话(其中1个是骚扰)。13点到单位办请假手续,15点去乐成产品部参观并开会,里面样衣样鞋真多,真想拿几件走。…

    2022年7月16日
    14
  • directshow是什么意思_showcased

    directshow是什么意思_showcased1.http://www.360doc.com/userhome.aspx?userid=2150347&cid=7#

    2022年10月12日
    3
  • java 死链检测_网站死链检测工具/网站地图生成工具「建议收藏」

    java 死链检测_网站死链检测工具/网站地图生成工具「建议收藏」转载自http://www.yshjava.cn/post/483.html今天在谷歌站长工具上看到谷歌爬虫在笔者的个人博客网站上找到了3个无效的404链接,稍微有一点SEO常识的人都知道,404是搜索引擎爬虫非常讨厌的页面,会直接降低网站在搜索引擎中的权重和排名,这是广大站长都不愿意看到的事情。如果自己手动的去寻找这些404页面,或许很难:404存在于哪些页面中?出现一次还是多次?偶然还是必然…

    2022年7月23日
    18
  • 驱动程序模型:wddm2.0_编写一个简单的驱动

    驱动程序模型:wddm2.0_编写一个简单的驱动WDF驱动程序开发1.引言设备驱动程序是硬件设备连接到计算机系统的软件接口,任何设备都必须有相应的驱动程序才能在计算机系统上正常工作。设备驱动程序的优劣直接关系到整个系统的性能和稳定性,因此,设计和开发稳定高效的驱动程序具有重要意义。WDF(WindowsDriverFoundation)是微软提出的下一代全新的驱动程序模型,它是在WDM(windowsDriverModel)…

    2022年9月1日
    6
  • Wireshark使用教程

    Wireshark使用教程文章目录安装使用开始捕获以wireshark2.6.3汉化版为例安装除了路径是自定义之外,其它均默认即可。使用开始捕获菜单“捕获-选项”,设置需要捕获的网络适配器,点击“开始”。也可以在菜单“捕获-开始”、“捕获-结束”来控制开始结束。在“捕获-捕获过滤器”编辑捕获表达式在上述“捕获”菜单中进行的操作,也可以在工具栏进行,如下图捕获结果着色规则在菜单“视图-着色规则”…

    2022年6月16日
    32

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号