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 支持九种不同的通讯协议和各自的传输定义,有兴趣的戳后面链接:https://blog.csdn.net/xiaojin21cen/article/details/79834222

写给自己的 SOA 和 RPC 理解的更多相关文章

  1. 透析SOA、RPC、SOAP、REST、ICE、ESB模型发展史

    最初的程序全是单机程序,没有网络,没有RPC,更没有RESTful.程序猿写的东西孤独运行在单机上. 那时的程序猿们语言相通,参与开发同一套系统的团队可以面对面沟通. 网络出现了.网络,也带来变乱.网 ...

  2. 带你手写基于 Spring 的可插拔式 RPC 框架(一)介绍

    概述 首先这篇文章是要带大家来实现一个框架,听到框架大家可能会觉得非常高大上,其实这和我们平时写业务员代码没什么区别,但是框架是要给别人使用的,所以我们要换位思考,怎么才能让别人用着舒服,怎么样才能让 ...

  3. Restful,SAOP,SOA,RPC的基础理解

    什么是Restful restful是一种架构设计风格,提供了设计原则和约束条件,而不是架构.而满足这些约束条件和原则的应用程序或设计就是 RESTful架构或服务. 主要的设计原则: 资源与URI ...

  4. 基于 SOA 概念 RPC 框架 的 消息中心 云部署 设计 漫谈

    一.背景 假设有一个系统的最大并发量有2000TPS左右.同时该系统有闲时和忙时,希望可以随时进行拓展和削减服务能力,以节省服务器费用开销. 该系统能提供站内消息.短信.app消息.邮箱的一个消息系统 ...

  5. SOA,SOAP,RPC,以及 RPC协议与 REST 协议之间的关系(搜狗)

    web service顾名思义这是一种提供service的形式,而且只能通过http(web)来提供service(web service三要素:SOAP.WSDL(WebServicesDescri ...

  6. 带你手写基于 Spring 的可插拔式 RPC 框架(三)通信协议模块

    在写代码之前我们先要想清楚几个问题. 我们的框架到底要实现什么功能? 我们要实现一个远程调用的 RPC 协议. 最终实现效果是什么样的? 我们能像调用本地服务一样调用远程的服务. 怎样实现上面的效果? ...

  7. 继承Prototype实现语句不能写在动态原型法中的理解

    阅读javascript高级编程中, 对动态原型法中写Prototype继承父类对象的不可行的现象,不甚理解. 书上说是技术原因,如下有问题代码: 但是把protype语句移到构造函数后面,就OK,如 ...

  8. 浅谈SOA与RPC

    一.SOA 英文名称:Service Oriented Ambiguity 中文名称:面向服务架构 SOA是一种思想,目的是提供一种设计项目的思路,让开发时更有效率. 例如原来的分布式项目中,在每个项 ...

  9. 带你手写基于 Spring 的可插拔式 RPC 框架(五)注册中心

    注册中心代码使用 zookeeper 实现,我们通过图片来看看我们注册中心的架构. 首先说明, zookeeper 的实现思路和代码是参考架构探险这本书上的,另外在 github 和我前面配置文件中的 ...

随机推荐

  1. Python玩转微信小程序

    用Python玩转微信   Python玩转微信 大家每天都在用微信,有没有想过用python来控制我们的微信,不多说,直接上干货!  这个是在 itchat上做的封装  http://itchat. ...

  2. python hash 哈希值

    自增知识点 1,哈希 什么是可哈希(hashable)? 简要的说可哈希的数据类型,即不可变的数据结构(字符串str.元组tuple.对象集objects). 哈希有啥作用? 它是一个将大体量数据转化 ...

  3. Ubuntu下apache2安装配置(内含数字证书配置)

    Ubuntu下apache2安装配置(内含数字证书配置)安装命令:sudo apt-get updatesudo apt-get install apache2 配置1.查看apache2安装目录命令 ...

  4. springsecurity的http.permitall与web.ignoring的区别

    permitAll配置实例 @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { ...

  5. TCP三次握手及四次断开,TCP有限状态机

    TCP 的连接建立 上图画出了 TCP 建立连接的过程.假定主机 A 是 TCP 客户端,B是服务端.最初两端的 TCP 进程都处于 CLOSED 状态.图中在主机下面的是 TCP进程所处的状态.A ...

  6. java 随笔

    Spring的scope="prototype"属性 - 多例 spring 默认scope 是单例模式(singleton),这样只会创建一个Action对象,每次访问都是同一个 ...

  7. [LeetCode] 617. Merge Two Binary Trees 合并二叉树

    Given two binary trees and imagine that when you put one of them to cover the other, some nodes of t ...

  8. 1,[VS入门教程] 使用Visual Studio写c语言 入门与技巧精品文~~~~下载安装篇

    Microsoft Visual Studio是微软(俗称巨硬)公司出品的强大IDE(Integrated Development Environment 集成开发环境),功能强大齐全,界面舒服之类的 ...

  9. C++版本 ORM 访问数据库之ODB 的Window环境编译(一)

    先简单说说我为什么要编译一个ORM访问数据库的版本, 以前在做C#访问数据库时候, 直接以orm方式访问数据库, 代码写起来简单,  不用写各种复杂的sql语句, 直接有orm框架生成, 后来转到C+ ...

  10. asp.net mvc移除X-AspNet-Version、X-AspNetMvc-Version、Server

    asp.net mvc程序部署到IIS,,返回的HTTP头中包含Server, X-Powered-By, 和 X-AspNet-Version.X-AspNet-Version信息. 这些信息有时给 ...