Akka作为一个天生用于构建分布式应用的工具,当然提供了用于分布式组件即Akka Remote,那么我们就来看看如何用Akka Remote以及Akka Serialization来构建分布式应用。
背景
很多同学在程序的开发中都会遇到一个问题,当业务需求变得越来越复杂,单机服务器已经不足以承载相应的请求的时候,我们都会考虑将服务部署到不同的服务器上,但服务器之间可能需要相互调用,那么系统必须拥有相互通信的接口,用于相应的数据交互,这时候一个好的远程调用方案是一个绝对的利器,主流的远程通信有以下几种选择:
RPC(Remote Procedure Call Protocol)
Web Service
RMI (Remote Method Invocation)
JMS(Java Messaging Service)
这几种方式都是被采用比较广泛的通信方案,有兴趣的同学可以自己去了解一下,这里我会讲一下RMI和JMS。
JAVA远程调用
RMI和JMS相信很多写过Java程序的同学都知道,是Java程序用来远程通信的主要方式,那么RMI和JMS又有什么区别呢?
1.RMI
i.特征:
同步通信:在使用RMI调用远程方法时,线程会持续等待直到结果返回,所以它是一个同步阻塞操作;
强耦合:请求的系统中需要使用的RMI服务进行接口声明,返回的数据类型有一定的约束;
ii.优点:
实现相对简单,方法调用形式通俗易理解,接口声明服务功能清晰。
iii.缺点:
只局限支持JVM平台;
对无法兼容Java语言的其他语言也不适用;
2.JMS
i.特征:
异步通信:JMS发送消息进行通信,在通信过程中,线程不会被阻塞,不必等待请求回应,所以是一个异步操作;
松耦合:不需要接口声明,返回的数据类型可以是各种各样,比如JSON,XML等;
ii.通信方式:
(1)点对点消息传送模型
顾名思义,点对点可以理解为两个服务器的定点通信,发送者和接收者都能明确知道对方是谁,大致模型如下:
(2)发布/订阅消息传递模型
点对点模型有些场景并不是很适用,比如有一台主服务器,它产生一条消息需要让所有的从服务器都能收到,若采用点对点模型的话,那主服务器需要循环发送消息,后续若有新的从服务器增加,还要改主服务器的配置,这样就会导致不必要的麻烦,那么发布/订阅模型是怎么样的呢?其实这种模式跟设计模式中的观察者模式很相似,相信很多同学都很熟悉,它最大的特点就是较松耦合,易扩展等特点,所以发布/订阅模型的大致结构如下: