分布式JAVA应用

原创 2016年05月31日 17:12:06

《对于分布式JAVA应用》读书笔记,看过的知识没有归纳mark下来总是忘记,这里随意的mark一下,供需要的时候稍稍看看也能想起~~

1. 分布式JAVA应用

1.1 基于消息实现系统间通讯

系统间进行通讯,需要相互进行发送消息,消息可以根据需求而定,可以是字节流,字节数组,甚至java对象等。通常基于网络协议来实现,常用有TCP/IP和UDP/IP(这两种协议应该都有一定了解了吧,不详细说了)。这里说一下的是按POSIX标准分为同步IO和异步IO两种,同步IO常用的是BIO(blocking IO)和异步IO(Non-blocking IO),异步IO—AIO。

  • 同步:java程序自身处理IO读写。
  • 异步:Java将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS,OS需要支持异步IO操作API。
  • 阻塞:Java调用会一直阻塞到读写完成才返回。
  • 非阻塞:使用非阻塞IO时,如果不能读写Java调用会马上返回,当IO事件分发器会通知可读写时再继续进行读写,不断循环直到读写完成。

    HTTP/1.1出现后,有了Http长连接,这样除了超时和指明特定关闭的http header外,这个链接是一直打开的状态的,这样在NIO处理中可以进一步的进化,在后端资源中可以实现资源池或者队列,当请求来的话,开启的线程把请求和请求数据传送给后端资源池或者队列里面就返回,并且在全局的地方保持住这个现场(哪个连接的哪个请求等),这样前面的线程还是可以去接受其他的请求,而后端的应用的处理只需要执行队列里面的就可以了,这样请求处理和后端应用是异步的.当后端处理完,到全局地方得到现场,产生响应,这个就实现了异步处理。


简单而言:
  • BIO是一个连接一个线程。
  • NIO是一个请求一个线程。
  • AIO是一个有效请求一个线程。

1.2 基于远程调用方式实现系统间通讯

系统间通讯时可以通过调用本地的一个Java接口的方法,透明地调用远程的Java实现。具体细节由Java或框架完成。实现有基于RMI,webservice,hession,restful等等。

对于基于Java自身技术实现,与基于开源框架具体实现系统间通讯不详细mark。

2. 大型分布式Java应用与SOA

分别讲述以下几种方式实现SOA平台,详情略:

  • 基于SCA
  • 基于ESB
  • 基于Tusany
  • 基于Mule

3. 深入理解JVM

3.1 Java代码执行机制

3.1.1 Java源码编译机制

Sun JDK将Java源码编译为class文件的步骤:
1. 分析和输入到符号表(Parse and Enter)
2. 注解处理(Annotation Processing)
3. 语义分析和生成class文件(Analyse and Generate)
3.1 分析包括关联表达式、变量、方法、类型;检查变量;推导泛型;检查类型匹配;常量折叠;等步骤。
3.2 class文件不止字节码,还有辅助jvm执行class附加信息:
结构信息、元数据、方法信息
eg: 执行javac -g Foo.java编译,然后通过javap -c -s -l -verboseFoo可以查看编译后的class文件,结合class文件格式可以看到其中关键内容。

3.1.2 类加载机制

类加载机制指的是class文件加载到JVM,并形成class对象的机制。之后应用就可以对class对象进行实例化并调用,类加载机制可在运行时动态加载外部类、远程网络下载过来的class文件等。分为3个步骤:
1. 装载(load)
装载指二进制字节码加载到JVM中,JVM通过类的全限定名及类加载器(ClassLoaderA实例)完成加载。采用以上两个元素来标识一个被加载的类:类的全限定名+ClassLoader实例ID。
2. 链接(Link)
链接过程负责对二进制字节码的格式进行校验、初始化装载类中的静态变量及解析类中调用的接口、类。
3. 初始化(Initialize)
初始化过程即执行类中的静态初始代码、构造器代码及静态属性的初始化,在以下四种情况会被触发:
3.1 调用了new;
3.2 反射调用了类的方法;
3.3 子类调用了初始化;
3.4 JVM启动过程中指定的初始化类。

ClassLoader
JVM的类加载通过ClassLoader及其子类来完成,有以下四种ClassLoader:
1. Bootstrap ClassLoader
Sun JDK采用C++实现此类,非ClassLoader子类,代码中无法获取,JDK启动时会初始化此ClassLoader,并由ClassLoader完成对$JAVA_HOME中jre/lib/rt.jar的class进行加载。
2. Extension ClassLoader
JVM用此ClassLoader来加载扩展功能的一些jar包,例如Sun JDK目录下有dns工具jar包等,sun JDK中的ClassLoader对于的类名为ExtClassLoader。
3. System ClassLoader
JVM用此ClassLoader来加载启动参数中指定的Classpath中的jar包及目录,在Sun JDK中ClassLoader对应的类名为AppClassLoader。
4. User-Defined ClassLoader
User-Defined ClassLoader是开发人员继承ClassLoader抽象类自行实现的ClassLoader,可以用于加载非Classpath中(例如从网络上下载的jar或二进制)的jar及目录、还可以在加载前对class文件做一些动作,例如解密等。

注意:JVM的ClassLoader采用的是树形结构,除了Bootstrap ClassLoader外,其他ClassLoader都会有parent ClassLoader。例如User-Defined ClassLoader默认的parent ClassLoader为System ClassLoader。加载类时通常会按照树形结构的原则进行,也就是说,首先从parent ClassLoader中尝试进行加载,当parent无法加载时,再从其下级ClassLoader进行加载。

3.1.3 类加载机制

读书总结——《分布式java应用 基础与实践》

拜读了大神多年前的著作,收获良多。这也是我开始写博客的初衷,哪怕仅仅学到了1% ,也以文字记录下来,对自己是个促进。以后也会继续坚持将学习的书籍摘要或心得记录下来。 这本书出版于2010年,距今已6...
  • sosfnima
  • sosfnima
  • 2016年07月21日 16:12
  • 1532

《分布式java应用:基础与实践》笔记3

《分布式java应用:基础与实践》笔记3 3.1 java代码执行机制 3.1.1源码编译机制 3.1.2 类加载机制 装载:将字节码装载至JVM。识别类:...
  • lylhjh
  • lylhjh
  • 2016年05月30日 18:17
  • 629

分布式java应用

这是java分布式开发的主要技术架构图:      对于分布式java应用,通常有两种典型的实现方式: 1.基于消息方式实现系统间的通信。 消息方式的系统间通信,通常基于网...
  • w1014074794
  • w1014074794
  • 2015年04月19日 22:28
  • 734

我的读书笔记--关于java分布式应用

最近因为有Java分布式应用的需求,因此,我搞到了林昊的《分布式Java应用基础与实践》(以下简称F)这本书。我决定花2个月时间,把这本书仔细研读一下,好好学习,多多实践。另外,我会把自己的读书心得、...
  • lxlhu
  • lxlhu
  • 2015年03月24日 20:16
  • 772

大型分布式 Java 应用

当应用从集中式步入分布式, 随着系统功能的越来越丰富, 应用就逐步从一个由 10 个系统以下构成的应用逐步发展为 100 个, 甚至 1000 个系统构成的应用, 随着系统越来越多,如何管理和运维好一...
  • pangjiuzala
  • pangjiuzala
  • 2015年07月30日 13:12
  • 1367

分布式Java应用基础与实践.pdf 免费下载

下载地址: 分布式Java应用基础与实践.pdf
  • jiongyi1
  • jiongyi1
  • 2018年02月02日 13:42
  • 50

分布式java应用-基础与实践(林昊著)下载地址

http://download.csdn.net/index.php/mobile/source/detail/u010046354/5701967
  • qwqw3333333
  • qwqw3333333
  • 2017年06月22日 13:09
  • 179

状态机在分布式系统中的应用

前言在大型的分布式系统中,经常会涉及到状态的改变,这里的状态变化可以分很多种,最极端的情况是,任何状态之间都可以互相切换。这种状态之间的切换,转变,更加官方一点的称为叫状态机。这个词可能很多人会感到比...
  • Androidlushangderen
  • Androidlushangderen
  • 2017年09月10日 15:58
  • 814

Java分布式应用学习笔记08JMX规范与常用的监控场景

转自:Java分布式应用学习笔记08JMX规范与常用的监控场景 1.  JMX规范 JMX是“Java管理扩展的”的缩写,它和其他JavaEE类似也是曾经的Sun提出的一种规范(规约),从...
  • guoqmao
  • guoqmao
  • 2016年08月17日 11:08
  • 1210

《分布式Java应用:基础与实践》扩展阅读链接

《分布式Java应用:基础与实践》扩展阅读链接
  • yang_net
  • yang_net
  • 2010年08月31日 17:01
  • 1810
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分布式JAVA应用
举报原因:
原因补充:

(最多只允许输入30个字)