系统间通信
一、人类的交流
-
要理解系统服务间的交流,拿人类的交流来做类比是个不错的选择。想想人类交流时需要哪些要素呢?其实主要不外乎这几种:
- 相同的语言(即双方要基于相同的"协议"之下)
- 必要的传播介质(实在的物理介质,空气纸张等都行)
- 约定好的处理信息的方式(是一问一答 或是先记录后处理等,不然你老让人家等着你早晚被揍···)
而这些都能抽象成计算机系统服务中对应的概念(行之有效的概念往往是简单且趋同的),大概有下面几种。其中很多知识现在还没掌握,不过慢慢来吧,总要拿下它们的~~~~~~~~
二、系统服务间的交流
1. 相同的语言(协议)
就像人类互相需要使用相同的语言进行交流,计算机服务也必须使用互相能识别的消息格式进行交互,常用的消息格式有xml,json,TLV等。
2. 传播信息的介质
人类交流时往往需要某种介质传播信息,如空气、纸张甚至是眼神.... 同样的,网络信息的传递也需要物理介质的帮助,以及工作在其上的一系列相关协议。这部分就是计算机网络通信了,简单来说有物理层,数据链路层,网络层(IP协议),传输层(TCP、UDP协议),应用层(HTTP、FTP、RTSP、SSH协议等等),具体的相关协议细节以后补充。
3. 处理信息的方式
人类交流时可以是面对面直接问答形式的,也可能是邮件、短信等延时应答形式的,对应的是不同的业务场景。在计算机里进行通信时同样也有多种处理方式:
BIO:即阻塞模式,通信时一直等待对方的响应,一个一个请求的处理,高并发时很可能造成后续的请求等待超时。虽然可以在服务端新启线程处理请求,当由于请求还是一个个接收的,所以本质上并没有解决阻塞。同时操作系统对线程的数量都是有限制的,线程数量过多时在不同线程间的切换也会浪费CPU资源。
NIO:即IO复用模式、待研究。JAVA NIO框架(Channel,Buffer,Selection等概念)、Netty框架。
4. 通信方式
不同的协议都能实现通信功能,最适合本系统的通信协议才是最好的。
1、HTTP方式:简单易上手,开发快,速度还能接受------亢余数据的传输(多次握手,请求头数据),大量接口时难管理
2、RPC调用:有多种实现,如JAVA RMI,Dubbo(包含服务治理功能),ESB(特点是代理)等
3、MQ方式:包括多种消息协议(AMQP,STOMP,MQTT等),多种常用的消息队列软件(activeMQ,rabbitMQ,recketMQ等)
5. 各系统间通信的整合方式
如何管理维护茫茫多的系统间的互相调用?有两种常见的实现:
1、ESB方式:有服务顺序编排/定义,服务实现隔离、多协议支撑、协议翻译、转发代理、事务控制等功能
2、服务注册中心(很多产品用zookeeper实现):和ESB最大的不同点是:“服务注册中心”主要提供各原子系统的服务注册、服务治理、服务隔离、权限控制。当客户端进行请求时,“服务治理”将告诉客户端到哪里去访问真实的服务,自己并不提供服务的转发。Dubbo就是一个典型的服务治理框架。
话说这markdown编辑器还挺有意思的!!!