`
hxpterry
  • 浏览: 17555 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java分布式通信(续二)----分布式算法

阅读更多

接口服务器(Interface Server)和消息分发服务器(Dispatcher Server)在分发请求的策略上有所不同.

辅助函数和变量:

  public String[] getTargetServerIps();//目标服务器的ip,如193.243.15.45:8080

      public int[] getTargetServerIds();//目标服务器ID,与上述服务器ip一一对应,可以自由配置

      public boolean isServerWorking(index);//判断目标服务器的状态

      int currentTargetServerIndex=0;//当前的目标服务器在targetServerIds中的index

 

 

接口服务器(Interface Server)采用轮询算法:

      public String getTargetServerIp(){//获取该次请求所要分发的目标服务器

                 String[] targetServerIps=getTargetServerIps();

                 int[] targetServerIds=getTargetServerIds();

                 int index=currentTargetServerIndex;

                 boolean isWorking=false;

                 while(!isWorking){

        index=targetServerIds.length()%(currentTargetServerIndex+1);

                    isWorking=isServerWorking(index);

                        if(!isWorking&&index==currentTargetServerIndex){//无任何目标服务器可用

                                    return "0:0";
                        }

      }

                  currentTargetServerIndex=index;

                  return targetServerIps[index];
      }

 

 

消息分发服务器(Dispatcher Server)分发请求采用的hash算法

    // hash algrithm from JDK's String,来自于jdk的hash算法
    public int hash(byte[] bs) {
        int hash = 0;
        for (int i = 0; i < bs.length; i++) {
            hash = 31 * hash + bs[i];
        }
        return hash;
    }


    public int getTargetServerGroupIndexByHash(String hashParam) throws BtirException {//返回根据hash计算出的目标服务器群组

         byte[] hashinfo=hashParam.getBytes("utf-8");

         int frameCount=2://由hash值的后两位进行分段的数目 ,即hash结果数,目标服务器群组的数量

   int step = 100 / frameCount;

         int hash = Math.abs(hash(hashParam) % 100);
        for(int i=0, beg=0, end=step; i<frameCount; i++) {
            if(beg <= hash && hash < end )
                return 2*i;
            beg = end;
            end += step;
        }

        return 2*(frameCount-1); //如果设置得好,应该不会走到这里
    }

    public String getTargetServerIpInGriuo(int groupIndex){//根据轮询算法,计算服务器群组中的最优服务器

               String[] targetServerIps=getTargetServerIps();//组内的轮询算法,代码略

                int[] targetServerIds=getTargetServerIds();

      int index=getTargetServerIndexInGroup(groupIndex);//轮询算法代码略

                return targetServerIps[index];

 }

分享到:
评论

相关推荐

    Java 分布式架构训练营 - 第一期 服务治理2023年 视频教程 下载 因为太大存百度云盘1.zip

    【Java分布式架构训练营 - 第一期 服务治理2023年 视频教程】是一个专注于教授现代Java技术栈在分布式系统中的应用和实践的培训课程。本教程的重点是服务治理,这是构建大规模、高可用性分布式系统的关键部分。通过...

    分布式旅行预订系统--模仿分布式数据库

    在分布式系统中,Java的特性如多线程、网络通信和内存管理等都非常适合处理并发请求和实现分布式通信。 分布式数据库在旅行预订系统中的应用主要体现在以下几个方面: 1. 数据一致性:为了确保用户在不同节点上...

    Java 分布式应用程序设计

    在现代企业级应用中,尤其是在云计算和微服务架构盛行的今天,掌握Java分布式应用的设计原则和技术至关重要。下面将详细介绍Java分布式应用程序设计的相关知识点。 1. **分布式系统基础**: - 分布式系统的概念:...

    面向对象的分布式爬虫框架xxl-crawler

    分布式爬虫通常包含任务分发、结果汇总、节点间通信等功能,XXL-Crawler 在这方面有良好的设计和实现。 在实际使用中,开发者可以通过继承和实现XXL-Crawler 提供的抽象类和接口,定制自己的爬虫逻辑。例如,可以...

    大型分布式系统java应用

    在IT行业中,Java语言因其平台无关性、丰富的库支持以及高效性能,在构建大型分布式系统方面扮演着重要角色。本文将深入探讨大型分布式系统中的Java应用,包括其核心概念、技术框架以及实现策略。 首先,我们要理解...

    java 分布式存储实例

    Java分布式存储是一个重要的技术领域,尤其在大数据处理和云计算中占据着核心地位。在这个实例中,我们看到一个基于Java实现的分布式存储系统,这可能是基于某个特定的框架或设计模式,比如Hadoop HDFS(Hadoop...

    一款Java分布式KV存储系统源码.zip

    《深入解析Java分布式KV存储系统源码》 Java分布式KV(Key-Value)存储系统是现代互联网服务中不可或缺的一部分,其高效、可扩展的特性使其在大数据处理、缓存服务等领域广泛应用。本篇文章将深入剖析一款基于Java...

    20170726分布式通信协议-http笔记1

    分布式通信协议中的HTTP是互联网上应用最为广泛的一种网络协议,主要用在客户端和服务器之间进行数据交换。HTTP协议的核心特点是基于请求与响应模型,客户端(通常是浏览器)发起一个请求到服务器,服务器接收到请求...

    一个高可用的,专门针对定时任务的分布式任务调度框架-niubi-job.zip

    2. **选举算法**:当节点间通信出现问题时,会通过选举算法确定新的调度节点,保证服务不中断。 3. **幂等性设计**:任务执行保证幂等性,防止重复执行导致数据不一致。 4. **补偿机制**:对于失败的任务,niubi-job...

    分布式JAVA应用 基础与实践

    - JMS(Java Message Service):提供异步消息传递,用于在分布式组件间解耦通信。 - EJB(Enterprise JavaBeans):为企业级分布式应用提供组件模型。 - JNDI(Java Naming and Directory Interface):用于查找...

    (开发入门)分布式java基础与实践

    CAP定理指出,分布式系统无法同时满足一致性、可用性和分区容错性,因此,Paxos、Raft等一致性算法和ZooKeeper、Etcd等协调服务在Java分布式系统中扮演着重要角色。 通过深入理解和实践这些概念,开发者可以构建出...

    分布式Java应用基础与实践源码.zip

    在Java中,我们可以利用RMI(远程方法调用)、JMS(Java消息服务)和JNDI(Java命名和目录接口)等技术实现分布式通信。 2. 分布式Java应用核心组件 - EJB(Enterprise JavaBeans):提供了一种标准的组件模型,...

    一个java实现的分布式文件存储系统,可以实现文件分布存储在不同的服务器中,进行上传、下载、删除

    同时,Java丰富的库和API为开发分布式系统提供了便利,例如网络通信、多线程以及数据序列化等。 其次,分布式文件系统的核心功能包括文件存储、文件上传和文件下载。文件存储涉及如何将文件拆分成多个块,并在多台...

    分布式java应用完整版

    在Java领域,分布式系统通常涉及网络通信、负载均衡、数据一致性、容错性等关键技术。例如,RMI(Remote Method Invocation)和JMS(Java Message Service)是Java中实现分布式服务调用的常用方式,而Dubbo和Spring ...

    基于JAVA的分布式聊天系统.zip_8SMV_JAVA分布式_condition6md_分布式_基于JAVA的分布式聊天系统

    JAVA分布式聊天系统往往在AP之间进行取舍,以实现高可用和容忍网络分区。 8. **幂等性设计**:为确保在并发环境下操作的正确性,系统中的关键操作应设计为幂等,即多次执行同一操作应得到相同结果。 9. **安全性**...

    分布式LMS算法代码

    它会详细介绍分布式LMS的模型框架,用简单易懂的方式帮助学习者理解分布式算法的基本原理和实现步骤。 “基础”标签表明这个例子适合对自适应滤波和分布式计算有一定基础知识的学习者,它将涵盖基本的滤波理论、...

    42_分布式锁是啥?对比下redis和zk两种分布式锁的优劣?.zip

    在Java开发中,分布式锁的应用广泛,尤其是在微服务架构中,当服务间的通信可能导致对同一资源的并发访问时,分布式锁能确保操作的原子性和一致性。 **Redis与Zookeeper分布式锁对比** 1. **Redis分布式锁** - **...

    大规模分布式存储系统:原理解析与架构实战,分布式服务框架原理与实践_李林锋著

    1. 分布式存储的基本概念:包括CAP定理、Paxos/Raft一致性算法、数据分片与复制策略。 2. 分布式键值存储:如Bigtable、HBase等,它们如何解决实时查询与大数据存储问题。 3. 分布式文件系统:如Hadoop HDFS,它的...

    英文版分布式算法教程(PDF)

    10. **实践指导**:可能提供实际编程练习,使用诸如Java、Python或Scala等语言实现分布式算法。 通过学习这本教程,读者可以掌握设计和实现分布式算法的关键技能,理解分布式系统中的挑战,并能够为特定场景选择和...

Global site tag (gtag.js) - Google Analytics