1.SOA
SOA(Service-Oriented Architecture)面向服务架构,将应用程序不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来。
SOA 不是特定的规范,是一种技术思想,一种理念,上图为 SOA 架构的参考模型。
SOA 是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义的接口进行通讯,不涉及底层编程接口和通讯模型。
阿里 Dubbo 算是 SOA 架构经典实现,其中应用之间的访问又遵循下面即将描述的 RPC 思想。
2.RPC
RPC(remote procedure call)远程过程调用,即本地调用一个函数或者对象方法,实际上是调用了远程机器上的函数或方法。
个人理解 RPC 和 SOA 一样也不是规范,不是协议,是一种技术思想,一种理念,其实你日常编码中一直在接触它,只是你并没有感知到而已。
比如耳熟能祥的 HTTP 和 WebService 就是 RPC 思想的一种很好的体现方式,HTTP 虽然有完备的体系和标准的规范,但满足不了企业内外部日益复杂的信息交互。
就这样许多优秀的 RPC 框架应运而生,封装了一些像负载均衡、熔断降级、服务注册、服务发现等等面向对象的高级特性。
流行的 RPC 框架有阿里的 Dubbo,微博开源的 Motan,Google 开源的 gPRC,百度开源的 bRPC,蚂蚁金服开源的 sofa-rpc 等等。
还有一些拘谨的 RPC 框架比如 JDK 1.1 开始出现的 RMI (两端必须都使用 Java),Spring MVC 中的 HttpInvoker(两端必须都引入 Spring)。
既然 RPC 框架需要远程去调用其他服务器上的资源,那么不可避免的需要进行网络通讯和传输,可以选择已有成熟的协议,当然也可以自定义。
比如 Google 自研的 gRPC 使用 HTTP2 作为通讯协议,默认使用自家的 Protocol Buffers 作为传输协议。
阿里大佬自研的 dubbo 支持九种不同的通讯协议和各自的传输定义,有兴趣的戳后面链接: