基本概念:
分布式应用:如果是一个业务被拆分成多个子业务部署在不同的服务器上
集群:同一个业务部署在多台服务器上
系统间通信:分布式应用的子系统之间并不是完全独立的,它们需要相互通信来共同完成某个功能
业界通常有两种方式来实现系统间通信:
1、RPC调用:
客户端不需要知道调用的具体实现细节,只需直接调用实际存在于远程计算机上的某个对象即可,但调用方式看起来和调用 本地应用程序中的对象一样

2、基于消息队列的方式:
由应用中的某个系统负责发送信息,由关心这条消息的相应系统负责接收消息,并在收到消息后进行各自系统内的业务处理。
消息内容可以非常简单,比如只包含文本字符串 ;也可以很复杂,比如包含字节流、 字节数组, 还可能包含嵌入对象, 甚至是 Java 对象(经过序列化的对象)。
消息在被发送后可以立即返回,由消息队列来负责消息的传递, 消息发布者只管将消息发 布到消息队列而不用管谁来取,消息使用者只管从消息队列中取消息而不管是谁发布的, 发布者和使用者都不用知道对方的存在

顺路说一下,当下互联网行业中的各种分布式和服务化系统的开发本质上就是解决一个问题:系统如何进行拆分和集成。
服务拆分:面向领域思想;
服务集成:RPC、REST、消息通信等多种技术体系。
从软件设计角度讲,无论是RPC还是REST 都存在一定的耦合度问题。 耦合度包括技术耦合、空间耦合和时间耦合等不同的表现形式, 消息通信制能够降低这几种耦合度。