接口服务器(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年 视频教程】是一个专注于教授现代Java技术栈在分布式系统中的应用和实践的培训课程。本教程的重点是服务治理,这是构建大规模、高可用性分布式系统的关键部分。通过...
在分布式系统中,Java的特性如多线程、网络通信和内存管理等都非常适合处理并发请求和实现分布式通信。 分布式数据库在旅行预订系统中的应用主要体现在以下几个方面: 1. 数据一致性:为了确保用户在不同节点上...
《深入解析Java分布式KV存储系统源码》 Java分布式KV(Key-Value)存储系统是现代互联网服务中不可或缺的一部分,其高效、可扩展的特性使其在大数据处理、缓存服务等领域广泛应用。本篇文章将深入剖析一款基于Java...
《Java分布式实战指南》这本书详细介绍了如何构建一个完整的Java分布式系统,主要涵盖了技术选型、分布式基础设施环境构建以及项目运营与部署环境等多个方面。在Java微服务领域,它提供了丰富的实践经验和理论指导。...
在现代企业级应用中,尤其是在云计算和微服务架构盛行的今天,掌握Java分布式应用的设计原则和技术至关重要。下面将详细介绍Java分布式应用程序设计的相关知识点。 1. **分布式系统基础**: - 分布式系统的概念:...
分布式爬虫通常包含任务分发、结果汇总、节点间通信等功能,XXL-Crawler 在这方面有良好的设计和实现。 在实际使用中,开发者可以通过继承和实现XXL-Crawler 提供的抽象类和接口,定制自己的爬虫逻辑。例如,可以...
Java分布式面试主要涉及分布式系统的基础概念、异常处理、副本与一致性以及系统性能指标。以下是相关知识点的详细说明: 1. **分布式系统模型**: - **节点**:在分布式系统中,节点通常指的是运行在不同操作系统...
在IT行业中,Java语言因其平台无关性、丰富的库支持以及高效性能,在构建大型分布式系统方面扮演着重要角色。本文将深入探讨大型分布式系统中的Java应用,包括其核心概念、技术框架以及实现策略。 首先,我们要理解...
### Java分布式应用与SOA概览 在深入探讨Java分布式应用和面向服务架构(SOA)之前,我们首先需要理解这两个概念的基本含义及其在现代IT系统中的重要性。 #### Java分布式应用 Java分布式应用是指利用Java编程...
Java分布式存储是一个重要的技术领域,尤其在大数据处理和云计算中占据着核心地位。在这个实例中,我们看到一个基于Java实现的分布式存储系统,这可能是基于某个特定的框架或设计模式,比如Hadoop HDFS(Hadoop...
从给定的文件信息来看,标题和描述都指向了“Java分布式学习笔记01分布式Java应用”,这显然是关于Java在分布式环境下的应用和技术的学习资料。虽然提供的部分内容由于格式问题难以直接解析,但我们可以根据标题、...
### 《高级操作系统》第二章-分布式通信 #### 一、概述 在何炎武老师的《高级操作系统》第二章中,主要介绍了分布式通信的关键概念和技术。分布式通信是现代计算机网络和分布式系统的基础,它涉及到了如何在不同...
分布式通信协议中的HTTP是互联网上应用最为广泛的一种网络协议,主要用在客户端和服务器之间进行数据交换。HTTP协议的核心特点是基于请求与响应模型,客户端(通常是浏览器)发起一个请求到服务器,服务器接收到请求...
2. **选举算法**:当节点间通信出现问题时,会通过选举算法确定新的调度节点,保证服务不中断。 3. **幂等性设计**:任务执行保证幂等性,防止重复执行导致数据不一致。 4. **补偿机制**:对于失败的任务,niubi-job...
- JMS(Java Message Service):提供异步消息传递,用于在分布式组件间解耦通信。 - EJB(Enterprise JavaBeans):为企业级分布式应用提供组件模型。 - JNDI(Java Naming and Directory Interface):用于查找...
CAP定理指出,分布式系统无法同时满足一致性、可用性和分区容错性,因此,Paxos、Raft等一致性算法和ZooKeeper、Etcd等协调服务在Java分布式系统中扮演着重要角色。 通过深入理解和实践这些概念,开发者可以构建出...
在Java中,我们可以利用RMI(远程方法调用)、JMS(Java消息服务)和JNDI(Java命名和目录接口)等技术实现分布式通信。 2. 分布式Java应用核心组件 - EJB(Enterprise JavaBeans):提供了一种标准的组件模型,...
在Java领域,分布式系统通常涉及网络通信、负载均衡、数据一致性、容错性等关键技术。例如,RMI(Remote Method Invocation)和JMS(Java Message Service)是Java中实现分布式服务调用的常用方式,而Dubbo和Spring ...
JAVA分布式聊天系统往往在AP之间进行取舍,以实现高可用和容忍网络分区。 8. **幂等性设计**:为确保在并发环境下操作的正确性,系统中的关键操作应设计为幂等,即多次执行同一操作应得到相同结果。 9. **安全性**...
它会详细介绍分布式LMS的模型框架,用简单易懂的方式帮助学习者理解分布式算法的基本原理和实现步骤。 “基础”标签表明这个例子适合对自适应滤波和分布式计算有一定基础知识的学习者,它将涵盖基本的滤波理论、...