精华内容
下载资源
问答
  • 我们直接来看WebService的一个简易工作流程:客户端——>阅读WSDL文档(了解webservice的请求)——>调用WebService上面的流程是一个大致的描述,客户端阅读WSDL文档发送请求,然后调用Web服务器最后返回给...

    用更简单的方式给大家谈谈WebService,让你更快更容易理解,希望对初学者有所帮助。

    WebService是基于网络的、分布式的模块化组件。

    我们直接来看WebService的一个简易工作流程:

    客户端 ——>阅读WSDL文档(了解webservice的请求) ——> 调用WebService

    上面的流程是一个大致的描述,客户端阅读WSDL文档发送请求,然后调用Web服务器最后返回给客户端,这和普通的http请求一样,请求->处理->响应,与普通的请求不一样的就是webservice请求中有一个WSDL文档和SOAP协议,以及.NET Framework自带的Web Service请求处理器 ISAPI Extension。

    我们来看一个比较完整的流程:

    客户端——> 阅读WSDL文档 (根据文档生成SOAP请求)——>发送到Web服务器——>交给WebService请求处理器 (ISAPI Extension)

    ——>处理SOAP请求——> 调用WebService——>生成SOAP应答——>Web服务器通过http的方式交给客户端

    OK,到这里已经明白了的同学你可以走了,去逛逛别的文章,没懂的我们继续往下:

    我们先来解释一下上面的流程中出现的几个名词:

    1. SOAP: 是以XML形式提供简单、轻量、用于在分散或分布式环境中交换结构化和类型信息的机制。SOAP消息的基本结构通过HTTP协议传递XML数据。简单的说就是一个基于XML的协议。

    2. WSDL : 是使用XML文档描述Web服务的标准,是Web服务的的接口定义语言,描述如何访问具体的接口,包含3个基本属性:

    a. 如何访问服务:和服务交互的数据格式以及必要的协议。

    b. 服务在哪里: 协议相关的地址,比如url信息等

    c. 服务具有哪些功能: 服务提供的具体操作方法,=》就是你webservice中提供了哪些可调用的方法

    原理详细描述:

    无论使用什么工具、语言编写 WebService,都可以使用 SOAP 协议通过 HTTP 调用,其工作原理相同。创建 WebService 后,将其暴露给Web客户,任何语言、平台的客户都可以阅读其  WSDL 文档,以调用 WebService 。客户可以根据 WSDL 描述文档生成一个 SOAP 请求信息。 WebService 部署在Web服务器( 如IIS )上,客户生成的 SOAP 请求会被嵌入在一个 HTTP 请求中并发送到Web服务器,Web服务器(IIS)再将请求转发给 WebService 请求处理器。

    对于.Net而言,WebService请求处理器则是一个 .NET Framework 自带的 ISAPI Extension。Web请求处理器用于解析收到的SOAP请求,调用 WebService,然后生成相应的SOAP应答。Web服务器得到SOAP应答后,在通过HTTP应答的方式将其返回给客户端。

    WebService优势:

    1.平台无关性 。  任何平台都可以使用WebService

    2.编程语言无关系。 基于XML,XML本身与平台无关,使用XSD作为数据类型系统,不论用什么语言编写,所有数据类型都会被转换为XSD,只需要遵守WebService的统一标准即可。

    3.部署、升级和维护Web服务简单、方便。

    4.实现多数据、多服务的聚合。

    5.成本低。

    6.不受防火墙的影响。使用SOAP协议通信,封装了XML格式的数据,以ASCII文本的方式传输,而非二进制,调试方便,而且可以使数据容易的通过防火墙,不需要单独开通信端口。

    总结:

    WSDL、SOAP和UDDI(统一描述、发现和集成机制) 一起工作,支持WebService与Internet上的其他服务、应用程序和设备交互作用。UDDI提供了发布和定位Web服务功能(更多请自行了解),WSDL描述了Web服务,SOAP服务提供了传输消息。

    申明:代码里(www.daimali.com)原创,转载请注明原文链接。

    来源:代码里

    链接:http://www.daimali.com/index.php/2016/05/03/448/

    展开全文
  • WebService原理流程

    千次阅读 2016-02-04 22:09:15
    WebService 的几种概念 :   以 HTTP 协议为基础,通过 XML 进行客户端和服务器端通信的框架 / 组件   两个关键点 : 1. 服务端提供的功能 , 通过 xml 描述 2. 第一步中的描述的功能 , 嵌入...

    第一部分 : 直观概述

    WebService 的几种概念 :

     

    以 HTTP 协议为基础,通过 XML 进行客户端和服务器端通信的框架 / 组件

     

    两个关键点 :

    1.       服务端提供的功能 , 通过 xml 描述

    2.       第一步中的描述的功能 , 嵌入到 HTTP 协议中 , 使得能通过 HTTP 协议进行通信【所谓的 SOAP 】 .

     

    用图可以如下表示:

    图一: WebService的简要表示

     

     采用这两个技术的目的主要是 :

    1.       跨平台 , 支持 HTTP 协议的主机和服务器 , 都能够建立通信联系 , 并且大部分的主机和服务器 (99.999% 以上 )将支持 HTTP 协议。一般而言,不同目标主机之间的通信,需要通过防火墙,打开某个端口 , HTTP 协议的优势在于,防火墙一般不会封掉 80 端口 , 这样就可以方便,安全的通信。

     

    2.       跨语言 , 任何语言 , 都支持 XML 文本解析 , 这个的目的是为了实现不同语言之间的通信 , 通信的内容,是被xml 限制的,因此这样进行通信,能跨越语言障碍,即 , Java 开发的服务端,客户端可以用 C 访问 , 可以用java , VB 等访问 , 反之亦然。

     

     第二部分 : 基本原理和架构 

    当然, 架构比我们上面说到的图要更为复杂,上面只是说明了一来一回的通信 , 实际情况还需要考虑以下问题 , 参照图例说明 :

    1. 服务器端 (Provider) 提供统一的标准化服务。 就像开办一个公司 ( 即 Server Provider), 工商行政管理局,注册一下公司地址和性质。 目的是 , 别人要用公司的服务,从工商管理局就知道你的地址。这样统一的做法,是方便所有的公司以及所有需要公司提供服务的客户。 并且这些信息是最大限度的公开。

     

    2. 客户端 (Requester) 到注册中心 (Registry) 拿到公司的基本信息之后 , 去找到这个公司 , 然后使用该公司提供的服务。

     

    图二: 基本的WebService架构流程图

     

    注意上面图中的基本步骤的标号 , 解释如下

    1. Provider 节点提供好服务后 , 首先注册到节点 Registry

    2 和 3. Requester 节点到 Regitry 节点查信息 , 找到需要的 Provider 及其提供的 Service

    4. Requester 使用 Provider 提供的服务

     

    更具体的介绍 , 参照参考文献 [2], 下面这些基本由这个参考文献翻译而来 :

     

    图三: 细节步骤流程图

    上图这些东西 , 完完整整的呈现了 WebService 的整个原理流程 :

    1.       Client 有需要,想调用一个服务,但不知道哪里去调用 . 但知道 UDDI Registry 上可以查到。

    2.       果然 UDDI 记录了某个一个叫做 Web Server A 的服务器能提供这样的服务。

    3.       于是 Client 去 Web Server A, 询问确切的调用方法。

    4.       Web Server A 看到 Client 提出的“确切方法查询”之后, 立即返回给它一个 WSDL 描述的 xml 文档这里记录他能提供的各类方法接口 .

    5.       Client 了解到这些之后,将这些 xml 的接口方法,封装成为 HTTP 请求 , 发给 Web Server A. 这些封装方式采用的是标准的 SOAP 方式 , 实质是满足 HTTP 协议的一些 SOAP 的报文消息。

    6.       Web Server A 回应的也是 HTTP 协议的 SOAP 包 . 这样双方的请求 - 响应完全畅通。

     

     

    上面我们看到的是应用原理图 , 进一步深入 , 可以发现如下的协议架构图 :

    图四: 协议结构

     

    上面我们已经花了很大的精力 , 介绍了发现 Service(UDDI), Service 提供的接口描述 (WSDL), 调用 Service(SOAP),以及传输 (HTTP) 的的整个过程。因此不再做介绍。 这个技术的核心是 SOAP.

    第三部分 : 实践 WebService

    看到上面的图那么复杂 , 实质上 SOAP+HTTP 协议已经足够成熟,犯不着让我们通过 xml 生成带有 SOAP 变迁的 HTML 脚本 , 有很多工具可以帮住我们实现。事实上,开发起来还是相当简便的。

    情况 A: 已知存在 Web Service, 客户端的开发可以通过以下步骤 :

     

    1.        通过 UDDI ,查找到 Client 程序需要的 Web Service 的位置

    2 .        通过 WebService 找到 WSDL 接口描述文件

    3 .        通过工具,将步骤 2 得到的 WSDL 文件,生成一个 Client Stub, 这个实质上是代码 , 也就是打了一个桩。把这个 stub 的代码归并到 Client 程序中 .

    4.        每次 Client 需要调用 WebService 的时候,直接调用步骤 4 生成的 Stub 接口,就实现了对 Server 端的调用。

     

    情况 B: Server 端的开发,同样无需做解析 SOAP 这样的破事,框架会帮我们做好。大致步骤如下 :

    1 .        实现 WebServer 需要提供的所有功能

    2 .        利用 WSDL 文件 ( 或者 IDL) 生成 Server Stub, 这些代码将负责接收从外界获得的请求,并将其转发给 Web Server 的 Service Implementation (实现代码)。当 Service Implementation 的代码处理完,产生结果之后,又会把结果交给 Server Stub, 然后 Server Stub 可以产生一个 SOAP 的响应 . Server Stub + Server Implementation 合在一起 , 称为 Web Service Container, 这玩意儿就是让发送到 WebService 的 HTTP 请求,直接送到 Server Stub 上面的。

     

     

    图五:实际应用中的调用

    参考资料 :

     

    1. http://www.axaptapedia.com/Webservice

     

    2. http://gdp.globus.org/gt3-tutorial/multiplehtml/ch01s02.html

     

    3.   http://blog.csdn.net/gnuhpc/archive/2009/12/22/5047951.aspx

    展开全文
  • 一、SOA和webservice  SOA(service-Oriented Architecture)是面向服务的架构,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行...

    一、SOA和webservice

          SOA(service-Oriented Architecture)是面向服务的架构,是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以使用一种统一和通用的方式进行交互。web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。web service是实现SOA架构的一种技术,XML+XSD,SOAP和WSDL就是构成WebService平台的三大技术。

    1、XML+XSD:

         XML是WebService平台中表示数据的格式。 WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么)除了易于建立和易于分析外,XML主要的优点在于它既是平台无关的,又是厂商无关的。 

        XSD(XML Schema)解决了数据数据类型的问题,例如,整形数到底代表什么?16位,32位,64位?它定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型。WebService平台就是用XSD来作为其数据类型系统的。当你用某种语言(如VB.NET或C#)来构造一个Web service时,为了符合WebService标准,所有你使用的数据类型都必须被转换为XSD类型。

    2、SOAP

       SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML。WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用Web Service。 SOAP协议 = HTTP协议 + XML数据格式。

    3、WSDL

       WSDL是Web Service描述语言,用于描述Web Service及其函数、参数和返回值。它是WebService客户端和服务器端都能理解的标准格式。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的,这将是一个很大的好处。一些最新的开发工具既能根据你的Web service生成WSDL文档,又能导入WSDL文档,生成调用相应WebService的代理类代码。WSDL文件保存在Web服务器上,通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者。

    二、调用webservice的本质

        调用一次webservice的本质如下:

        1、客户端把调用方法参数转换生成XML文档片段(SOAP消息),且该文档必须符合WSDL定义的格式;

        2、通过http协议把XML文档片段传给服务器;

        3、服务器接受到XML文档片段;

        4、服务器解析XML文档片段,提取其中的数据;

        5、服务器执行方法;

        6、服务器把执行方法得到的返回值转换成符合WSDL定义的XML文档片段;

        7、通过http协议把XML文档片段传输给客户端;

        8、客户端接受XML文档片段;

        9、客户端解析XML文档,提取其中的数据。

    所以从本质上来看,要支持webservice,必须支持XML文档解析、生成以及支持网络传输。

    三、基于CXF的webservice开发

    (1)基本开发流程

    1、服务器端

    Ⅰ)开发web service业务接口,该接口用@WebService修饰;

    Ⅱ)开发web service业务接口的实现类,也要用@WebService修饰;

    Ⅲ)使用EndPoint类的静态方法publish()来发布web service。

    2、客户端

    Ⅰ)调用CXF提供的wsdl2java工具,根据WSDL文档生成相应的Java代码(任何语言实现web service都要暴露WSDL文档);

    Ⅱ)找到wsdl2java所生成的类中一个继承了Service的类(该类的实例可当工厂使用);

    Ⅲ)调用Service子类的实例的getXXXPort()方法,返回给远程web service的代理。

    (2)使用CXF开发示例

    1、下载CXF工具包apache-cxf-2.4.0,配置用户变量PATH,如D:\myeclipse\apache-cxf-2.4.0\bin;

    2、服务器端:

    创建一个Java project,工程名如:WS_Server

    导入CXF工具包lib目录下的jar包

    业务接口

    package org.kfserver.ws;
    import javax.jws.WebService;
    @WebService
    public interface PlaceIntrod {
        public String getIntrod(String place);
    }

    业务接口实现

    复制代码

    package org.kfserver.ws.impl;
    
    import javax.jws.WebService;
    import org.kfserver.ws.PlaceIntrod;
    
    @WebService(endpointInterface="org.kfserver.ws.PlaceIntrod",serviceName="PlaceIntrodImpl")
    public class PlaceIntrodImpl implements PlaceIntrod {
    
        public String getIntrod(String place) {
            return "旅游"+place+",人间天堂。";
        }
    
    }

    复制代码

    发布服务

    复制代码

    package kfs;
    
    import javax.xml.ws.Endpoint;
    
    import org.kfserver.ws.PlaceIntrod;
    import org.kfserver.ws.impl.PlaceIntrodImpl;
    
    public class ServerMain {
    
        public static void main(String[] args) {
            PlaceIntrod pi=new PlaceIntrodImpl();
            Endpoint.publish("http://59.71.227.132/kfserver",pi);
        }
    
    }

    复制代码

    2、客户端:

    创建一个Java project,工程名如:WS_Client

    根据WSDL文档生成相应的Java代码:cmd->你的工程目录\src>wsdl2java http://59.71.227.132/kfserver?wsdl

    通过wsdl2java生成的Service的子类如下

    复制代码

    package org.kfserver.ws.impl;
    
    import java.net.MalformedURLException;
    import java.net.URL;
    import javax.xml.namespace.QName;
    import javax.xml.ws.WebEndpoint;
    import javax.xml.ws.WebServiceClient;
    import javax.xml.ws.WebServiceFeature;
    import javax.xml.ws.Service;
    import org.kfserver.ws.PlaceIntrod;
    
    @WebServiceClient(name = "PlaceIntrodImpl", 
                      wsdlLocation = "http://59.71.227.132/kfserver?wsdl",
                      targetNamespace = "http://impl.ws.kfserver.org/") 
    public class PlaceIntrodImpl extends Service {
    
        public final static URL WSDL_LOCATION;
    
        public final static QName SERVICE = new QName("http://impl.ws.kfserver.org/", "PlaceIntrodImpl");
        public final static QName PlaceIntrodImplPort = new QName("http://impl.ws.kfserver.org/", "PlaceIntrodImplPort");
        static {
            URL url = null;
            try {
                url = new URL("http://59.71.227.132/kfserver?wsdl");
            } catch (MalformedURLException e) {
                java.util.logging.Logger.getLogger(PlaceIntrodImpl.class.getName())
                    .log(java.util.logging.Level.INFO, 
                         "Can not initialize the default wsdl from {0}", "http://59.71.227.132/kfserver?wsdl");
            }
            WSDL_LOCATION = url;
        }
    
        public PlaceIntrodImpl(URL wsdlLocation) {
            super(wsdlLocation, SERVICE);
        }
    
        public PlaceIntrodImpl(URL wsdlLocation, QName serviceName) {
            super(wsdlLocation, serviceName);
        }
    
        public PlaceIntrodImpl() {
            super(WSDL_LOCATION, SERVICE);
        }
        
    
        /**
         * 
         * @return
         *     returns PlaceIntrod
         */
        @WebEndpoint(name = "PlaceIntrodImplPort")
        public PlaceIntrod getPlaceIntrodImplPort() {
            return super.getPort(PlaceIntrodImplPort, PlaceIntrod.class);
        }
    
        /**
         * 
         * @param features
         *     A list of {@link javax.xml.ws.WebServiceFeature} to configure on the proxy.  Supported features not in the <code>features</code> parameter will have their default values.
         * @return
         *     returns PlaceIntrod
         */
        @WebEndpoint(name = "PlaceIntrodImplPort")
        public PlaceIntrod getPlaceIntrodImplPort(WebServiceFeature... features) {
            return super.getPort(PlaceIntrodImplPort, PlaceIntrod.class, features);
        }
    
    }

    复制代码

    客户端调用服务(PlaceIntrod pi相当于服务器端的代理)

    复制代码

    package kfc;
    
    import org.kfserver.ws.PlaceIntrod;
    import org.kfserver.ws.impl.PlaceIntrodImpl;
    
    public class ClientMain {
        public static void main(String[] args) {
            PlaceIntrodImpl pii=new PlaceIntrodImpl();
            PlaceIntrod pi=pii.getPlaceIntrodImplPort();
            System.out.println(pi.getIntrod("钟祥"));
        }
    
    }

    复制代码

     

    展开全文
  • 业务逻辑层:为实现业务逻辑而设计的流程处理和计算处理模块。数据存取层:将业务逻辑层处理的结果持久化以待后续查询,并维护领域模型中对象的生命周期。JEE 平台将不同的模块化组件聚合后运行在通用的应用服务器上...

    1.1 从传统单体架构到服务化架构

    1.1.1 JEE 架构

    JEE 将企业级软件架构分为三个层级:

    • Web 层:负责与用户交互或者对外提供接口。

    • 业务逻辑层:为实现业务逻辑而设计的流程处理和计算处理模块。

    • 数据存取层:将业务逻辑层处理的结果持久化以待后续查询,并维护领域模型中对象的生命周期。

    JEE 平台将不同的模块化组件聚合后运行在通用的应用服务器上,例如:WebLogic、WebSphere、JBoss、Tomcat

    图1-1 JEE 时代的典型架构

    ac685cd57ef84855e13f4636b164ed71.png

    1.1.2 SSH 架构

    Struts、Spring、Hibernate

    视图、模型、控制器(Struts MVC)

    图1-3 MVC 模型

    74d83a4fcfb741907534c2640f1fded3.png

    Spring IoC --> 【Spring思维导图,让Spring不再难懂(ioc篇)】

    Spring AOP --> 【Spring思维导图,让Spring不再难懂(AOP 篇)】

    图1-4 SSH 时代的架构

    1294c4e906f75234541c6a2d299f62c0.png

    1.1.3 服务化架构

    从 JEE 到 SSH ,服务的特点仍然是单体化、服务的粒度抽象为模块化组件,所有组件耦合在一个项目中,并配置和运行在一个 JVM 进程中。

    为解决上述问题,SOA 出现了:

    SOA 代表面向服务的架构,俗称服务化。

    SOA 将应用程序的模块化组件通过【定义明确的接口和契约】联系起来,接口采用中立的方式进行定义,独立于某种语言、硬件和操作系统。

    SOA 通常通过网络通信来完成,但不局限于某种网络协议,可以是底层的 TCP/IP,也可以是应用层的 HTTP,也可以是消息队列协议,甚至可以是约定的某种数据库存储形式。

    SOA 服务化的发展:

    一、Web Service

    SOA 服务化的一种实现方式,使得运行在不同机器及操作系统上的服务互相发现和调用成为可能,并可以通过某种协议交换数据。

    图1-5 Web Service 的工作原理图

    dd8dffaaed2161e181f32d74c6ac0a76.png

    服务提供者 Web Service 2 和 Web Service 3 通过 UDDI 协议将服务注册到 Web Service 目录服务中。

    服务消费者 Web Service 1 通过 UDDI 协议从 Web Service 目录中查询服务,并获得服务的 WSDL 服务描述文件。

    服务消费者 Web Service 1 通过 WSDL 语言远程调用和消费 Web Service 2 和 Web Service 3 提供的服务。

    二、ESB

    ESB 是企业服务总线的简称,用户设计和实现网络化服务交互和通信的软件模型,是 SOA 的另外一种实现方式,主要用于企业信息化系统的集成服务场景中。

    ESB 也适用于事件处理、数据转换、映射、消息和事件异步队列顺序处理、安全和异常处理、协议转换、保证通信服务的质量等场景。

    图1-6 ESB 架构图

    de1c89ebb3a04e1a1ec3a02853ad4aeb.png

    ESB 服务密友中心化的服务节点,每个服务提供者都是通过总线的模式插入系统,总线根据流程的编排负责将服务的输出进行转换并发送给流程要求的下一个服务进行处理。

    ESB 的核心在于企业服务总线的功能和职责:

    监控和控制服务之间的消息路由。

    控制可拔插的服务化的功能和版本。

    解析服务之间交互和通信的内容和格式。

    通过组合服务、资源和消息处理器来统一编排业务需要的信息处理流程。

    使用冗余来提供服务的备份能力。

    1.2 从服务化到微服务

    图1-7 微服务架构

    c2d06aa06ce8a099bff7d26931bbf81a.png

    1.3 微服务架构的核心要点和实现原理

    1.3.1 微服务架构中职能团队划分

    【康威定律】

    1.3.2 微服务的去中心化治理

    1.3.3 微服务的交互模式

    1、读者容错模式(Tolerant Reader)

    微服务中服务提供者和消费者之间如何对接口的改变进行容错。

    在服务消费者处理服务提供者返回的消息过程中,需要对服务返回的消息进行过滤,提取自己需要的内容,对多余或位置内容抛弃,不是硬生生的抛错。

    推荐宽松的校验策略,只有无法识别信息,继续处理流程时,才能抛错。

    2、消费者驱动契约模式

    消费者驱动契约模式用来定义服务化中服务之间交互接口改变的最佳规则。

    服务契约分为:提供者契约、消费者契约、消费者驱动契约,它从期望与约束的角度描述了服务提供者与消费者之间的联动关系。

    提供者契约:以提供者为中心,消费者无条件遵守

    消费者契约:对某个消费者的需求进行更为精确的描述,可以用来标识现有的提供者契约,也可以用来发现一个尚未明确的提供者契约。

    消费者驱动的契约:代表服务提供者向其所有当前消费者承诺遵守的约束。一旦各消费者把具体的期望告知提供者,则提供者无论在什么时间和场景下,都不应该打破契约。

    图1-10 服务之间的交互需要使用的三种服务契约

    7a1ad814d9c80daef617ac0f2ddc0a71.png

    3、去数据共享模式

    1.3.4 微服务的分解和组合模式

    1、服务代理模式

    根据业务的需求选择调用后端的某个服务,在返回给使用端前,可以对后端服务的输出进行加工,也可以直接把后端服务的返回结果返回给使用端。

    图1-12 服务代理模式

    6607cff0eb0280d29ac9b2957279d01a.png

    【典型案例:平滑的系统迁移】

    在新老系统上双写。

    迁移双写之前的历史遗留数据。

    将读请求切换到新系统『服务代理模式』。

    下调双写逻辑,只写新系统。

    第 3 步,一般只会对读请求切换设计一个开关,开关打开时查询新系统,开关关闭时查询老系统。

    图1-13 迁移案例中开关的逻辑

    9235ddce19c22387a5d0e92069ec8188.png

    2、聚合服务模式模式

    最常用的服务组合模式,根据业务流程处理的需要,以一定的顺序调用依赖的多个微服务,对依赖的微服务返回的数据进行组合、加工和转换,返回给使用方。

    图1-14 服务聚合模式的架构

    41b73876ef22c555457cf11a0d4cdbda.png

    3、服务串联模式

    类似工作流,最前面的服务1负责接收请求和相应使用方,串联服务后再与服务1交互,随后服务 1与服务2交互,最后,从服务2产生的结果经过服务1和串联服务逐个处理后返回给使用方。

    图1-17 服务串联模式的架构

    2b274b3a59d9f2fcc27f1aa9fd82e342.png

    ● 使用 RESTful 风格的远程调用实现;

    ● 采用同步调用模式,在串联服务没有完成返回之前,所有服务都会阻塞和等待;

    ● 一个请求会占用一个线程来处理;

    ● 不建议层级太多,如果能用服务聚合模式,优先使用服务聚合模式;

    ● 串联链路上增加节点,只要不是在正后方,串联服务无感知

    图1-18 在串联服务中调用链的最后增加无感知的架构

    bd8cc96bf3ab63051e6f1a1974ceaa8f.png

    图1-19 服务串联模式案例的架构图

    f8325b421f3b58d7caef0fc425ca97fc.png

    4、服务分支模式

    ● 服务分支模式是服务代理模式、服务聚合模式和服务串联模式相结合的产物。

    ● 分支服务可以拥有自己的存储,调用多个后端的服务或者服务串联链,然后将结果进行组合处理再返回给客户端。

    ● 分支服务也可以使用代理模式,简单地调用后端的某个服务或者服务链,然后将返回的数值直接返回给使用方。

    图1-20 服务分支模式的架构图

    583cff5550c8830fcfb0658027b52660.png

    调用链上有多个层次重复调用某基础服务,导致基础服务挂掉时影响的流量有累加效果:

    假设基础服务资源池中的机器个数为 i,一次挂掉的机器个数为 j,一个调用链中调用 x 次基础服务,那么正确处理的流量的计算公式为:

       成功率 =  ((i-j) / i) x方

    分支模式放大了服务的依赖关系,在现实设计中尽量保持服务调用级别的简单,在使用服务组合和服务代理模式时,不要使用服务串联模式和服务分支模式,以保持服务依赖关系的清晰明了。

    5、服务异步消息模式

    核心的系统服务使用同步调用,核心链路以外的服务可以使用异步消息队列进行异步化。

    图1-20 服务异步消息模式的架构

    5f5cfbc89fd68ee37cd99d246e7b633c.png

    5、服务共享数据模式

    其实是反模式

    图1-25 服务共享数据模式

    0848332c3b8414ad60bba4c4ced9b738.png

    【在下面两种场景中,仍然需要数据共享模式】:

    一、单元化架构

    对性能要求高。

    图1-26 单元化架构的示意图

    36464aaeafb8122e2f867b828d88bcdf.png

    二、遗留的整体服务

    在重构微服务的过程中,发现单体服务依赖的数据库表耦合在一起,对其拆分需要进行反规范化的处理,可能造成数据一致性问题。

    1.3.4 微服务的容错模式

    1、舱壁隔离模式

    1)微服务容器分组

    将微服务的每个节点服务池分为三组:

    准生产环境;

    灰度环境;

    生产环境。

    图1-27 服务分组

    06e60e796993e1076862c486f6bd680c.png

    2)线程池隔离

    图1-28 线程池隔离

    d562fc13382da996f743b7081675afdb.png

    2、熔断模式

    用电路保险开关来比如熔断模式。

    对微服务系统,当服务的输入负载迅速增加,如果没有有效的措施对负载进行熔断,则会使服务迅速压垮。

    图1-29 熔断模式

    2325523d019be0cea206262e563c2fa7.png

    3、限流模式

    【有如下几种主流的方法实现限流】:

    1)计数器

    2)令牌桶

    图1-32 令牌桶结构

    f18654f34ac7ca1e7deb45252783525c.png

    3)信号量

    类似于生活中的漏洞

    示例:

    public class SemaphoreExample {

        private ExecutorService exec = Executors.newCachedThreadPool();

            public static void main(String[] args) {

                final Semaphore sem = new Semaphore(5);

                for (int index = 0; index < 20;  index++) {

                    Runnable run = new Runnable() {

                        public void run() {

                        try {

                            // 获得许可

                            sem.acquire();

                            // 同时只有 5 个请求可以到达这里

                            Thread.sleep((long) (Math.random()));

                            // 释放许可

                            sem.release()

                            System.out.println("剩余许可:" + sem.availablePermits());

                        } catch(InterruptedException e) {

                            e.printStackTrace();

                        }

                    }

                };

                exec.execute(run);

            }

            exec.shutdown();

        }

    }

    4、实现转移模式

    【如果微服务架构发生了熔断和限流,则该如何处理被拒绝的请求】

    采用【快速失败】,直接返回使用方错误

    是否有【备份】,如果有,则迅速切换到备份服务

    【failover策略】,采用重试的方法来解决,这种方法要求服务提供者的服务实现幂等性

    1.4 Java 平台微服务架构的项目组织形式

    1.4.1 微服务项目的依赖关系

    在微服务领域,jar 包被分为:

    一方库:本服务在 JVM 进程内依赖的 Jar 包。

    二房库:在服务外通过网络通信或 RPC 调用的服务的 Jar 包。

    三方库:所依赖的其他公司或者组织提

    1.4.2 微服务项目的层级结构

    Java 微服务项目一般分为:服务导出层、接口层、逻辑实现层

    9d33e7a1d006075ab7ca25c9de8eaa2c.png

    服务导出层 :最后会打包成一个 War 包,包含服务的实现 Jar 包、接口 Jar 包,以及 Web 项目导出 RPC 服务所需的配置文件等。

    服务接口层 :包含业务接口、依赖的 DTO 及需要的枚举类等,最后打包成 Jar 包,发布到 Maven 服务器,也包含在服务导出层的 War 包中。

    服务实现层 :包含业务逻辑实现类、依赖的第三方服务的包装类,以及下层数据库访问的 DAO 类,最后打包成 Jar。

    【服务实现层的架构图】

    daf68b7530e54fac51caf354a36c53d6.png

    【服务实现层的反模式架构图】

    aca4ea85494855117803ec690e69223a.png

    1.4.3 微服务项目的持续发布

    微服务项目需要实现自动化的CI/CD,包括:

    代码管理

    自动编译

    发布 OA

    自动化测试

    性能测试

    准生产部署和测试

    生成环境发布

    1.5 服务化管理和治理框架的技术选型

    1.5.1 RPC

    1、JDK RMI

    Java 到 Java 的分布式调用框架,一个 Java 进程内的服务可以调用其他 Java 进程内的服务,使用 JDK 内置的序列化和反序列化协议。

    序列化协议:JDK自带的专用序列化协议,不能跨语言

    网络传输协议:底层网络协议

    2、Hessian & Burlap

    序列化协议:Hessian 序列化为二进制协议;Burlap 序列化为 XML 数据

    网络传输协议:HTTP 协议

    3、Spring HTTP Invoker

    序列化协议:Hessian 序列化为二进制协议;Burlap 序列化为 XML 数据

    网络传输协议:HTTP 协议

    1.5.2

    1、Dubbo

    提供高性能、透明化的 RPC 远程服务调用,还提供了基本的服务监控、服务质量和服务调度

    支持多种序列化协议和通信编码协议,默认使用 Dubbo 协议传输 Hessian 序列化的数据

    使用 ZooKeeper 作为注册中心来注册和发现服务

    通过客户端负载均衡来路由请求,负载均衡算法包括:随机、轮询、最少活跃调用数、一致性哈希等。

    2、HSF

    High Speed Framework

    3、Thrift

    采用中间的接口描述语言定义并创建服务

    支持跨语言服务开发和调用,并包含中间的接口描述语言与代码生成和转换工具

    采用二进制序列化传输数据

    4、AXIS

    源于 IBM "SOAP4J",使用 SOAP 协议

    5、Mule ESB

    基于 Java 语言的企业服务总线产品,可以把多个异构系统通过总线模式集成在一起

    1.5.3 微服务

    1、Spring Boot

    【图1-37 JEE时代,应用包含在容器内的架构图】

    bdcc159e2cff511fc8a54c7c5a89d4c1.png

    Spring Boot 相反,它将容器嵌入自启动的 Jar 包中,在 Spring Boot 应用启动时,内部启动嵌入的容器

    【Spring Boot 的容器包含在应用内的架构图】

    ac55402c00d516541544c90322500baf.png

    Spring Boot 这种设计在微服务架构下有如下明显有点:

    可以创建独立、自启动的应用程序

    无需构建 War 包并发布到容器中,构建和维护 War 包、容器的配置和管理也需要成本

    通过 Maven 的定制化标签,可以快速构建 Spring Boot 的应用程序

    可以最大化的自动化配置 Spring,而无需人工配置各项参数

    提供了产品话特点,如:性能分析、健康检查和外部化配置

    无 XML 配置

    是 Spring Cloud 构建微服务架构的重要基础

    2、Netflix

    提供服务发现、断路器和监控、智能路由、客户端负载均衡、易用的 REST 客户端等服务化必须的功能

    3、Spring cloud Netflix

    服务发现组件 Eureka

    容错性组件 Hystrix

    智能路由组件 Zuul

    客户端负载均衡组件 Ribbon

    【图 1-39 Spring Cloud Netfix 架构图】

    512350c81504d31e0f2f44f46ae49bf6.png

    【Netflix 交互流程】

    服务在 Eureka 服务器实例注册

    Zuul 作为一个特殊的服务在 Eureka 上注册并发现服务

    Zuul 作为网关,将发现的服务导出给客户端

    RestTemplate 和 FeignClient 使用简单的服务调用方法调用服务1、服务2

    【Netflix 特点】

    服务在 Eureka 注册,由 Spring 管理的 Bean 来发现和调用

    通过配置的方式可以启动嵌入式的 Eureka 服务器

    Feign 客户端通过声明的方式即可导入服务代理

    Zuul 使用 Ribbon 服务实现客户端负载均衡

    通过声明的方式即可插入 Hystrix 的客户端

    通过配置的方式即可启动 Hystrix 面板服务器

    在 Spring 环境中可以直接配置 Netflix 组件

    Zuul 可以自动注册过滤器和路由器,形成一个反向代理服务器

    Hystrix 面板可以对服务的状态进行监控,并提供容错机制


    欢迎关注运维自研堂订阅号,运维自研堂是一个技术分享平台,主要是运维自动化开发:linux、python、django、saltstack、tornado、bootstrap、redis、golang、docker、etcd、k8s、ci/cd、devops等经验分享。

    • 容器平台自动化CI/CD流水线实操

    • 云原生语义化 CI/CD最佳实践

    • 【提速500%】让Drone飞起来

    • 小孩子也能看懂的kubernetes教程

    • 谷歌开源 Kubernetes 原生 CI/CD 构建框架 Tekton

    • 架构师是怎么炼成的

    • IPv6时代对业务的挑战

    • 如何打造一个安全稳定高效的容器云平台

    • 深入理解无服务器架构(Faas/Serverless)

    • CI/CD 场景价值

    • 云原生架构及设计原则

    • Jira与Zabbix结合

    • 【Zabbix】告警事件归档与提取

    • 【HMonitor】Zabbix告警管理平台

    • Zabbix 告警收敛

    • Zabbix v3.0微信报警及API使用

    • zabbix v3.0安装部署及使用

    • Web权限设计

    • 搭建 kubernetes 容器编排平台

    • 区块链入门教程

    • 基于Gogs+Drone搭建的私有CI/CD平台

    • WEB架构设计心得

    • Docker与CI/CD

    • 【实战篇】Docker的CI/CD流水线实践

    • 基于 Harbor 搭建 Docker 私有镜像仓库

    • 利用helm部署应用到kubernetes

    开源    创新     共享

    投稿&商务合作

    Mail:idevops168@163.com       QQ:785249378     微信:Idevops001

    80716b4251cfabba674b50dd06e222f5.gif

    牛人并不可怕,可怕的是牛人比我们还努力!

    b44a690edeb7f3ae7882c90a599f87d1.png

    长按图片,识别加入我们!

    展开全文
  • WebService工作原理

    2017-07-19 17:11:15
    轻松搞懂WebService工作原理   用更简单的方式给大家谈谈WebService,让你更快更容易理解,希望对初学者有所帮助。 WebService是基于网络的、分布式的模块化组件。   我们直接来看WebService的一个简易...
  • 简单了解WebService工作原理WebService是基于网络的、分布式的模块化组件。WebService的简易工作的流程: 客户端 ——&gt;阅读WSDL文档(了解webservice的请求) ——&gt; 调用WebService 上面的流程是一...
  • WebService的工作原理

    2020-06-03 09:38:58
    WebService的工作原理如下: 服务提供者WebService2和WebService3通过UDDI协议将服务注册WebService目录中 服务消费者WebService1通过UDDI协议从WebService目录中查询服务,并获得服务的WSDL服务描述文件 服务...
  • 更多详情:Web Services 教程 用更简单的方式给大家谈谈WebService,让你更快更容易理解,希望对初学者有所帮助。...我们直接来看WebService的一个简易工作流程:客户端 ——>阅读WSDL文档(了解webservice的请
  • WebService的几种概念: 以HTTP协议为基础,通过XML进行客户端和服务器端通信的框架/组件 两个关键点: 1. 服务端提供的功能, 通过xml描述 2. 第一步中的描述的功能, 嵌入到HTTP协议中, 使得能通过HTTP协议...
  • WebService工作原理 与 性能测试结论

    千次阅读 2017-01-03 19:56:31
    我们直接来看WebService的一个简易工作流程: 客户端 ——>阅读WSDL文档(了解webservice的请求) ——> 调用WebService    上面的流程是一个大致的描述,客户端阅读WSDL文档发送请求,然后调用Web服务
  • 我们直接来看WebService的一个简易工作流程: 客户端 ——>阅读WSDL文档(了解webservice的请求) ——> 调用WebService 上面的流程是一个大致的描述,客户端阅读WSDL文档发送请求,然后调用Web服务器最后返....
  • 这一章节,我们主要解决关于Webservice概念性的问题,首先弄明白Webservice的概念和原理,然后弄清楚它的交互流程,这样容易理解后续Webservice的调用方法。 1 Web服务的定义 Web服务架构与Web一样,也是网络...
  • Web Service 的工作原理不是方法的调用,而是客户端讲参数变成wsdl识别的xml文档片段,并通过网络,讲该文档发送相应的服务端,服务端进行xml文档的解析,并把结果以xml文档的形式保存,并返回给客户端。 以下9步骤...
  • webservice的理解

    2017-08-07 13:40:53
    webservice用来实现不同平台,不同项目之间数据传输的,他是跨平台,跨语言,跨项目的。 原理:通过SOAP(简单面向...webservice服务端配置流程 首先在web.xml中引入cxfServlet核心类,指定对以/cxf开头的url路径提供
  • WebService_学习笔记

    2021-02-26 09:06:13
    WebService调用原理 实现一个完整的Web服务工作流程: Web服务提供者设计实现Web服务,并将调试正确后的Web服务通过Web服务中介者发布,并在UDDI注册中心注册; Web服务请求者向Web服务中介者请求特定的服务,中介者...
  • Java WebService-CXF-基于SOAP的Web服务

    千次阅读 2015-12-16 20:15:50
    Java WebService-CXF 基于SOAP的Web服务 sf2gis@163.com 2015年12月11日   1 目标:使用XML进行网络交互通信,提供WEB服务,RPC的进化版。 2 原理:使用XML协议进行Http通信交互,使用JAX-WS进行XML与Java...
  • AOP(Aspect oriented Programming,面向切面编程),其实现原理就是代理被调用的方法,在其被执行的方法前后,增加额外的业务功能,AOP的实现机制就是通过注解或者XML配置,就这些配置,动态的生成字节码(bytecode)....
  • RemObjects是一个强大的N层网络框架,写一个实现即可通过多种...只需要根据需求编写实现即可,了解其实现原理,可增强自己的设计思想,现在请一步一步来看下这个过程首先是客户端调用就是这么简单,一个TRORemote...
  • 基本原理 1、百度地图开放了搜索接口 http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi 2、使用【地点检索】接口搜索商家的地址、电话等信息 3、基本使用流程 (1) 申请百度账号 (2) ...
  • Web Services 接口测试

    2020-03-01 16:36:08
    Web Services 接口安全测试 简要说明: 1.什么是webservice?...1.开发在进行webservice接口开发时,接收用户传入的参数值未进行处理,导致攻击者控制数据执行流程,从而导致sql注入,xml外部实体攻击,x...

空空如也

空空如也

1 2 3
收藏数 54
精华内容 21
关键字:

webservice原理流程