版权声明:本文引用https://yinwj.blog.csdn.net/article/details/48274255

接上篇:系统间通信1:阻塞与非阻塞式通信A

4.3 NIO通信框架

目前流行的NIO框架非常的多。在论坛上、互联网上大家讨论和使用最多的有以下几种:

  • 原生JAVA NIO框架:
    JAVA NIO通信框架基于多路复用IO原理,我们将详细讲解它的工作原理。

  • APACHE MINA 2:
    是一个网络应用程序框架,用来帮助用户简单地开发高性能和高可扩展性的网络应用程序。它提供了一个通过Java NIO在不同的传输例如TCP/IP和UDP/IP上抽象的事件驱动的异步API。

  • NETTY 4/5:
    Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。我们将讲解NETTY 4 的工作原理。另外说一句:MANA和NETTY的主要作者是同一人Trustin Lee。

  • Grizzly:
    Grizzly是一种应用程序框架,专门解决编写成千上万用户访问服务器时候产生的各种问题。使用JAVA NIO作为基础,并隐藏其编程的复杂性。

这个系列的博客文章中,我们将花费一些篇幅讲解java 5.0以后提供的java原生NIO框架(IO复用模式)来深入实现原理,然后我们再以Netty 4.0.X框架为线路进行重点讲解。主要是为了让您理解Channel、Buffer、Selection(SelectableChannel、SelectionKey、Selecotor)在NIO思想中的重要地位。

5. 通信方式

我们都是通过声带发声,通过口型和舌头控制音调、音量。声音传到对方的耳朵里,经过对方的大脑处理,再通过对方发声传到我们的耳朵里,于是我们的大脑得到了答案。

5.1 直接使用单纯HTTP请求

您对“简洁”的理解是什么样的呢?快速开发,快速部署、快速理解,还是调用速度快,并发支持高呢?无论您怎样理解“简洁”,有一个是事实您是无法否定的,很大一部分公司都是用单纯Http协议(使用标准WEB容器)+JSON信息格式的方式进行系统间通信。这种做法有几个好处:

  • 上手快:对于做WEB系统有较丰富积累的公司,并不需要思考“这个接口是给终端用户的还是给另外一个系统通信的”,依葫芦画瓢就可以把提供给系统间接口的。

  • 实现快:就像上面提到的一样,在不考虑实现细节的情况下,任务开发过WEB系统开发人员都可以接手这个工作,并且在分钟级别的时间内,就可以把接口功能实现出来。

  • 速度也不算慢:虽然很少有人去比较RMI和HTTP的速度,或者Dubbo和HTTP调用的速度,但是从各种介绍来看后者的速度虽然没有前者快,但是后者的速度还是可接受的。而且并发问题完全可以交给其他方案来解决(Nginx或者Haproxy,这个相关技术的讲述在“负载均衡层”技术方案系列博文中《负载均衡层技术》)

5.2 直接使用HTTP调用的问题

但是直接使用HTTP,还是有一些问题:

  • 由于其基于HTTP和为客户端交互设计的WEB容器,其速度毕竟会是一个问题。HTTP的通信过程如下:
  • 虽然HTTP协议中有很多方式可以优化访问速度。例如使用keep-alive保持Http Connection的连接复用,使用gzip压缩Body中的传输数据。但是受WEB服务器选择、HTTP通信特点的影响,速度就会受到影响。
  • 不好管理:这里所说的管理,并不是几百个接口不能使用word文档进行管理;而是说,当系统持续增大后,接口的复杂性将会成几何级递增。终端客户端一次请求的处理不再由一个系统进行处理,而是要使用多个系统进行关联计算才能得到结果。那,这时候怎么办?当然如果您非要说,各系统怎么交互调用交给终端客户机处理,好吧,我竟无言以对。。。
  • 实际上这种调用单纯HTTP + JSON信息格式的实现速度,真不是最快的。。。可能是因为有的团队并没有使用过其他的调用技术(在生产环境下),就没法比较。个人认为:没有最好的技术,只有最合适的技术,所以简单的业务系统间使用单纯的HTTP + JSON信息格式的技术,并没有什么不可以。

5.2 RPC

本来在规划这个系列的文章指出,我没有计划要专门写RPC调用方式的,因为RPC的实现错中复杂,根本不可能几篇文章就说清楚。例如:在能够找到的文章中,有的人把protocol buffer归结为一种RPC的实现;而更多的文章会直接将RPC和服务治理联系起来;还有文章将RPC框架作为一种SOA(面向服务的架构)的实现进行讲述。
实际上RPC技术之所以难以和其他技术/规范 区分开,除了上面描述的表面现象外,更重要的原因是,目前实现了RPC框架的软件,往往都是把各种相互交错的技术规范/定义进行整合实现,又或者借鉴了RPC中的部分思想。例如,阿里的RPC框架Dubbo,除了遵循RPC规则以外,重要的功能还放在了服务治理的实现;

5.3 MQ

消息队列又是另外一种系统间通信方式的实现。消息队列的规范目前有很多种,针对的场景和实现的性能各不相同。这个系列的博文我们将花一定的篇幅介绍JMS、AMQP两种消息队列协议和实现(特别是AMQP协议),然后介绍Kafka消息队列和使用场景,最后前瞻一下目前号称最快的消息队列ZMQ

6. 整合手段——ESB和服务治理

6.1 ESB

ESB(企业服务总线)是SOA的典型实现,各种ESB软件它们的共同特点是:将各个(有访问权限的)系统所提供服务集中在一起(进行管理、控制、协调),请求方只需要访问ESB软件,然后再由ESB软件代其访问指定的服务,最后返回处理结果。ESB的功能特点是代理

6.2 服务注册中心

服务注册中心,是SOA的另一种实现方式,和ESB最大的不同点是:“服务注册中心”主要提供各原子系统的服务注册、服务治理、服务隔离、权限控制。当客户端进行请求时,“服务治理”将告诉客户端到哪里去访问真实的服务,自己并不提供服务的转发。Dubbo就是一个典型的服务治理框架。

系统间通信1:阻塞与非阻塞式通信B相关推荐

  1. 系统间通信1:阻塞与非阻塞式通信A

    版权声明:本文引用https://yinwj.blog.csdn.net/article/details/48274255 从这篇博文开始,我们将进入一个新文章系列.这个文章系列专门整理总结了目前系统 ...

  2. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...

  3. 彻底搞懂阻塞、非阻塞、同步、异步

    原文原文原文原文原文原文原文原文原文原文原文原文原文原文原文原文原文原文原文原文 IO 概念区分: 四个相关概念: 同步(Synchronous) 异步( Asynchronous) 阻塞( Bloc ...

  4. 探究并发和并行、同步和异步、进程和线程、阻塞和非阻塞、响应和吞吐等

    一. 并发和并行 操作系统扫盲: 1. 对于单核cpu而言(不管单核单线程也好,单核多线程也罢),同一时间只能干一件事!!为了看起像可以"同时干多件事",windows操作系统把c ...

  5. 并发、并行、串行、同步、异步、阻塞、非阻塞

    并发.并行.串行.同步.异步.阻塞.非阻塞 实际上同步与异步是针对应用程序与内核的交互而言的. 同步过程中进程触发IO操作并等待(也就是我们说的阻塞)或者轮询的去查看IO操作(也就是我们说的非阻塞)是 ...

  6. 线程同步 阻塞 异步 非阻塞(转)

    同步:函数没有执行完不返回,线程被挂起 阻塞:没有收完数据函数不返回,线程也被挂起 异步:函数立即返回,通过事件或是信号通知调用者 非阻塞:函数立即返回,通过select通知调用者 这样看来异步和非阻 ...

  7. python gevent模块 下载_Python协程阻塞IO非阻塞IO同步IO异步IO

    Python-协程-阻塞IO-非阻塞IO-同步IO-异步IO 一.协程 协程又称为微线程 CPU 是无法识别协程的,只能识别是线程,协程是由开发人员自己控制的.协程可以在单线程下实现并发的效果(实际计 ...

  8. Socket阻塞与非阻塞,同步与异步、I/O模型

    [原文链接] 1. 概念理解 在进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式: 同步:       所谓同步,就是在发出一 ...

  9. socket阻塞和非阻塞的区别

    socket阻塞和非阻塞的区别 简单点说: 阻塞就是干不完不准回来,    非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的send和recv两个函数来说吧... 比如你调用se ...

最新文章

  1. 微服务架构如何影响软件开发文化?
  2. 自编自导自演年会节目《程序员》
  3. Myeclipse8.5配置本地tomcat
  4. 3.8 Anchor Boxes-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  5. python 获得github代码库列表
  6. 程序员广交四海朋友群
  7. React的工作原理,为什么我直接从JSBin copy到本地的代码无法执行
  8. 解决 /lib64/libc.so.6: version `GLIBC_2.15‘ not found 问题
  9. moodle3.7中文语言包
  10. 云图说 | 快速创建一个kubernetes集群
  11. 是什么意思网络语_网络语“随薪锁欲”是什么意思?
  12. 关于8086七种寻址方式的练习
  13. 【把P2P进行到底:讲述Jxta的故事(2)】
  14. nodejs npm和yarn 源管理模块 yrm(记录方便查看)
  15. 爆赞,java后端开发路线。
  16. FCN全卷积神经网络
  17. ArcGIS超级工具目录
  18. bzoj2827: 千山鸟飞绝 平衡树 替罪羊树 蜜汁标记
  19. matlab标定工具安装,标定工具(matlab仿真工具)
  20. 文本语义表征(Sentence-Bert、Simcse)的应用和实践

热门文章

  1. 本站源码免费下载-木庄网络博客
  2. Cisco路由器密码恢复方法
  3. 法学教授:洋文凭情结是对教育体制的嘲弄
  4. label自定义的惨痛教训
  5. java IO(输入输出) 字符流
  6. 二叉树的操作(二叉树的创建、先序遍历---先根、中序遍历----先左、后续遍历---后根)
  7. CS231n:卷积神经网络
  8. Java web学习(一)Servlet简介
  9. 977 AlvinZH过生日(背包DP大作战S)
  10. Page.LoadTemplate的使用