文档章节

Java分布式应用简介

ksfzhaohui
 ksfzhaohui
发布于 2013/02/19 16:28
字数 1649
阅读 616
收藏 2

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>


       大型应用通常会拆分为多个子系统,对于java来说,这些子系统可能部署在同一台机器上的多个不同的JVM中,也可能部署在不同的 电脑上,但这些子系统有不是完全独立的,要相互通信来实现业务功能,对于此类java应用,我们称为java分布式应用。

对于分布式java应用,通常有两种典型的方式来实现:

1.基于消息方式实现系统间的通信
当系统之间要通信时,就向外发送消息,消息可以是字节流、字节数组,甚至是java对象。
消息方式的系统间通信,通常基于网络协议来实现,常用的实现系统间通信的协议是:TCP/IP和UDP/IP

TCP/IP是一种可靠的网络数据传输协议,TCP/IP要求通信双方首先建立连接,然后进行通信。TCP/IP负责保证数据传输的可靠性,
包括数据的可到达、数据到达的顺序等,但由于TCP/IP要保证连接和数据的可靠性,因此可能会牺牲一些性能。

UDP/IP是一种不保证一定数据一定到达的网络数据传输协议。UDP/IP并不直接给通信的双方建立连接,而是发送到网络上进行传递。
由于UDP/IP不建立连接,并且不能保证数据传输的可靠性,因此性能上表现比较好,但可能出现数据丢失以及数据乱序的现象。

TCP/IP和UDP/IP可用于完成数据的传输,但要完成系统间的通信,还需要对数据进行处理。读取和写入,按照POSIX(可移植操作系统接口) 分为同步IO和异步IO,其中同步IO中最常用的是BIO(Blocking IO)和NIO(Non-Blocking IO)

BIO:当发起IO的读和写操作时,均为阻塞方式
NIO:是基于事件驱动的,发起IO的读和写操作时,均为非阻塞方式

AIO:为异步IO方式,同样基于事件驱动思想,和NIO不同,当进行读写操作时,只需直接调用API的read和write方法即可。这两种方法均为 异步的,对于读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对于写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序。

较之NIO而言,AIO一方面简化了程序的编写,流的读取和写入都由操作系统来代替完成;另一方面省去了NIO中程序要遍历事件通知 队列(Selector)的代价。

windows基于IOCP实现了AIO,Linux目前基于epoll模拟实现了AIO

java对TCP/IP和UDP/IP都支持,在网络IO的操作上,java 7以前的版本只支持BIO和NIO,java 7以后的版本才支持AIO

实现的4种方式:TCP/IP+BIO,TCP/IP+NIO,UDP/IP+BIO,UDP/IP+NIO
TCP/IP+BIO
基于socket和serverSocket来实现
通常要面对客户端同时要发送多个请求到服务器端,服务器端同时要接受多个连接发送的请求
a.为了满足客户端同时发送多个请求到服务器端,最简单的方式就是产生多个socket。但是这样会产生两个问题:
一是生成太多的Socket会消耗过多的本地资源,并且客户端生成过多的Socket会导致服务器需要支撑非常高的连接数;
二是生成Socket通常是比较慢的,因此频繁的创建导致系统性能不足
鉴于这两个问题,通常采用连接池的方式来维护Socket,一方面限制了能创建Socket的个数;另一方面由于将socket放入池中,避免了重复创建socket带来的性能下降问题.

另一问题连接池中的socket个数是有限的,但同时要用socket的请求会很多,这时候就会造成激烈的竞争和等待,这时就要合理控制等待响应的超时时间(setSocketTimeOut)

b.为了满足服务器能同时接受多个连接发送的请求,通常采用的方式是在accept获取Socket之后,将此socket放入一个线程中处理,通常将此方式称为一连接一线程。这样服务器就可以接受多个连接发送请求了。
缺点:无论连接上是否有真实的请求,都要耗费一个线程。为避免创建过多的线程导致服务器端资源耗尽,须限制创建线程的数量。
这就造成了在采用BIO的情况下服务器端所能支撑的连接数是有限的。

TCP/IP+NIO
a.对于客户端发送多个请求的需求,NIO方式可以做到不阻塞,因此如果服务器返回的响应能带上请求标示,那客户端可以采用连接复用的方式,即每个SocketChannel在发送消息后,不用等响应即可继续发送其他消息,这种方式可降低连接池带来的资源争抢问题,从而提升系统性能;对于连接不复用的情况,可基于Socket.setSoTimeout的方式来控制同步请求的超时。

b.对于服务器端接受多个连接请求的需求,通常采用一个线程监听连接的事件,另一个或多个线程来监听网络流读写的事件
开源框架Mina,JBoss Netty提供了对TCP/IP+NIO通信的支持

UDP/IP+BIO
在java中可基于DatagramSocket和DatagramPacket来实现UDP/IP+BIO,DatagramSocket负责监听端口及读取数据。DatagramPacket作为数据流对象进行传输。

UDP/IP+NIO
在java中可基于DatagramChannel和ByteBuff来实现UDP/IP+NIO,DatagramChannel负责监听端口及读取数据。ByteBuff用于数据流传输。


2.基于远程调用方式实现系统间的通信

可通过调用一个本地的java接口的方法,透明的调用远程的java实现。具体细节则由java或框架来完成,这种方法主要用来实现基于RMI 和webservice的应用。
RMI的开源框架Spring RMI,webservice开源框架CXF,Axis等

© 著作权归作者所有

ksfzhaohui

ksfzhaohui

粉丝 426
博文 167
码字总数 261352
作品 3
南京
高级程序员
私信 提问
加载中

评论(0)

Sharding-JDBC(一)简介

目录   一、介绍     1. Sharding-JDBC     2. Sharding-Proxy     3. Sharding-Sidecar(TBD)     4. 混合架构   二、功能列表     1. 数据分片     2. 分布式...

GarfieldEr007
01/06
0
0
《Java1996》01:Java技术简介

深入了解IT/互联网行业及岗位,请参阅通用IT/互联网岗位招聘计划(最新全岗版)。 深入了解职业晋升及学习路线,请参阅最优职业晋升路线和课程学习指南(最新全栈版)。 敲黑板,说重点,这是...

AT阿宝哥
05/22
0
0
apache ignite系列(一): 简介

apache-ignite简介(一) 1,简介 ignite是分布式内存网格的一种实现,其基于java平台,具有可持久化,分布式事务,分布式计算等特点,此外还支持丰富的键值存储以及SQL语法(基于h2引擎),可...

osc_3md1xrlp
2018/08/20
7
0
Head First Java(第2版)中文版pdf

下载地址:网盘下载 内容简介 · · · · · · 《Head First Java》是本完整的面向对象(object-oriented,OO)程序设计和Java的学习指导。此书是根据学习理论所设计的,让你可以从学习程序...

osc_3www0d3o
2018/02/05
8
0
阿里年薪50WJAVA工程师转大数据学习路线!

大数据有两个方向,一个是偏计算机的,另一个是偏经济的。你学过Java,所以你可以偏将计算机的。 Java程序员想转大数据可行吗?Java是全世界使用人数最多的编程语言。不少程序员选择Java做为...

JAVA丶学习
2018/04/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kubernetes Ingress简单入门

本文转载自Rancher Labs 不知道你是否注意到一个奇怪的现象,尽管Kubernetes Ingress API仍然处于beta状态,但是已经有许多公司使用它来暴露Kubernetes服务。从事相关项目的工程师表示,Kub...

osc_slfjdpj6
39分钟前
21
0
ACCDB MDB Explorer for mac(数据库查看器)

想要更加直观的查看大数据,小编推荐使用mac数据查看工具ACCDB MDB Explorer Mac版,该软件能够将导入的数据库导出为XML,XLS,CSV和TXT格式的文件简便高效请添加链接描述,功能强大,需要的...

osc_63i522q0
41分钟前
14
0
二 javanio中的Channel transfer 内容

java nio中channel操作 分散 将channel中读取的数据分散写入多个buffer中 聚集 将多个buffer写入数据到同一个channel 应用 将消息头和消息体放入到不同buffer,便于分类处理应用 将消息头和消...

writeademo
41分钟前
26
0
如何更好的盘活和用好数据资产,企业如何构建数据竞争力的关键在这里!

在今年4月公布的《中共中央国务院关于构建更加完善的要素市场化配置体系机制的意见》中,“数据”首次作为一种新型生产要素写入中央文件中,与土地、劳动力、资本、技术等传统要素并列成为要...

osc_5asswvor
41分钟前
30
0
如何更好的盘活和用好数据资产,企业如何构建数据竞争力的关键在这里!

在今年4月公布的《中共中央国务院关于构建更加完善的要素市场化配置体系机制的意见》中,“数据”首次作为一种新型生产要素写入中央文件中,与土地、劳动力、资本、技术等传统要素并列成为要...

osc_e7clsgkf
42分钟前
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部