`

读书笔记: 《分布式JAVA应用 基础与实践》 第一章 分布式JAVA应用

阅读更多

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

 

    使用分布式的要点就是尽量不要使用分布式。

 

    实现分布式系统通信,主要有两种方式:

     1.       基于消息方式实现系统间的通信

     1.1    基于 JAVA 自身技术实现消息方式的系统间通信。

     1)        TCP/IP + BIO

     2)        UDP/IP + BIO

     3)        TCP/IP + NIO

     4)        UDP/IP + NIO

 

     JAVA7 开始,提供 AIO 方式,跟 NIO 一样是异步 IO ,较之 NIO AIO 一方面简化了程序的编写,流的读取和写入都同操作系统来代替完成 Klein 一方面省去 NIO 中程序要遍历事件通知队列( Selector )的代价。 Windows 基于 IOCP 实现了 AIO Linux 目前只有基于 epoll 模拟实现的 AIO

 

     1.2    基于开源框架实现消息方式的系统间通信。

   如 Apache Mina, Jboss Netty

 

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

    2.1    RMI 方式

    RMI Remote Method Invocation )是 JAVA 用于实现透明远程调用的重要机制。 JDK6 以前版本基于 TCP/IP + BIO 方式实现,以下是基于 RMI 的一次完整的远程通信过程:

    1 )客户端发起请求,请求转交至 RMI 客户端的 stub 类;
    2
stub 类将请求的接口、方法、参数等信息进行序列化;
    3
基于 socket 将序列化后的流传输至服务器端;
    4
服务器端接收到流后转发至相应的 skelton 类;
    5
skelton 类将请求的信息反序列化后调用实际的处理类;
    6
处理类处理完毕后将结果返回给 skelton 类;
    7
Skelton 类将结果序列化,通过 socket 将流传送给客户端的 stub
    8
stub 在接收到流后反序列化,将反序列化后的 Java Object 返回给调用者。

     Spring RMI 可以简单地实现 RMI 方式的 JAVA 远程调用

 

     2.2      WebService 方式

JDK6 集成了 WebService, 也可以使用 CXF AXIS 等开源项目

 

另外,JMS方式,也是应用非常广泛的一种方式,不知作者为何没题,这里稍为补充一下:

 

JMS Java 消息服务 Java Message Service 应用程序 接口是一个 Java 平台 中关于面向 消息中间件 MOM )的 API ,用于在两个应用程序之间,或 分布式系统 中发送消息,进行异步通信。
以下是 JMS 中的一次远程通信的过程:
     1
)客户端将请求转化为符合 JMS 规定的 Message
     2
)通过 JMS API Message 放入 JMS Queue Topic 中;
     3
)如为 JMS Queue ,则发送中相应的目标 Queue 中,如为 Topic ,则发送给订阅了此 Topic JMS Queue
     4
)处理端则通过轮循 JMS Queue ,来获取消息,接收到消息后根据 JMS 协议来解析 Message 并处理。

 

常用的消息中间件有 IBM MQSeries WebLogic JMS Active MQ JORAM OpenJMS 等。

分享到:
评论

相关推荐

    大型网站系统与Java中间件实践读书笔记(一)

    自己的读书笔记,这是《大型网站系统与Java中间件实践》的第一章的读书笔记。主要讲解了分布式系统的基本知识。

    JavaEE企业级分布式高级架构师018期 94G

    │ │ 第一章第1节: 04-mybatis基础应用之mapper代理开发方式.mp4 │ │ 第一章第1节: 06-mybatis基础应用之全局配置文件.mp4 │ │ 第一章第1节: 08-mybatis基础应用之输入映射2.mp4 │ │ 第一章第1节...

    J2EE学习笔记

    第一章:JAVA的输入输出流 2 1.1:概述: 2 1.2:主要输入输出类 3 1.3例程 建立聊天室: 5 第二章:JAVA设计模式 18 2.1:创建型设计模式 19 2.2:结构型设计模式 32 2.3:行为型设计模式 83 第三章:JAVA基本语法 118...

    Java秒杀系统方案优化高性能高并发学习实战源代码以及笔记..zip

    数据库设计(业务第一原则, 无需太注意三大范式) 完成商品列表页 完成商品详情页 完成订单详情页 第4章-秒杀压测-Jmeter压力测试 学习使用jmeter做压力测试, 学习jmeter变量定义, redis压力测试工具 知识点 jemter...

    worldwindjava源码-data-intensive-book:设计数据密集型应用书的注意事项

    世界风java源码读书笔记 | 2020年8月竣工 设计数据密集型应用程序的注意事项 写的 简介: 数据系统架构的广泛概述以及如何为特定应用程序选择数据库。 第 1 部分 基本思想 第 1 章 - 术语 第 2 章 - 数据模型和查询...

    java版飞机大战源码-java-performance:Java系统性能优化实战

    java版飞机大战源码 java-performance 介绍 书配套例子,Java系统性能优化实战 ,程序员的优化宝典。购买地址可以从。...读了家智的第8章“JIT优化”、第10章“ASM运行时增强”、第11章“JSR269编译

    高级java笔试题-reading-notes:做阅读笔记和练习

    看了前三章,做了响应的习题,第一次接触FP风格,感觉这种编码方式很赞,如果只是学会想使用Java8 Lambda可读前三章节,后面的难度好大/(ㄒoㄒ)/~~ 写给大忙人看的JavaSE8 同上述的Java8函数式编程一起看的,相比...

    asp.net知识库

    Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集的反射 实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据...

    高质量Spring Cloud Alibaba学习笔记

    第一章 微服务介绍 第二章 微服务环境搭建 第三章 Nacos Discovery--服务治理 第四章 Sentinel--服务容错 第五章 Gateway--服务网关 第六章 Sleuth--链路追踪 第七章 Rocketmq--消息驱动 第八章 SMS--短信服务 第九...

    java办公用品管理系统源码-LFS172x-Introduction-to-Hyperledger-Sovereign-Identity-B

    第一章:少了点什么。 信任在互联网上被打破 -在互联网上,没有人知道你是一只狗你可以成为任何你想成为的人。 如果你愿意,你可以完全重新定义自己。 你不必担心其他人给你的位置。 他们不会看着你的身体做出假设。...

Global site tag (gtag.js) - Google Analytics