精华内容
下载资源
问答
  • 摘要—针对运筹学中的瓶颈分配问题,提出了一种基于成本矩阵变换的矩阵消除方法,并通过实例分析证明了该算法的有效性,并且解决方案是最优的子结构。通过比较,该方法比其他方法更有效。
  • 对于解决网络瓶颈问题,依靠增加链路吞吐量、配置端口信道或者整合服务质量等技术,但也有更多额外的技巧来更好解决瓶颈问题,下面就详情来看看了解下
  • 为了解决瓶颈节点,结合数据压缩和数据融合技术以减少传向汇聚节点的数据量,在汇聚节点以上使用高速网络,当数据量超出汇聚节点的处理能力时,在汇聚节点采用根据兴趣或数据的优先级对数据进行选择性传输,给出了...
  • 利用固态硬盘解决存储瓶颈.pdf
  • Namenode瓶颈解决方案

    2019-04-20 01:06:14
    NULL 博文链接:https://snv.iteye.com/blog/1884565
  • 利用FPGA平台解决接口的总线速度瓶颈 利用FPGA平台解决接口的总线速度瓶颈
  • 企业信息化瓶颈解决

    2016-12-13 15:39:43
    提到企业 IT 建设,更多的是指协同办公管理,而随着企业信息化需求的逐步扩展升级,协 同管理也在向着全程全业务线的整合管理进行延展。
  • 事实上,当很难获得利润的时候,解决存储I/O性能瓶颈在经济疲软时变得更加重要。  对于数据中心来说,虚拟环境下的存储I/O瓶颈是一个不断加重且长期存在的问题,因为存储控制器和头设备会被虚拟机发出的大量I/O请求...
  • 该产品屡获奖项,是赛门铁克端到端应用性能管理(APM)系列的核心产品,能够主动监控、分析并诊断对关键业务应用造成影响的性能和可用性瓶颈。Symantec i3的性能提升能够更加快速的解决应用性能问题,实现更加轻松便捷...
  • 流程改造及生产瓶颈解决案例.pptx
  • 引入TD_LTE提升用户感知与解决网络瓶颈.doc
  • 电动汽车发展前景及急需解决瓶颈技术问题.pdf
  • 了解如何识别和解决LabVIEW应用程序中的性能瓶颈。使用内置工具和VI分析器,您可以监视VIs的内存使用情况和执行时间,以确定导致应用程序性能下降的代码部分。
  • 谈到物联网,它本身的技术从研究的角度来看有三层说法,统称DCM。是设备,首先要有电子标签芯片,其次要有接受的终端...云连接平台正是突破物联网连接层瓶颈的关键技术。  云连接(Cloud Connection)是指将网络以
  • JavaScript启动性能瓶颈分析与解决方案.docx
  • 数据库性能瓶颈和常见解决方案

    千次阅读 2020-03-26 15:11:30
    1.数据库性能瓶颈 产生瓶颈的原因: --数据库连接数达到机器性能的瓶颈 --表数据量过大,有些查询命中不了索引...2.大数据量数据库性能解决方案 2.1. sql优化(避免多次查询,利用好索引) 2.2. 缓存(redis...

    1.数据库性能瓶颈

     产生瓶颈的原因:

    --数据库连接数达到机器性能的瓶颈

     

     --表数据量过大,有些查询命中不了索引从而导致全表扫描;维护索引的效率也随着数据量大到一定量级后指数级下降;新增修改数据的速度会下降很多。

       

    --硬件资源本身的qps和tps的瓶颈

    2.大数据量数据库性能解决方案

    2.1. sql优化(避免多次查询,利用好索引)

    2.2. 缓存(redis,es)

    2.3. 建好索引(根据查询实际需求来建立索引)

    2.4. 读写分离

      区别读、写多数据源方式进行数据的存储和加载。数据的存储(增删改)一般指定写数据源,数据的读取查询指定读数据源(读写分离会基于主从复制)。

      解决的问题:

      1,解决了数据库连接瓶颈

      2,释放了硬件资源限制(QPS\TPS)

      主从复制形式:

     

    2.5. 分库分表

      对数据的库表进行拆分,用分片的方式对数据进行管理。

    垂直拆分

    解决的问题:

    ​ 1,解决了数据库连接瓶颈

    ​ 2,释放了硬件资源限制(QPS\TPS)

    水平拆分

     分库分表中间件的工作原理:

     解决的问题:

    ​ 1,表数据量大的问题 存储空间也解决了

    ​ 2,解决了数据库连接瓶颈

    ​ 3,释放了硬件资源限制(QPS\TPS)

    展开全文
  • 瓶颈法则

    2014-10-31 14:56:37
    瓶颈法则源于约束理论(Theory of Constraints, ToC),由Dr Eliyahu Goldratt提出并于1984年发表于他的著作《The Goal》中。法则指出:每个系统,...专注于通过解决瓶颈改善成效是提升盈利能力最快和最卓有成效的途

    瓶颈法则源于约束理论(Theory of Constraints, ToC),由Dr Eliyahu Goldratt提出并于1984年发表于他的著作《The Goal》中。

    法则指出:每个系统,无论运转优劣,都有至少一个约束(即瓶颈)限制其产能。

    这个法则使我们可以推断出一个流程中响应时间和性能的限制,这是IT服务和软件开发项目的重要信息。PuenteColgante Queue

    专注于通过解决瓶颈改善成效是提升盈利能力最快和最卓有成效的途径。瓶颈可以包括组织内部或外部的人、信息、工具、过程。

    瓶颈是指在一个流程中限制或阻碍流动的环节,通常为子流程或者活动形式。瓶颈处的吞吐率会比其他环节要低。换言之,瓶颈是一项在工作通过系统最终完成的过程中,所花时间最长的一个环节。

    例如,让我们看一下洗衣服的“清洗-烘干-折叠”这个流程:

    Washing-DryingProcess Sp

    瓶颈时烘干机,因为在整个流程中,这个环节的前置时间最长的。

    过程涉及到不同的人、活动和工具,而且其中任何一点都具有不同的效率。因此,流程中的活动必须以顺序的方式执行,例如:

                清洗-烘干-折叠
                办理登机手续 - 行李检查 - 登机
                需求定义- 分析 - 设计 - 实现 - 测试 - 交付

    如何解决瓶颈?
    在David Anderson的著作《看板方法》中,你可以更详细的了解如何解决由于产能受限资源造成的瓶颈以及由资源可用性不足造成的瓶颈。

    这里我仅对解决瓶颈的方法进行总结:

    • 充分利用瓶颈资源:确保资源仅从事他所专业从事的工作,分配其余活动给其他资源。

      例如,我们有一个软件集成的专家,但是由于它参与了大量的项目因而成为了瓶颈。方法之一是只让他做集成任务,其他的任务分配给其他团队成员。

    • 增加资源可用性 - 资源用更短时间回到可用状态。

      例如:继承专家可以每周投身到每个项目中1天。更有效的方式是每周投身到每个项目2个半天,而非每周一整天。

    • 自动化一部分活动。

    • 增加资源(抬高瓶颈) - 通常是代价最大的方案。

      继续上面的例子,增加资源相当于聘用另一个对软件集成领域具备必要的知识和经验的人。
    原文:http://berriprocess.com/en/todas-las-categorias/item/47-ley-del-cuello-de-botella
    展开全文
  • 浅析新能源汽车发展瓶颈解决办法.pdf
  • 本书主要讲解了架构知识,不仅仅是架构知识,更多的是互联网场景下大型网站架构演变过程中核心技术难题的解决方案。
  • 这个会议纪要是描述化工行业工艺装置的存在问题的纪要,很值得其它行业学习。
  • 电动汽车发展的瓶颈问题及解决对策探析.pdf
  • 巧用CompletableFuture返回值解决性能瓶颈 需求背景 无返回值CompletableFuture实现 有返回值CompletableFuture实现 需求背景 对一组字符串数据进行处理,处理逻辑简单封装一个对象,包装该字符串,最终汇总返回...

    需求背景

    对一组字符串数据进行处理,处理逻辑简单封装一个对象,包装该字符串,最终汇总返回。
    下面实现只使用CompleteableFuture,其它方式如paraStream不考虑。

    无返回值CompletableFuture实现

    考虑到性能,对于字符串的处理可以进行并发。实现如下:

        private static ExecutorService executorService = Executors.newFixedThreadPool(10,
                UserThreadFactory.build("future-test"));
    
        private List<String> result = new ArrayList<>();
        @Before
        public void init() {
            for (int i = 0; i < 1000; i++) {
                result.add("a" + i);
            }
        }
    
        @Test
        public void testCompleteFuture1(){
            List<List<String>> partition = Lists.partition(result, 100);
            Vector<AD> vector=new Vector<>();
            List<CompletableFuture<Void>> futures = partition.stream().map(list -> {
                return CompletableFuture.runAsync(() -> {
                    for (String s : list) {
                        AD ad = new AD();
                        ad.name = s + "--p";
                        vector.add(ad);
                    }
                }, executorService);
            }).collect(toList());
            CompletableFuture.allOf(futures.toArray(new CompletableFuture[]{})).join();
        }
    

    利用了CompletableFuture<Void>进行并发处理,使用线程安全的vector用于汇聚最后的数据。上文的存在的问题是线程安全的vector有锁导致性能降低,实现应用中逻辑比上述例子复杂,该处成为了性能瓶颈。

    有返回值CompletableFuture实现

    使用带有返回值的completable编码实现

        public void testCompleteFuture2() {
            List<List<String>> partition = Lists.partition(result, 100);
            List<CompletableFuture<List<AD>>> futures = partition.stream().map(list -> {
                return CompletableFuture.supplyAsync(() -> {
                    List<AD> ads = new ArrayList<>();
                    for (String s : list) {
                        AD ad = new AD();
                        ad.name = s + "--p";
                        ads.add(ad);
                    }
                    return ads;
                }, executorService);
            }).collect(toList());
            List<AD> collect = futures.stream().map(p -> {
                try {
                    return p.get();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                }
                return null;
            }).filter(Objects::nonNull).flatMap(List::stream).collect(toList());
    }
    

    上述的例子则没了vector锁的限制,性能上不存在问题。

    展开全文
  • I/O面板很快就会成为一个限制通信和减缓系统运行速度的瓶颈。计算机及其用户都讨厌传输速度太慢浪费宝贵的时间。目前一种解决方案是不断研发新的可插拔I/O连接器,包括SFP、QSFP、MicroQSFP、QSFP-DD和OSFP。每次...
  • 对于海量数据的处理随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的...
    对于海量数据的处理
    
    随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。

    水平切分数据库:可以降低单台机器的负载,同时最大限度的降低了宕机造成的损失;
    负载均衡策略:可以降低单台机器的访问负载,降低宕机的可能性;
    集群方案:解决了数据库宕机带来的单点数据库不能访问的问题;
    读写分离策略:最大限度了提高了应用中读取数据的速度和并发量;

    什么是数据切分
    "Shard" 这个词英文的意思是"碎片",而作为数据库相关的技术用语,似乎最早见于大型多人在线角色扮演游戏中。"Sharding" 姑且称之为"分片"。Sharding 不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(Scale Out,亦或横向扩展、向外扩展)的解决方案,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。通过一系列的切分规则将数据水平分布到不同的DB或table中,在通过相应的DB路由或者table路由规则找到需要查询的具体的DB或者table,以进行Query操作。“sharding”通常是指“水平切分”,这也是本文讨论的重点。接下来举个简单的例子:我们针对一个Blog应用中的日志来说明,比如日志文章(article)表有如下字段:

    面对这样的一个表,我们怎样切分呢?怎样将这样的数据分布到不同的数据库中的表中去呢?我们可以这样做,将user_id为1~10000的所有的文章信息放入DB1中的article表中,将user_id为10001~20000的所有文章信息放入DB2中的 article表中,以此类推,一直到DBn。这样一来,文章数据就很自然的被分到了各个数据库中,达到了数据切分的目的。

    接下来要解决的问题就是怎样找到具体的数据库呢?其实问题也是简单明显的,既然分库的时候我们用到了区分字段user_id,那么很自然,数据库路由的过程当然还是少不了user_id的。就是我们知道了这个blog的user_id,就利用这个user_id,利用分库时候的规则,反过来定位具体的数据库。比如user_id是234,利用刚才的规则,就应该定位到DB1,假如user_id是12343,利用该才的规则,就应该定位到DB2。以此类推,利用分库的规则,反向的路由到具体的DB,这个过程我们称之为“DB路由”。

    平常我们会自觉的按照范式来设计我们的数据库,考虑到数据切分的DB设计,将违背这个通常的规矩和约束。为了切分,我们不得不在数据库的表中出现冗余字段,用作区分字段或者叫做分库的标记字段。比如上面的article的例子中的user_id这样的字段(当然,刚才的例子并没有很好的体现出user_id的冗余性,因为user_id这个字段即使就是不分库,也是要出现的,算是我们捡了便宜吧)。当然冗余字段的出现并不只是在分库的场景下才出现的,在很多大型应用中,冗余也是必须的,这个涉及到高效DB的设计,本文不再赘述。

    为什么要数据切分
    上面对什么是数据切分做了个概要的描述和解释,读者可能会疑问,为什么需要数据切分呢?像 Oracle这样成熟稳定的数据库,足以支撑海量数据的存储与查询了?为什么还需要数据切片呢?
    的确,Oracle的DB确实很成熟很稳定,但是高昂的使用费用和高端的硬件支撑不是每一个公司能支付的起的。试想一下一年几千万的使用费用和动辄上千万元的小型机作为硬件支撑,这是一般公司能支付的起的吗?即使就是能支付的起,假如有更好的方案,有更廉价且水平扩展性能更好的方案,我们为什么不选择呢?

    我们知道每台机器无论配置多么好它都有自身的物理上限,所以当我们应用已经能触及或远远超出单台机器的某个上限的时候,我们惟有寻找别的机器的帮助或者继续升级的我们的硬件,但常见的方案还是横向扩展,通过添加更多的机器来共同承担压力。我们还得考虑当我们的业务逻辑不断增长,我们的机器能不能通过线性增长就能满足需求?Sharding可以轻松的将计算,存储,I/O并行分发到多台机器上,这样可以充分利用多台机器各种处理能力,同时可以避免单点失败,提供系统的可用性,进行很好的错误隔离。

    综合以上因素,数据切分是很有必要的。 我们用免费的MySQL和廉价的Server甚至是PC做集群,达到小型机+大型商业DB的效果,减少大量的资金投入,降低运营成本,何乐而不为呢?所以,我们选择Sharding,拥抱Sharding。

    怎么做到数据切分
    数据切分可以是物理上的,对数据通过一系列的切分规则将数据分布到不同的DB服务器上,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负载压力。

    数据切分也可以是数据库内的,对数据通过一系列的切分规则,将数据分布到一个数据库的不同表中,比如将article分为article_001,article_002等子表,若干个子表水平拼合有组成了逻辑上一个完整的article表,这样做的目的其实也是很简单的。举个例子说明,比如article表中现在有5000w条数据,此时我们需要在这个表中增加(insert)一条新的数据,insert完毕后,数据库会针对这张表重新建立索引,5000w行数据建立索引的系统开销还是不容忽视的。但是反过来,假如我们将这个表分成100 个table呢,从article_001一直到article_100,5000w行数据平均下来,每个子表里边就只有50万行数据,这时候我们向一张 只有50w行数据的table中insert数据后建立索引的时间就会呈数量级的下降,极大了提高了DB的运行时效率,提高了DB的并发量。当然分表的好处还不知这些,还有诸如写操作的锁操作等,都会带来很多显然的好处。

    综上, 分库降低了单点机器的负载分表提高了数据操作的效率,尤其是Write操作的效率。行文至此我们依然没有涉及到如何切分的问题。接下来,我们将对切分规则进行详尽的阐述和说明。

    上文中提到,要想做到数据的水平切分,在每一个表中都要有相冗余字符作为切分依据和标记字段,通常的应用中我们选用user_id作为区分字段,基于此就有如下三种分库的方式和规则:(当然还可以有其他的方式)
    (1) 号段分区
    user_id为1~1000的对应DB1,1001~2000的对应DB2,以此类推;
    优点:可部分迁移
    缺点:数据分布不均

    (2)hash取模分区
    对user_id进行hash(或者如果user_id是数值型的话直接使用user_id 的值也可),然后用一个特定的数字,比如应用中需要将一个数据库切分成4个数据库的话,我们就用4这个数字对user_id的hash值进行取模运算,也就是user_id%4,这样的话每次运算就有四种可能:结果为1的时候对应DB1;结果为2的时候对应DB2;结果为3的时候对应DB3;结果为0的时候对应DB4。这样一来就非常均匀的将数据分配到4个DB中。
    优点:数据分布均匀
    缺点:数据迁移的时候麻烦,不能按照机器性能分摊数据

    (3)在认证库中保存数据库配置
    就是建立一个DB,这个DB单独保存user_id到DB的映射关系,每次访问数据库的时候都要先查询一次这个数据库,以得到具体的DB信息,然后才能进行我们需要的查询操作。
    优点:灵活性强,一对一关系
    缺点:每次查询之前都要多一次查询,性能大打折扣

    以上就是通常的开发中我们选择的三种方式,有些复杂的项目中可能会混合使用这三种方式。 通过上面的描述,我们对分库的规则也有了简单的认识和了解。当然还会有更好更完善的分库方式,还需要我们不断的探索和发现。

    分布式数据方案提供功能如下:
    (1)提供分库规则和路由规则(RouteRule简称RR);
    (2)引入集群(Group)的概念,保证数据的高可用性;
    (3)引入负载均衡策略(LoadBalancePolicy简称LB);
    (4)引入集群节点可用性探测机制,对单点机器的可用性进行定时的侦测,以保证LB策略的正确实施,以确保系统的高度稳定性;
    (5)引入读/写分离,提高数据的查询速度;

    仅仅是分库分表的数据层设计也是不够完善的,当我们采用了数据库切分方案,也就是说有N台机器组成了一个完整的DB 。如果有一台机器宕机的话,也仅仅是一个DB的N分之一的数据不能访问而已,这是我们能接受的,起码比切分之前的情况好很多了,总不至于整个DB都不能访问。

    一般的应用中,这样的机器故障导致的数据无法访问是可以接受的,假设我们的系统是一个高并发的电子商务网站呢?单节点机器宕机带来的经济损失是非常严重的。也就是说,现在我们这样的方案还是存在问题的,容错性能是经不起考验的。当然了,问题总是有解决方案的。我们引入集群的概念,在此我称之为Group,也就是每一个分库的节点我们引入多台机器,每台机器保存的数据是一样的,一般情况下这多台机器分摊负载,当出现宕机情况,负载均衡器将分配负载给这台宕机的机器。这样一来,就解决了容错性的问题。

    如上图所示,整个数据层有Group1,Group2,Group3三个集群组成,这三个集群就是数据水平切分的结果,当然这三个集群也就组成了一个包含完整数据的DB。每一个Group包括1个Master(当然Master也可以是多个)和 N个Slave,这些Master和Slave的数据是一致的。 比如Group1中的一个slave发生了宕机现象,那么还有两个slave是可以用的,这样的模型总是不会造成某部分数据不能访问的问题,除非整个 Group里的机器全部宕掉,但是考虑到这样的事情发生的概率非常小(除非是断电了,否则不易发生吧)。

    在没有引入集群以前,我们的一次查询的过程大致如下:请求数据层,并传递必要的分库区分字段 (通常情况下是user_id)。数据层根据区分字段Route到具体的DB,在这个确定的DB内进行数据操作。

    这是没有引入集群的情况,当时引入集群会 是什么样子的呢?我们的路由器上规则和策略其实只能路由到具体的Group,也就是只能路由到一个虚拟的Group,这个Group并不是某个特定的物理服务器。接下来需要做的工作就是找到具体的物理的DB服务器,以进行具体的数据操作。

    基于这个环节的需求,我们引入了负载均衡器的概念 (LB),负载均衡器的职责就是定位到一台具体的DB服务器。具体的规则如下:负载均衡器会分析当前sql的读写特性,如果是写操作或者是要求实时性很强的操作的话,直接将查询负载分到Master,如果是读操作则通过负载均衡策略分配一个Slave。

    我们的负载均衡器的主要研究方向也就是负载分发策略,通常情况下负载均衡包括随机负载均衡和加权负载均衡。随机负载均衡很好理解,就是从N个Slave中随机选取一个Slave。这样的随机负载均衡是不考虑机器性能的,它默认为每台机器的性能是一样的。假如真实的情况是这样的,这样做也是无可厚非的。假如实际情况并非如此呢?每个Slave的机器物理性能和配置不一样的情况,再使用随机的不考虑性能的负载均衡,是非常不科学的,这样一来会给机器性能差的机器带来不必要的高负载,甚至带来宕机的危险,同时高性能的数据库服务器也不能充分发挥其物理性能。基于此考虑从,我们引入了加权负载均衡,也就是在我们的系统内部通过一定的接口,可以给每台DB服务器分配一个权值,然后再运行时LB根据权值在集群中的比重,分配一定比例的负载给该DB服务器。当然这样的概念的引入,无疑增大了系统的复杂性和可维护性。有得必有失,我们也没有办法逃过的。

    有了分库,有了集群,有了负载均衡器,是不是就万事大吉了呢? 事情远没有我们想象的那么简单。虽然有了这些东西,基本上能保证我们的数据层可以承受很大的压力,但是这样的设计并不能完全规避数据库宕机的危害。假如Group1中的slave2 宕机了,那么系统的LB并不能得知,这样的话其实是很危险的,因为LB不知道,它还会以为slave2为可用状态,所以还是会给slave2分配负载。这样一来,问题就出来了,客户端很自然的就会发生数据操作失败的错误或者异常。

    这样是非常不友好的!怎样解决这样的问题呢? 我们引入集群节点的可用性探测机制 ,或者是可用性的数据推送机制。这两种机制有什么不同呢?首先说探测机制吧,顾名思义,探测即使,就是我的数据层客户端,不定时对集群中各个数据库进行可用性的尝试,实现原理就是尝试性链接,或者数据库端口的尝试性访问,都可以做到。

    那数据推送机制又是什么呢?其实这个就要放在现实的应用场景中来讨论这个问题了,一般情况下应用的DB 数据库宕机的话我相信DBA肯定是知道的,这个时候DBA手动的将数据库的当前状态通过程序的方式推送到客户端,也就是分布式数据层的应用端,这个时候在更新一个本地的DB状态的列表。并告知LB,这个数据库节点不能使用,请不要给它分配负载。一个是主动的监听机制,一个是被动的被告知的机制。两者各有所长。但是都可以达到同样的效果。这样一来刚才假设的问题就不会发生了,即使就是发生了,那么发生的概率也会降到最低。

    上面的文字中提到的Master和Slave ,我们并没有做太多深入的讲解。一个Group由1个Master和N个Slave组成。为什么这么做呢?其中Master负责写操作的负载,也就是说一切写的操作都在Master上进行,而读的操作则分摊到Slave上进行。这样一来的可以大大提高读取的效率。在一般的互联网应用中,经过一些数据调查得出结论,读/写的比例大概在 10:1左右 ,也就是说大量的数据操作是集中在读的操作,这也就是为什么我们会有多个Slave的原因。

    但是为什么要分离读和写呢?熟悉DB的研发人员都知道,写操作涉及到锁的问题,不管是行锁还是表锁还是块锁,都是比较降低系统执行效率的事情。我们这样的分离是把写操作集中在一个节点上,而读操作其其他 的N个节点上进行,从另一个方面有效的提高了读的效率,保证了系统的高可用性。

    一致性hash
    一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:
    1、平衡性(Balance):平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。
    2、单调性(Monotonicity):单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。 
    3、分散性(Spread):在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。 
    4、负载(Load):负载问题实际上是从另一个角度看待分散性问题。既然不同的终端可能将相同的内容映射到不同的缓冲区中,那么对于一个特定的缓冲区而言,也可能被不同的用户映射为不同 的内容。与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷。

    在分布式集群中,对机器的添加删除,或者机器故障后自动脱离集群这些操作是分布式集群管理最基本的功能。如果采用常用的hash(object)%N算法,那么在有机器添加或者删除后,很多原有的数据就无法找到了,这样严重的违反了单调性原则。

    什么是集群
    集群是一组协同工作的服务实体,用以提供比单一服务实体更具扩展性与可用性的服务平台。在客户端看来,一个集群就象是一个服务实体,但 事实上集群由一组服务实体组成。

    集群的特性 
    与单一服务实体相比较,集群提供了以下两个关键特性: 
    1.可扩展性--集群的性能不限于单一的服务实体,新的服 务实体可以动态地加入到集群,从而增强集群的性能。 
    2. 高可用性--集群通过服务实体冗余使客户端免于轻易遇到out of service的警告。在集群中,同样的服务可以由多个服务实体提供。如果一个服务实体失败了,另一个服务实体会接管失败的服务实体。集群提供的从一个出 错的服务实体恢复到另一个服务实体的功能增强了应用的可用性。 
    为了具有可扩展性和高可用性特点,集群的必须具备以下两大能力: 
    (1) 负 载均衡--负载均衡能把任务比较均衡地分布到集群环境下的计算和网络资源。 
    (2) 错误恢复--由于某种原因,执行某个任务的资源出现故障,另一服 务实体中执行同一任务的资源接着完成任务。这种由于一个实体中的资源不能工作,另一个实体中的资源透明的继续完成任务的过程叫错误恢复。 
    负载均衡 和错误恢复都要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务所需的信息视图(信息上下文)必须是一样的。

    集群的分类 
    集群主要分成三大类:高可用集群(High Availability Cluster/HA), 负载均衡集群(Load Balance Cluster),高性能计算集群(High Performance Computing Cluster/HPC) 
    (1) 高可用集群(High Availability Cluster/HA):一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上。还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行。常见的就是2个节点做 成的HA集群,有很多通俗的不科学的名称,比如"双机热备", "双机互备", "双机",高可用集群解决的是保障用户的应用程序持续对外提供服 务的能力。
    (2) 负载均衡集群(Load Balance Cluster):负载均衡集群运行时一般通过一个或者多个前端负载均衡器将工作负载分发到后端的一组服务器上,从而达到将工作负载分发。这样的计算机集群有时也被称为服务器群(Server Farm)。一般web服务器集群、数据库集群 和应用服务器集群都属于这种类型。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器 上。从检查其他服务器状态这一点上 看,负载均衡和容错集群很接近,不同之处是数量上更多。 
    (3) 高性能计算集群(High Performance Computing Cluster/HPC):高性能计算集群采用将计算任务分配到集群的不同计算节点而提高计算能力,因而主要应用在科学计算领域。这类集群致力于提供单个计算机所不能提供的强大的计算能力




    展开全文
  • HPB 如何解决区块链性能瓶颈问题_李琼@HPB芯链.pdf
  • 解决数据库高并发访问瓶颈问题

    千次阅读 2018-10-10 21:18:37
    解决数据库高并发访问瓶颈问题 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010832551/article/details/77836681 一、缓存式的Web应用程序架构: 在Web层和db层之间加一层...
  • 大型ReBCO绝热磁体发展的瓶颈解决方案,徐风雨,,ReBCO涂层导体的性能在近十年来取得了长足的进步,在所有的超导导体里面成为最耀眼的明星。但是它的实际应用却不能与其优异的超导�
  • 谈到物联网,它本身的技术从研究的角度来看有三层说法,统称DCM。第一是设备,首先要有电子标签芯片,其次要有接受的终端设备...云连接平台正是突破物联网连接层瓶颈的关键技术。  云连接(Cloud Connection)是指将
  • 放大器电路的大信号带宽遇瓶颈:如何解决压摆率问题?
  • 海量数据的存储与访问瓶颈解决方案-数据切分.docx

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 271,906
精华内容 108,762
关键字:

如何解决瓶颈