简单理解:
数据分布式存储
请求分布式调度
多节点分布式部署
双重备份,热切换
系统的核心:
分布式算子:(例如:sun公司的hash)
对于任意输入,输出均匀分布
输出结果数可控
通信:(cindysocket)
高并发量
多线程
一接口服务器(interfaceServer)
对外提供访问接口并接受请求,一般内置一个http服务器进程
监控各dispatcherserver的工作状态
转发请求到其中一个最优dispatcher中,先查看各dispatcherserver的工作状态(可用简单轮询和随机算法)
二消息分发服务器(dispatcherserver):
接收来自请求服务器的接口
解析请求,提取特征参数(类似于账号的东西,一个帐号会被发布到同一个结点上)
然后对参数执行hash函数,计算出appsrrver,然后再转发appserver
应用服务器(appserver)
执行业务逻辑,等同于集中式系统中草有应用服务器
被划分为多个逻辑组,同一个组中的服务器负载均衡
考虑到数据库双重务份,热切换和负载均衡,才用了多数据库单读多写策略,
对于读,选择一个最优数据库来提供数据,对于写,必须保证操作的事务性
数据库服务器(DBserver)
结点之间的通信
数据以网络格式异步并发传输
分布式算法
辅助函数和变量
PublicString[]getTargetServerIps();//取得目标服务器IP
Publicint[]getTargerServerIds();//取得目标服务器ID
PublicbooleanisServerWorking(index);//检查目标服务器的状态
IntcurrentTargetServerIndex;//当前目标服务器在targetServerIds的index
接口服务器中的轮询算法:
//取得该次请求所要分发的服务器
PublicStringgetTargetServerIp(){
String[]targetServerIps=getTargetServlerIps();
Int[]targetIds=getTargerServerIds();
Intindex=currentTargetServerIndex;
While(!isWorking){
Index=targetServerIds.length()%(currentTargetServerIndex+1);
isWorking=isServerWorking(index);
//无任何服务器可用
If(!isWorkig&&index==currentTargetServerIndex){
Return"0:0";
}
}
currentTargetServerIndex=index;
ReturntargetServerIps[index];
}消息分发服务器分发请求采用hash算法
Publicinthash(byte[]bs){
Inthash=0;
For(inti=0;i<bs.length;i++){
Hash=31*hash+bs[i];
}
Returnhash;
}
//返回根据hash计算出的目标服务器群组
PublicintgetTargerServerGroupIndexByHash(StringhashParam)throwsBtirException{
Byte[]hashinfo=hashParam.getBytes("utf-8");
//由hash值的后两位进行分段的数目,即hash结果数,目标服务器群组的数量
IntframeCount=2;
Intstep=100/frameCount;
Inthash=Math.abs(hash(hashParam)%100);
For(inti=0,beg=0,end=step;i<frameCount;i++){
If(beg<=hash&&hash<end){
Return2*1;
}
Beg=end;
End+=step;
}
Return2*(frameCount-1);
}
//根据轮询算法,计算服务器群组中的最优服务器
PublicStringgetTargetServerIpInGriuo(intgroup){
//组内的轮询算法
Int[]targetServerIds=getTargetServerIds();
Intindex=getTargetServerIndexInGroup(groupIndex);
ReturntargetServerIps[index];
}
Celient构造发送请求
Server接收请求并处理
Client和server之间的通信:
通信协议和技术有很多,如webserviceEJBjms基于javaNIO的socket
采用socket的两个基本标准是:
1服务器上的线程数可控,不要与请求数线性增长
2将处理请求和接收请求分开,否则会降低吞吐率和并发量
分享到:
相关推荐
从给定的文件信息来看,标题和描述都指向了“Java分布式学习笔记01分布式Java应用”,这显然是关于Java在分布式环境下的应用和技术的学习资料。虽然提供的部分内容由于格式问题难以直接解析,但我们可以根据标题、...
分布式学习本文是对 MIT6.824的一个笔记 标注出要看的 paper 和对 paper 的一个简单描述. 用作个人复习和简单知道要讲啥,带着内容去听课.此论
Java分布式应用学习笔记 在Java世界中,分布式应用是指由多个独立组件通过网络通信协同工作的系统。这种架构模式常用于构建大规模、高可用性、可扩展的系统。本笔记将深入探讨Java分布式应用的核心概念、技术和实践...
### 分布式事务学习笔记知识点详解 #### 一、什么是分布式事务 分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单来说,一次大的操作由不同...
【分布式技术相关知识学习笔记】 分布式技术是现代软件开发中的重要组成部分,它涉及多种技术手段,如CORBA、ORB、RPC、RMI以及中间件等,旨在解决大型系统中复杂度、扩展性和高可用性的问题。本笔记将重点讨论EJB...
分布式系统和SOA的介绍与应用 前言 随着系统规模的扩大,分布式架构的应用变得越来越广泛。...在Java领域,分布式应用的学习和实践是一个非常重要的方向,这对于理解和掌握现代企业级应用架构具有重要意义。
标题《第10课 Python分布式计算笔记》所指向的知识点涵盖了分布式计算领域中与Python语言的结合使用。分布式计算是一种将计算任务分布在多个计算节点上协同工作的计算模式。它能够高效利用网络中的多台计算机,通过...
这个压缩文件包含了四个子目录:ConcurrentProgrammingStudyNotes、DistributedTopic、DistributedStudyNotes以及ConcurrentProgrammingTopic,它们分别对应并发编程的学习笔记、分布式专题、分布式学习笔记和并发...
### Java分布式应用与SOA概览 在深入探讨Java分布式应用和面向服务架构(SOA)之前,我们首先需要理解这两个概念的基本含义及其在现代IT系统中的重要性。 #### Java分布式应用 Java分布式应用是指利用Java编程...
Python分布式爬虫学习笔记,各种Demo同步:cactus:
### Java分布式应用学习笔记07线程池应用 在深入探讨Java分布式应用中线程池的应用之前,我们先来理解一下线程池的基本概念及其在并发编程中的重要性。线程池是Java并发编程的核心技术之一,它通过复用一组预创建的...
HCIE-Datacom VxLAN分布式网关部署学习笔记
【Java分布式应用学习笔记-谈JVM】 在Java分布式应用中,JVM(Java虚拟机)扮演着至关重要的角色。虽然有些人可能认为分布式系统与JVM的关系并不密切,但事实上,尤其是在大型分布式环境,如云计算服务平台,对Java...
它包含了四个主要部分:ConcurrentProgrammingStudyNotes(并发编程学习笔记)、DistributedTopic(分布式主题)、DistributedStudyNotes(分布式学习笔记)以及ConcurrentProgrammingTopic(并发编程主题)。...
01 Redis快速入门 - Redis教程 02-Redis环境安装 - Redis教程 03-Redis 的安装配置介绍 04-Redis数据类型 - Redis教程 05-Redis命令 - Redis教程 06-Redis键 - Redis教程。。。 13-Redis发布订阅 - Redis教程 ...
【Java分布式高级架构师课程学习笔记】 在Java分布式高级架构师的学习过程中,涵盖了多个关键领域的技术,包括数据库的高可用方案、缓存系统、消息中间件以及分布式协调服务。以下是对这些主题的深入探讨: 1. **...
### Java分布式应用学习笔记09JMX-MBean的介绍 #### MBean概念及作用 MBean,即Managed Bean,是在JMX(Java Management Extensions)框架中用于管理资源的一种特殊Java对象。通过MBean,可以方便地对应用程序进行...