zoukankan      html  css  js  c++  java
  • Restful、SOAP、RPC、SOA、微服务之间的区别

    什么是Restful

    Restful是一种架构设计风格,提供了设计原则和约束条件,而不是架构,而满足这些约束条件和原则的应用程序或设计就是 Restful架构或服务。

    主要的设计原则:

    •   资源与URI
    •   统一资源接口(HTTP方法如GET,PUT和POST)
    •   资源的表述
    •   资源的链接
    •   状态的转移
    总之,RESTful的核心就是后端将资源发布为URI,前端通过URI访问资源,并通过HTTP动词表示要对资源进行的操作。

    什么是SOAP

    简单对象访问协议是一种数据交换协议规范,是一种轻量的、简单的、基于XML的协议的规范。SOAP协议和HTTP协议一样,都是底层的通信协议,只是请求包的格式不同而已,SOAP包是XML格式的。
    SOAP的消息是基于xml并封装成了符合http协议,因此,它符合任何路由器、 防火墙或代理服务器的要求。
    SOAP可以使用任何语言来完成,只要发送正确的soap请求即可,基于soap的服务可以在任何平台无需修改即可正常使用。

    RPC

    RPC 的全称是 Remote Procedure Call 是一种进程间通信方式。
    它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。即无论是调用本地接口/服务的还是远程的接口/服务,本质上编写的调用代码基本相同。
    比如两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数或者方法,由于不在一个内存空间,不能直接调用,这时候需要通过就可以应用RPC框架的实现来解决

    • RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。
    • RPC 会隐藏底层的通讯细节(不需要直接处理Socket通讯或Http通讯)
    • RPC 是一个请求响应模型。客户端发起请求,服务器返回响应(类似于Http的工作方式)
    • RPC 在使用形式上像调用本地函数(或方法)一样去调用远程的函数(或方法)。

    4种典型RPC远程调用框架

    (1)RMI实现,利用java.rmi包实现,基于Java远程方法协议(Java Remote Method Protocol)和java的原生序列化。
    (2)Hessian,是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 基于HTTP协议,采用二进制编解码。
    (3)thrift是一种可伸缩的跨语言服务的软件框架。thrift允许你定义一个描述文件,描述数据类型和服务接口。依据该文件,编译器方便地生成RPC客户端和服务器通信代码。
    (4)Dubbo是阿里巴巴公司开源的一个高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成
    (5)还有SpringCloud框架,微服务全家桶。为开发人员提供了快速构建分布式系统的一些工具,包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。
    微服务在本质上,就是rpc。rpc有基于tcp的,http的,mq的等等。spring cloud是基于spring boot的,spring boot 实现的是http协议的rpc,算是rpc的一个子集。

    什么是SOA

    SOA(Service-Oriented Architecture),中文全称:面向服务的架构。
    通俗点来讲,SOA提倡将不同应用程序的业务功能封装成“服务”并宿主起来,通常以接口和契约的形式暴露并提供给外界应用访问(通过交换消息),达到不同系统可重用的目的。
    SOA是一个组件模型,它能将不同的服务通过定义良好的接口和契约联系起来。服务是SOA的基石。
     
    业务系统分解为多个组件,让每个组件都独立提供离散,自治,可复用的服务能力
    通过服务的组合和编排来实现上层的业务流程
    作用:简化维护,降低整体风险,伸缩灵活

    微服务架构

    • 什么是微服务架构
      架构设计概念,各服务间隔离(分布式也是隔离),自治(分布式依赖整体组合)其它特性(单一职责,边界,异步通信,独立部署)是分布式概念

    作用:各服务可独立应用,组合服务也可系统应用(巨石应用[monolith]的简化实现策略-平台思想)

    微服务和SOA的区别

    微服务是SOA架构演进的结果。两者说到底都是对外提供接口的一种架构设计方式,随着互联网的发展,复杂的平台、业务的出现,导致SOA架构向更细粒度、更通过化程度发展,就成了所谓的微服务了。
    总之,微服务是SOA发展出来的产物,它是一种比较现代化的细粒度的SOA实现方式。

    SOA与微服务的区别在于如下几个方面:

    •   微服务相比于SOA更加精细,微服务更多的以独立的进程的方式存在,互相之间并无影响;
    •   微服务提供的接口方式更加通用化,例如HTTP RESTful方式,各种终端都可以调用,无关语言、平台限制;
    •   微服务更倾向于分布式去中心化的部署方式,在互联网业务场景下更适合。
    •   SOA架构主要针对企业级、采用ESB服务(ESB企业服务总线),非常重,需要序列化和反序列化,采用XML格式传输。
    •  微服务架构主要互联网公司,轻量级、小巧,独立运行,基于Http+Rest+JSON格式传输。

    为什么要使用微服务?

    技术为业务而生,架构也为业务而出现,当然SOA和微服务也是因为业务的发展而出现。https://www.cnblogs.com/wwct/p/12945230.html
    平台随着业务的发展从 All in One 环境就可以满足业务需求(以Java来说,可能只是一两个war包就解决了)。发展到需要拆分多个应用,并且采用MVC的方式分离前后端,加快开发效率;在发展到服务越来越多,不得不将一些核心或共用的服务拆分出来,其实发展到此阶段,如果服务拆分的足够精细,并且独立运行,我觉得就可以将之理解为一个微服务了。
  • 相关阅读:
    RAID技术
    敏捷开发
    如何写出高质量的代码?现在知道还不晚
    Java大型互联网架构技术经验
    Chrome精品插件
    2018 java BAT最新面试宝典
    Java成神之路(2018版)
    三分钟读懂摘要算法
    我的Mac应用清单
    事务隔离级别
  • 原文地址:https://www.cnblogs.com/wwct/p/12952222.html
Copyright © 2011-2022 走看看