仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 478|回复: 10
打印 上一主题 下一主题

[学习教程] JAVA网页设计Java 7 SDP:一次编写,各处运转,偶然还运转得超炫仓酷云

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:22:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
前些天,在CSDN上看到了一个消息,说是net网页编程网页编程AJAX成功在Linux上运行,这一点对我触动很大,而且引发了我许多感叹,所以想写出来分享一下。本文将复杂先容Java7SDK里引进的Java套接字间接协定(SocketsDirectProtocol,SDP),这项新手艺是个十分冲动民气的冲破。假如要对InfiniBand的远程间接内存存取(RemoteDirectMemoryAccess,RDMA)举行native会见,SDP就可以让超高功能盘算(UltraHighPerformanceComputing,UHPC)社区在这类不罕见的场景下利用Java通用的特征和上风。RDMA为低提早使用供应了一种协定,能够间接会见其他盘算机的内存,而不必要操纵体系的介入。UHPC社区对低提早和高吞吐量的请求最为严厉,并且不容让步,UHPC天然就必要利用最好的RDMA。跟着Java7引进SDP,UHPC社区就能够使用Java平台编写能间接使用InfiniBandRDMA功效的使用代码了。
在深切懂得新的JavaSDP之前,让我们扼要回忆一下Java收集编程和套接字API的汗青。
SunMicrosystems于1995年推出Java,并宣传Java能“一次编写,各处运转”,这句标语如今已然广为人知。我们都晓得这面前的头脑实在很复杂:用C++代码编写的使用要在一切情况下构建/部署是极为坚苦的,寻求靠近“各处运转”的可移植性就更难了,但如今你能够用一种叫Java的言语编写使用代码,使用能够在假造机(并非底层的操纵体系实行情况)上构建/部署。这极年夜地削减了Java使用程序员对可移植性的存眷,而是把可移植性完整交给Java假造机(JVM)去向理。JVM答应:假如你的Java代码能够在针对某个特定底层操纵体系的JVM上构建/部署,只需其他操纵体系有可用、兼容的JVM,平台就可以确保完整不异的代码能够在下面运转。而不必要分外的编译和预处置器宏指令。(有人记得C++里的#ifdef么?JVM可让使用程序员挣脱这类疾苦。)
这类头脑十分有效,失掉了使用编程社区的普遍承认。正如我们所知,Java十分敏捷地盛行起来——之前所未有的速率被周全承受,盘算机汗青上的良多编程言语平台都没有这么敏捷地提高过。
Sun一入手下手供应的JVM只能运转在三个操纵体系上:1、Solaris,2、Linux,3、Windows。微软在1993年公布的Windows就带有WinSOCK协定栈,以是Windows能够做TCP/IP收集编程,并且完整撑持API。各类*nix体系从二十世纪七十年月起就一向在撑持TCP/IP。微软引进WinSOCK对Java的成形来讲相对需要。没有WinSOCK,就不克不及公布撑持java.net.*和java.io.*这些APIs的WindowsVM。没有WinSOCK,Java构建的VM在把持天下桌面的操纵体系上就不具有完全的收集功效了。跟着Windows完整撑持TCP/IP,运转Java的桌面数目大概增添了上千倍。
事变产生了变更

固然,Java仍旧是“一次编写,各处运转”。可移植性仍旧是主要义务。但如今用Java7和SDP,JVM能做更多的事变。可移植性不再是独一的重点;对JVM来讲,满意超高功能用例的需求也是很主要的义务。借助SDP,JVM不必要修正收集、套接字API,就能够间接使用InfiniBand生成的才能。InfiniBand要比以太网快良多。UHPC社区常常会选择InfiniBand作为物理收集层的供应者。
前面我们会先容InfiniBand是甚么,和Java7VM怎样让使用使用InfiniBand原生的功效。
有件风趣的事变要注重(出格是从汗青的角度来看):Java决意在两个操纵体系上供应SDP撑持,而微软Windows其实不在个中。Java7SDP撑持的两个操纵体系是Solaris和Linux。Solaris从版本10入手下手就对SDP供应了标准的撑持。只需你有物理InfiniBand网卡,Java7SDP就能够当即事情。Linux则经由过程OpenFabricsEnterpriseDistribution(OFED)包撑持SDP。要确认Linux版本有无设置OFED设备驱动器,只必要在安装物理InfiniBand网卡适配器以后复杂键进上面的命令:
  1. egrep"^[t]+ib"/proc/net/dev
复制代码
假如命令有输入,就标明你能够在这个操纵体系上利用Java7SDP。
一切的java.net.*和java.io.*使用代码仍旧能在微软Windows上用Java7VM运转……但它用不了SDP,运转时的物理层供应者仍旧是以太网。即便你在经由过程WinSOCKDirect子体系供应InfiniBand撑持的WindowsServer版本上运转,也用不了SDP。一切的内容仍旧能在Windows上运转,但速率会比在非Windows(即*nix)上运转得慢。
事变的确产生了变更

如今让我们谈谈Java内里毗连操纵体系收集协定栈的API。起首,下表显现了收集层尺度的开放体系互连(OSI)模子。
#

协定
JavaSDK的中心APIs
7.
使用层
HTTP、FTP、SSL等
java.net.HttpURLConnection、javax.servlet.HttpServlet
6.
暗示层
#在Java里,OSI使用层和暗示层没有真正区分
5.
会话层
NetBios、RCP
#JavaSDK中心对OSI会话层没有撑持
4.
传输层
TCP、UDP
java.net.Socket、java.net.ServerSocket、java.net.Datagram
3.
收集层
IP
Java.net.InetAddress
2.
数据链路层
PPP
#JavaSDK中心对OSI数据链路层没有撑持
1.
物理层
以太网、InfiniBand
#JavaSDK中心对OSI物理层没有撑持
不外……
如今有了Java7SDP(VM毗连InfiniBand和java.net.*、java.io.*中心APIs的桥梁)
从OSI收集层的视角看,Java7SDP能让Java使用代码“更靠近金属”(物理层)。JavaSDP供应了一种间接(SDP里的D)的体例,借助VM就能够毗连使用代码和native、物理的InfiniBand。Java7对SDP的撑持不必要使用修正利用java.net.*和java.io.*APIs的代码。别的,只需设置好JVM到InfiniBand操纵体系设备和库(即InfiniBand的VERBs层API)的特定毗连点,利用java.net.*和java.io.*的使用代码就可以绕过传统的收集协定栈“间接”会见InfiniBand(也就是利用Java针对OSI第四层传输层的API,就能够绕过OSI第三层收集层和第二层数据链路层,间接会见OSI第一层物理层)。对功能的影响和收到的报答都十分明显。
借助Java7和SDP,Java如今能够撑持远程间接内存存取(RDMA)

RDMA是跨收集在两个JVM历程(在*nix用户地点空间中实行)之间挪动使用缓冲区的一种体例。RDMA分歧于传统的收集接口,由于它绕过了操纵体系。这同意JavaSDP经由过程RDMA供应:1、相对最低的提早,2、最高的吞吐量,3、起码的CPU占用率。
借助Java到RDMA的毗连点,SDP也能让Java具有十分无力的“零拷贝”才能。“零拷贝”操纵指CPU不必将一个内存地区的数据拷贝到另外一个内存地区。收集协定栈的零拷贝版本年夜年夜提拔了特定使用程序的功能,也能更无效天时用体系资本。CPU能够持续处置其他义务,数据拷贝则由呆板的另外一部分并行处置,如许就提拔了功能。别的,零拷贝操纵削减了在用户空间和内核空间之间切换所损耗的工夫。零拷贝也能更无效天时用体系资本,由于大批的拷贝操纵是绝对复杂的义务,假如其他复杂的体系组件就可以做拷贝,那让庞大的CPU往实行就太华侈了。必要注重的是,我们会商的零拷贝并非指java.nio.channels.FileChannel的transferTo()完成的零拷贝。这里的零拷贝功能更高。借助Java7SDP,你能够间接利用原生的InfiniBand零拷贝协定完成。
在典范的Java部署情形下,SDP直不雅上是甚么样的?

下图中,Node1(java.net.Socket写进者)和Node2(java.net.ServerSocket监听器)部署在设置撑持了SDP的Java7VM上,两个JVMs能够跨InfiniBand收集相互互换使用数据缓冲区,而不必要任何OS体系挪用或服务挪用。使人难以相信的是,Java数据传输完整绕过了两个操纵体系。

<br>

  • Java7使用Node1(JVM启动时利用SDP)利用java.net.SocketAPI把使用数据块跨收集写给java.net.ServerSocket监听器。
  • JVM启动时利用SDP,以是会完整绕过操纵体系的TCP/IP栈——使用数据会间接写到InfiniBand的RDMA(请求网卡的物理供应者是InfiniBand)。
  • Java7使用Node2(JVM启动时也利用SDP)利用java.net.ServerSocketAPI监听使用数据块,使用数据块由java.net.Socket写进者经RDMA跨收集写进。(请求网卡的物理供应者是InfiniBand)
  • 数据会间接写进Java7VM的使用缓冲区!不必要操纵体系或服务挪用——既不必要Node1的操纵体系,也不必要Node2的操纵体系。这就是Java7SDP的功效。
一样的使用运转在撑持SDP的Java7上和运转在Java6上,为何会有功能差别?

下图深切、具体地注释了上图里的Node2在两种场景下的情况:

  • 利用设置了SDP的Java7(下图右边):Node2要吸收Node1传输的数据,经由InfiniBand的VERBS/RDMA协定栈、抵达Java使用必要几个步骤?只必要一个!(这对UHPCJava使用来讲是个好动静;UHPC社区如今能够用Java7完成他们必要的功效了)。
  • 利用没有SDP的Java6(下图右侧):Node2要吸收Node1传输的数据,是如何经由OSI收集层协定栈、抵达Java使用的呢?又必要几步呢?必要五步。(这是我们熟习的TCP/IP协定栈,而不是SDP。它合用于年夜多半情形,但不克不及办理UHPC社区的成绩。UHPC社区利用Java6但是徒然)。

<br>
如何办理、设置Java7VM,让它撑持SDP?

上面的设置部分摘取自Oracle先容Java7SDP的教程。
SDP设置文件是个文本文件,JVM启动时会从当地文件体系读取该文件。SDP设置文件有两种分歧范例的条目。不管哪一种范例,每一个条目都写成一行:

  • 一种是SDP设置正文
  • 一种是SDP设置划定规矩
正文行以#字符开首,#字符前面的一切内容城市被疏忽。
至于划定规矩行,有两品种型:

  • bind划定规矩
  • connect划定规矩
bind划定规矩暗示,只需TCP套接字绑定到与划定规矩婚配的地点和端口,就会利用SDP协定举行传输。connect划定规矩则暗示,没有绑定的TCP套接字实验毗连婚配划定规矩的地点和端口时,就会利用SDP协定举行传输。
在SDP设置文件里指定例则后,JVM就可以明白晓得甚么时分用InfiniBand的VERBS/RDMA协定栈往交换一般的TCP/IP协定栈。
第一个关头字用来标明划定规矩是bind仍是connect。第二部分指定主机名或IP地点。当指定为IP地点时,你也能够指定暗示IP地点局限的前缀。第三部分即最初一个部分是端标语或端标语局限。
我们看看示例设置文件里的以下部分:
#绑定到192.0.2.1时利用SDP
bind192.0.2.1*
#毗连到192.0.2.*上的一切使用服务时都利用SDP
connect192.0.2.0/241024-*
示例文件里的第一条划定规矩指定,当地IP地点192.0.2.1上的一切端口(*)城市利用SDP。你应当为分派到InfiniBand适配器的每一个当地地点都增加一条bind划定规矩,个中InfiniBand适配器相称于撑持InfiniBand的网卡。假如你有多个InfiniBand适配器,你应当为分派到这些适配器的每一个地点都指定一条bind划定规矩。
示例文件里的第二条划定规矩标明,只需毗连到192.0.2.*,并且方针端口年夜于即是1024,就会利用SDP。IP地点里的前缀/24暗示,32位IP地点的前24位都切合指定的地点。IP地点的每部分都占8位,以是24位就标明IP地点应当切合192.0.2,并且最初一个字节能够是恣意值。端口部分的-*暗示“及以上”。端口局限(好比1024-2056)也是无效的,并且指定的局限是闭区间。
怎样启动利用SDP的Java7VM?
  1. &>java-Dcom.sun.sdp.conf=sdp.conf-Djava.net.preferIPv4Stack=trueApplication.class
复制代码
必要注重的是,启动时要指定收集格局为IPv4Stack。只管Java7和InfiniBand都撑持IPv6收集格局,但Solaris和Linux都不撑持二者之间的映照。以是启动撑持SDP的Java7VM时,仍是要利用基本、牢靠的IPv4收集格局。
在撑持SDP的Java7VM上运转使用,估计功能能提拔几?

这才是最终成绩!利用Java7SDP究竟能劳绩甚么?本文明显给不出断定的谜底。功能的提拔取决于多方面的要素。在本文快停止的时分,让我们懂得一下断定的内容:
InfiniBand要比以太网快良多。高功能盘算征询委员会公布的研讨给出了详细的目标,这些目标标明InfiniBand在低提早方面比10G以太网好6倍,在吞吐量功能上也是10G以太网的3.7倍。
别的,Java7SDP利用RDMS和最好的零拷贝完成。数据传输完整绕过了操纵体系的TCP/IP栈和高低文切换,数据传输假如经由TCP/IP栈,就必要在内核地点空间里的体系挪用和用户地点空间里的使用代码缓冲区之间举行高低文切换。
一切这些,JavaSDKAPI都做到了百分百的通明。利用java.net.*和java.io.*的Java使用代码不必要修正任何内容。
只管事变已产生了很年夜的变更,但Java的中心精力仍旧没有变。最入手下手的时分,JVM卖力将使用代码和可移植性断绝开来,一如往昔,JVM再次单独托付了主要功效:此次是SDP。现实上,Java本来的标语仍旧合用,我们稍作修正就可以表现如今使人冲动的内容:Java7SDP——一次编写,各处运转,偶然还运转得超炫!

令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。
变相怪杰 该用户已被删除
沙发
发表于 2015-1-20 22:09:22 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
板凳
发表于 2015-1-30 06:41:00 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
深爱那片海 该用户已被删除
地板
发表于 2015-1-31 05:13:39 | 只看该作者
那么我书也看了,程序也做了,别人问我的问题我都能解决了,是不是就成为高手了呢?当然没那么简单,这只是万里长征走完了第一步。不信?那你出去接一个项目,你知道怎么下手吗,你知道怎么设计吗,你知道怎么组织人员进行开发吗?你现在脑子里除了一些散乱的代码之外,可能再没有别的东西了吧!
若相依 该用户已被删除
5#
发表于 2015-2-6 17:25:01 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
小女巫 该用户已被删除
6#
发表于 2015-2-17 09:18:52 | 只看该作者
是一种使用者不需花费很多时间学习的语言
乐观 该用户已被删除
7#
发表于 2015-3-5 18:51:13 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
admin 该用户已被删除
8#
发表于 2015-3-8 11:57:18 | 只看该作者
是一种突破用户端机器环境和CPU
第二个灵魂 该用户已被删除
9#
发表于 2015-3-10 20:39:26 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
分手快乐 该用户已被删除
10#
发表于 2015-3-17 09:55:01 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
金色的骷髅 该用户已被删除
11#
发表于 2015-3-24 06:10:49 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-9-22 22:24

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表