精华内容
下载资源
问答
  • API网关服务综述

    2018-05-24 15:30:14
    原文地址:https://blog.csdn.net/WangYouJin321/article/details/80418716API网关服务综述从以下几个方面对互联网上出现的API网关服务进行介绍: 1. API 网关的分类2. 网关的架构3. 对具备服务网关能力(Nginx / ...

    原文地址:https://blog.csdn.net/WangYouJin321/article/details/80418716

    API网关服务综述

    从以下几个方面对互联网上出现的API网关服务进行介绍:

     

    1.  API 网关的分类

    2.  网关的架构

    3.  对具备服务网关能力(Nginx / Orange/kong / API Umbrella/DJ / Amazon /Netflix/阿里)的产品介绍

     

    1. API网关的分类

    API GW的定位主要有4类:

    1面向Web App

    在物理形态上类似前后端分离,此时的Web App已经不是全功能的Web App,而是根据场景定制、场景化的App。

    2面向Mobile App

    移动App是后端Service的使用者,此时的API GW还需要承担一部分MDM(此处是指移动设备管理,不是主数据管理)的职能。

    3面向Partner OpenAPI

    为了满足业务形态对外开放,与企业外部合作伙伴建立生态圈,此时的API GW需要增加配额、流控、令牌等一系列安全管控功能。当互联网形态逐渐影响传统企业时,很多系统都会为了导入流量或者内容,依赖外部合作伙伴的能力,一些典型的例子就是使用「合作方账号登录」、「使用第三方支付平台支付」等等,这些对于企业内部来说,都是一些外部能力。此时的API GW就需要在边界上,为企业内部Service 统一调用外部的API做统一的认证、(多租户形式的)授权、以及访问控制。

    图1.1 API网关服务

     

    (4)面向IoT- SmartDevice 

    物联网网关:支持设备从工业控制协议、小无线向IP协议的转换,以便能够连入互联网、协议转换

    物联网网中的API网关服务:服务请求的路由、安全验证、请求流量控制、数据流分析

    2. 网关的架构 


                        图2.1 中心化    

                                   

     图 2.2去中心化

     

     

    二者间的比较:

    成熟  存在大量的开源的工具   —————             性能和可靠性高

    可控性高                     —————       实现上比较复杂、可扩展性低

    比较安全                     —————

     

    3. 具备API网关服务能力的开源项目介绍

    3.1 Nginx系列

    Nginx / Orange/kong / APIUmbrella 利用Nginx反向代理的功能,扩展开发了一些面向非业务功能的功能,主要是管理、监控、安全、统计四个方面。

    海视云那边选择Nginx作为API网关服务器应该是出于以下2点考虑:

    (1)易部署

          Nginx 提供通过操作配置文件的方式来实现反向代理和负载均衡,因为比较成熟,所以技术实现上简单、可靠

    (2)高可用

    性能稳定、低系统资源的消耗

     

    Nginx用做API网关服务器实现服务请求的路由非常优秀,但是他对于非业务功能的支持比较匮乏,原生态的代理功能在安全、监控等领域不支持。因此kong诞生了,kong提供了19个插件式的功能实现,涵盖广泛,像权限控制、流量控制、身份认证、日志等功能,但缺少对报文转换的能力(为避免产生业务场景的耦合,更通用)。

     

    3.2  Kong

     

    Kong 是由Mashape公司开发的一款APIGateway的软件,Kong是基于nginx开发,有两个组件:Server用来接收客户端的API请求,Cassandra来存储操作数据。Kong支持水平扩展,通过前置的负载均衡器向这些机器分发请求,根据文档描述,两个Cassandra节点就足以支撑绝大多数情况,但如果网络非常拥挤,可以考虑适当增加更多节点。Kong中最诱人的一个特性是可以通过插件扩展已有功能,这些插件在API请求响应循环的生命周期中被执行。插件使用Lua编写,而且Kong还有如下几个基础功能HTTP基本认证、密钥认证、CORS( Cross-origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发以及nginx监控。

    Kong支持集群方案,可以加入多个Kong节点来保障服务的高可用性以及提高负载的能力,多个kong组成的集群需要使用共享数据库CassandraPostgreSQL,以保证集群数据的一致性。

     

    图3.1

    3.2 其他

    AmazonAPI Gateway 

    一种完全托管的服务,可以帮助开发者轻松创建、发布、维护、监控和保护任意规模的 API。只需在 AWS 管理控制台中点击几下,您便可以创建可充当应用程序“前门”的 API,从后端服务访问数据、业务逻辑或功能,例如基于 Amazon Elastic Compute Cloud (Amazon EC2)运行的工作负载、基于 AWS Lambda 运行的代码或任意Web 应用。Amazon API Gateway 负责管理所有任务,涉及接受和处理成千上万个并发 API 调用,包括流量管理、授权和访问控制、监控以及 API 版本管理。Amazon API Gateway 没有最低费用或启动成本,您只需为收到的 API 调用和传输出去的数据量付费。

    Netflix 自主研发的 Zuul:(able那边的也应该算是自主研发的)

        Zuul采用PRPE模型,最主要是功能就是为Netflix自身的核心视频业务,并且它开源的也是业务方面相关的技术,所以说他更应该是一个业务平台,不是技术平台,参考意义不大。

    阿里及其他的服务提供商:

    提供API Gateway托管服务,辅助用户将能力、服务、数据以接口的形式开放给合作伙伴。提供防攻击、防重放、请求加密、身份认证、权限管理、流量控制等多重手段保证 API 安全,降低 API 开放风险。

    提供 API 定义、测试、发布、下线等全生命周期管理,并生成 SDKAPI 说明文档,提升 API 管理、迭代的效率。提供便捷的监控、报警、分析、API市场等运维、运营工具,降低 API 运营、维护成本。

     

    Kubernetes(k8s)

    Google开源的容器集群管理系统。Service提供了一个统一的服务访问入口以及服务代理和发现机制,用户不需要了解后台Pod是如何运行。Service Controller-管理维护Service,提供负载以及服务代理。


    展开全文
  • 网关服务

    千次阅读 2017-05-19 19:14:50
    网关网关管理从云端发送的数据包和通知。数据包可以是能被PredixMachine及其处理的命令、容器、软件或配置信息或PredixMachine及其能与之通信的任意应用程序。例如,云网关下载命令并将其交给命令调度...2.服务...

    云网关

    云网关管理从云端发送的数据包和通知。数据包可以是能被PredixMachine及其处理的命令、容器、软件或配置信息或PredixMachine及其能与之通信的任意应用程序。例如,云网关下载命令并将其交给命令调度程序,后者将命令交给对应的命令处理程序。
    • 云网关根据以下三种情况之一与边缘网关(云端)同步,管理状态上传和任务下载:
    1.机器上运行的一个应用程序发送了同步请求
    2.服务器发送事件 (SSE, Server Sent Events)
    • 3.云网关配置内设置的轮询间隔
    • SSENotifications 使用SSE与服务器建立连接,等待通知。只有当 serverNotificationEnabled 属性设置为 true时才会启动。
    • GatewayThread 是一个定时器,用于在经过 pollingInterval 配置属性内指定的时间后,使GatewayService与云同步。
    • 存储和转发为可选项。如果PredixMachine的镜像机器图像未包含存储和转发,任务状态将保存在内存中,直到下一次同步。
    注:
    如果机器重启,保存在内存中的任务状态可能会丢失。
    下图展示了云网关与云端的各种同步方式。
    图片描述

    端到端命令流

    云网关如下管理端到端命令流:
    1. 从云端下载命令。
    2. 将命令发送给命令调度程序。
    3. 命令调度程序将命令交给相应的命令处理程序。
    4. 命令处理程序执行命令,根据命令状态调用ICloudGateway。
    如果命令是针对应用程序容器,在DataBus命令处理程序将状态提交给ICloudGateway前,会发生下列步骤:
    a. 假设命令是针对应用程序容器,DataBus命令处理程序收到命令后,将命令发布给DataBus。
    b. 订阅命令发布目的地主题的容器接收并执行命令。
    c. 命令得到处理后,应用程序容器发布命令状态。
    d. DataBus命令处理程序也订阅了DataBus,接收从应用程序容器发布的命令状态。
    e. DataBus命令处理程序根据命令状态调用ICloudGateway。
    5. 云网关将状态保存到存储和转发中(如适用),直到下一次与云端同步或云端发出命令处理请求。
    图片描述

    云网关消费者配置

    Maven依赖项
    消费此服务需要下列Maven依赖项:
    图片描述
    OSGI导入
    消费捆绑束组件(bundle)需要下列OSGi导入:
    图片描述

    获取云网关服务

    使用声明式服务注入 ICloudGateway 服务。
    下例展示了如何注入 ICloudGateway 服务:
    图片描述

    配置云网关

    1. 导航至
      <Predix Machine runtime container location>/configuration/machine
    2. 打开com.ge.dspmicro.cloud.gateway.config 文件,设置以下属性:
      图片描述

    使用云网关API

    查看云网关Javadoc API,了解如何使用云网关。
    1. 导航至下列文件,将压缩包内的所有文件解压:<SDK installation location>/docs/apidocs.zip.
    2. 导航至Javadoc API,路径为:<SDK installation location>/docs/apidocs/index.html,在左侧面板找到并点击 com.ge.dspmicro.cloud.gateway.api 。
    通过云网关API,可以就命令、事件、告警和软件更新与云端进行会话。

    图片描述

    数据包处理程序服务

    使用数据包处理程序服务配置第三方数据包下载位置。
    如要下载自定义数据包、使用自己的安装程序安装或从EdgeManager向设备下载大数据包时,可使用数据包处理程序服务。

    配置数据包处理程序

    注:
    必须提供自己的安装程序服务,用以监测数据包处理程序配置文件内指定的安装目录。
    1. 导航至<Predix Machine runtime container location>/configuration/machine,复制一份默认数据包处理程序配置文件com.ge.dspmicro.packagehandler.machine.config。
    2. 将文件重命名,在连字符后添加一个不同的名字或编号,例如:com.ge.dspmicro.packagehandler-bob.config.
    3. 配置数据包处理程序的名称和安装路径。
    图片描述
    4. 配置值示例:
    5.图片描述

    6.4. 数据包经过安装服务处理后,必须在图片描述 /appdata/packageframework目录内放置一个“status”JSON文件。
    注:
    <Status>.json 文件必须包含所下载数据包的名称。
    例如:
    所下载数据包的名称:A7F4FA68-B76E-4185-8C21-316CF57DAE2F.APPLICATION.deviceid-version.zip
    期望的json名称:A7F4FA68-B76E-4185-8C21-316CF57DAE2F.APPLICATION.deviceid-version.json
    JSON文件必须包含以下四个字段:
    图片描述

    格式化.config文件(不是 .cfg 文件)内的属性时,使用类型字符,后跟值的引用字符串表示。例如,一个布尔型属性=B”true”。小写类型字符表示基本数据。字符串的类型可以省略。下表列出了类型和对应的类型字符:

    图片描述

    数组格式为属性=<类型>[”<值1>”,”<值2>”]。例如,整型数组属性=I[”1”, “2”, “3”]。为清晰起见,可使用反斜杠分隔。
    示例:
    图片描述

    数据包处理程序执行日志和签名验证

    如要在EdgeManager内保存安装执行日志信息,必须将日志信息保存到一个文件内,用所下载数据包的名称作为文件名。
    文件扩展名必须为.log,保存到<machine>/logs/installations目录内。
    签名验证
    日志保存后,必须将签名文件放到<machine>/appdata/packageframework目录内。这样可以通知Predix机器检查具有此数据包ID的.log文件,进行上传。
    注:
    只有.zip和zip.sig文件都位于install文件夹后才能进行安装。
    安装前,使用/yeti/com.ge.dspmicro.yetiappsignature-{version}.jar验证.zip文件的签名。验证后,还会把文件的所有内容解压到当前文件夹内。
    下面展示了使用package.zip和package.zip.sig文件运行验证过程和解压的示例:
    图片描述
    注:
    安装后,自定义数据包处理程序应删除压缩包和多余文件,以节省硬盘空间。
    示例
    这是一个脚本示例,作为自变量,提取放置在你的install文件夹中的.zip文件(数据包id)的基础文件名。然后检查签名,创建JSON日志文件后返回。用于测试目的,并不清除任何文件。
    图片描述

    将数据包上传至EdgeManager

    数据包处理程序服务配置完成并创建了安装脚本后,可以将数据包上传至EdgeManager ,向注册设备部署。
    1. 创建一个数据包,包含配置和你要安装的应用程序。
    2. 创建一个install目录, 包含install.sh (Linux或Mac)或install.bat (Windows) 脚本。
    1. 登录EdgeManager。
    2. 在左侧导航窗格内,点击存储库。
    3. 在Predix存储库内,点击上传。
    4. 在上传对话框内输入:
    o 名称– (必填) 软件数据包的名称。
    o 供应商 – 设备供应商。
    o 类型 – (必填) 可选择以下选项:
     应用程序 – 设备的应用程序软件。
     系统 – 管理设备硬件和资源的软件。
     配置 – 设备配置软件。
     容器 – Docker容器将你的应用程序软件打包成一个标准单元,以实现应用程序部署自动化。
    o 版本 – (必填) 软件版本。
    o 描述 – 软件或容器的说明。描述应有明确意义,例如,添加作为应用程序推送目的地的设备组位置。
    o 备注 – 选填,可以添加其他备注。
    注:
    备注最多不能超过1024个字符。
    o 数据包处理程序 – 你配置的数据包处理程序名称。
    5. 点击选择文件,选择要上传到存储库内的文件。
    6. 点击上传。
    7. 在确认上传对话框内,点击完成。
    Linux/Mac OS示例:
    1. 新建一个文件夹,命名为<machine>bob-install
    2. 将示例脚本置于该文件夹内,命名为bob_yeti.sh。
    3. 收到两个新文件(<package-id>.zip和<package-id>.zip.sig)后,运行脚本, p<package-id> 作为自变量,例如: sh bob_yeti.sh <package-id>
    这将把压缩包内容解压到名为”tmp”的子文件夹内,返回 success 状态。
    4. 解压后,脚本创建JSON和.log 文件,分别将其置于正确的位置。Predix机器然后将其推送回EdgeManager。
    5. EdgeManager显示所下载数据包的正确安装信息。
    相关概念
    EdgeManager存储库概述

    设备详情服务

    设备详情服务检索设备的动态信息。
    下表显示了设备详情服务提供的信息。
    表1设备详情服务分类
    图片描述

    对供应商提供信息的要求

    以下通用准则适用于供应商提供的信息:
    • 信息文件必须使用.json扩展名。使用其他扩展名的文件将被忽略。
    • JSON文件必须含有全部信息。例如,softwareInfo.json必须包含安装的所有软件。边缘网关通过先后执行“全部删除”和“全部插入”操作,将旧信息替换为新信息。
    • 新状态文件必须覆盖旧状态文件,以保证读取最新状态。
    • 读取成功后,文件被删除。
    • 无效文件被重命名为<filename>.bad.<timestamp>,用于调试。无效文件可以是无效的JSON文件或含有不匹配protobuf定义属性的有效JSON文件。

    设备信息JSON要求

    设备信息含有硬件、SIM卡和属性的JSON 要求。
    设备信息文件必须带有.json 扩展名,置于指定外部位置。默认位置为<PREDIX_MACHINE_ROOT>/appdata/devicedetail/deviceinfo
    硬件信息的JSON要求
    Hardwareinfo.json文件具有以下要求:
    • hardwareInfo 应始终包含全套硬件。Edge Manager服务将旧信息替换为新信息。
    • hardwareInfo 属性为随机键值。键(如下例中的”numberOfProcessors“)为字符串。值包含了数据值和数据类型的字符串表示。支持数据类型的完整清单参见proto定义。
    • 其他字段,如类别,制造商,型号,固件等为定义字段。
    以下为硬件信息文件示例 (hardwareInfo.json):
    图片描述
    SIM卡信息
    siminfo.json文件具有以下要求:
    • SimInfo 应始终包含全套SIM卡信息。EdgeManager服务将旧信息替换为新信息。
    • SimInfo 属性为随机键值。键(如下例中的”firmware”)为字符串。值包含了数据值和数据类型的字符串表示。支持数据类型的完整清单参见proto定义。
    • Timestamp字段必须为RFC3399格式,默认为Unix时间戳(epoch time,格林威治时间1970年01月01日00时00分00秒起至现在的总秒数)新纪元时间。
    以下为SIM卡信息JSON文件示例(simInfo.json):
    图片描述
    链接内容
    相关参考
    设备详情Protobuf定义

    设备状态JSON要求

    状态信息包含电源和连接状态的JSON要求。
    设备状态文件必须带有.json 扩展名,置于指定外部位置。默认位置为<PREDIX_MACHINE_ROOT>/appdata/devicedetail/devicestatus
    设备状态文件的JSON要求包括:
    • 状态更新时,写入状态文件。新状态文件应总是覆盖旧状态文件,以保证读取最新状态。
    • 若非应用于电源,请将 percentageFull 设置为 -1 。
    下例仅供参考。数据结构定义参见设备详情Protobuf定义
    以下为电源状态JSON文件示例(powerSupplyStatus.json):
    图片描述

    以下为蓝牙连接状态JSON文件示例(bluetoothStatus.json):
    图片描述

    以下为移动网络连接状态JSON文件示例(cellularStatus.json):
    图片描述

    以下为WiFi连接状态文件示例(wifiStatus.json):
    图片描述

    设备状态属性JSON要求

    设备状态属性文件必须带有.json扩展名,置于指定外部位置。默认位置为 /appdata/devicedetail/deviceproperties。
    设备状态文件的JSON要求包括:图片描述
    • 状态更新时,写入状态文件。新状态文件应总是覆盖旧状态文件,以保证读取最新状态。
    • 属性应始终包含全套属性。Edge Manager服务将旧信息替换为新信息。
    • 属性为随机键值对。键(如下例中的”Prop1”)为字符串。值包含了数据值和数据类型的字符串表示。支持数据类型的完整清单参见设备详情Protobuf定义。
    • Timestamp字段必须为RFC3399格式,默认为新纪元时间。
    下例仅供参考。数据结构定义参见设备详情Protobuf定义
    以下是设备状态属性JSON文件示例(deviceStatusProps.json):
    图片描述

    软件信息JSON要求

    软件信息文件必须带有.json扩展名,置于指定外部位置。默认位置为<PREDIX_MACHINE_ROOT>/appdata/devicedetail/softwareinfo
    软件信息文件的JSON要求包括:
    • 设备首次启动及添加或更新软件时,必须提供该文件。
    • 文件必须包含全套已安装软件。边缘网关将旧信息替换为新信息。
    • timestamp 字段必须为RFC 3339格式(参见下例)。
    • type 字段可以为 UNKNOWN_TYPE (默认), APPLICATION_TYPE, SYSTEM_TYPE, CONFIGURATION_TYPE。
    • 只应有一个文件。如果找到多个文件,则使用第一个有效文件。其他文件将被重命名为.extra.。
    以下为软件信息JSON文件示例(softwareInfo.json):
    图片描述

    边缘告警JSON要求

    边缘告警文件有特殊的JSON要求。
    边缘告警文件必须带有.json扩展名,置于指定外部位置。默认位置为/appdata/devicedetail/edgealerts。
    边缘告警文件的JSON要求包括:
    • EdgeManager使用 alertType, sourceType和 source 作为键。当多个告警的以上三个字段值相同时,EdgeManager UI内只显示最新的值。
    • timestamp 字段必须为RFC3399格式,默认为新纪元时间。
    下例仅供参考。数据结构定义参见设备详情Protobuf定义
    以下为边缘告警JSON文件示例:
    图片描述

    相关概念
    关于告警
    相关任务
    查看和过滤告警

    设备详情Protobuf定义

    支持数据类型.proto文件
    以下common_value.proto示例文件描述了设备详情通用的支持数据类型。值包含了数据值和数据类型的字符串表示。
    图片描述

    设备信息结构
    以下edge_device_info.proto示例文件描述了设备信息的数据结构。
    图片描述
    图片描述

    HTTP客户端服务

    HTTP客户端服务提供了一组API,用于构建客户端侧的HTTP/1.1兼容应用程序。该服务基于Apache HTTP客户端4.3.5,将Apache HTTP客户端的全套API暴露在OSGi环境内。同时提供了一个自定义帮助程序API,用于简化RESTful客户端的开发。Predix机器HTTP客户端支持服务器端的证书验证。
    与OSGi服务类型一样,HTTP客户端目前注册为单例模式服务或工厂。支持以下三种接口:
    • IHttpClient – 暴露 PoolingHttpClientManager管理的简单http连接的相关功能。
    • IHttpClientFactory – 使用HttpClient的私有实例。
    • IPredixCloudHttpClientFactory – 构建支持Predix云认证通信的HTTP客户端。

    使用示例

    在消费服务类的成员变量中添加一个参考值:
    图片描述

    • 添加一些依赖项注入函数,以允许OSGi框架注入IHttpClient服务实例
    图片描述

    • 设置 HttpClientFactory 服务,以创建一个不与默认客户端共享资源的客户端:

    图片描述

    • 通过 IPredixCloudHttpClientFactory ,利用Predix云身份管理服务中提供的身份在云端调用REST服务。客户端将自动管理身份管理服务中指定的认证服务器提供的OAuth2令牌的获取。该服务接口的Predix云版本与 HttpClientFactory 接口的使用方法相同。
    图片描述

    必要时,使用帮助程序提供访问权限:
    图片描述

    要建立连接,使用任一 IHttpClient API函数与服务器连接,向服务器发送和/或接收来自服务器的数据。
    图片描述

    启用HTTPS

    可以在HTTP连接中提供自己的HTTP/HTTPS上下文,而无需与其他应用程序共享敏感的配置信息,如cookie等。默认情况下, org.apache.felix.http.enable 属性设置为 false 以便只启用HTTPS。
    注:
    更多信息参见Security Administration服务:SSL上下文和证书管理。
    1. 找到并打开文件<Predix Machine runtime container location>/security /com.ge.dspmicro.securityadmin.cfg
    2. 设置以下属性的值:
    图片描述

    使用HTTP客户端API

    查看HTTP客户端Javadoc API,了解如何实现HTTP客户端服务。
    1. 导航至下列文件,将压缩包内的所有文件解压:/docs/apidocs.zip。
    2. 导航至Javadoc API,路径:/docs/apidocs/index.html /com.ge.dspmicro.httpclient.api。
    3. 要启用HTTP客户端服务的SSL上下文,使用 IHttpClient.sslType 方法设置SSL类型。
    图片描述

    使用HTTP客户端示例应用程序

    为示范如何使用此服务,特提供一个HTTP客户端示例应用程序。
    1. 导航至<SDK installation location>/samples/sample-apps.zip,解压文件。
    2. 在sample-apps/sample文件夹内,打开sample-httpclient应用程序。
    注:
    关于构建和运行示例应用的说明参见 在Predix SDK内构建示例和运行示例

    配置HTTP客户端服务

    可以自定义HTTP客户端服务。为此,设置HTTP客户端配置文件内的属性值。
    1. 找到并打开配置文件:
    <Predix Machine runtime container location>/configuration/machine /com.ge.dspmicro.httpclient.cfg
    2. 设置以下属性的值:
    图片描述

    HTTP Tunnel

    HTTP Tunnel服务便于不同网络协议通过HTTPS进行通信。HTTPS协议充当信道的包装器,隧道协议可借此进行通信。
    如果网络只允许HTTP/HTTPS连接穿过防火墙,但需要其他协议进行通信,可利用HTTP Tunnel服务来实现使用其他协议的通信。

    使用范例

    HTTP Tunnel服务支持以下使用情景:
    • 使用HTTP Tunnel建立连接,启动一个远程桌面
    可以将远程桌面连接至本地端口,HttpTunnel可以通过隧道,与远程机器连接。
    • 使用SSH连接设备。
    要连接现场设备,设备必须与服务器进行初始接触。连接建立后,可以创建一个SSH连接,通过HTTP Tunnel与设备相连。
    下图展示了此种使用情景: 图1使用SSH连接设备

    图片描述

    功能

    HTTP Tunnel服务使用以下客户端-服务器模型:
    • HTTP Tunnel客户端 – 向HTTP Tunnel服务器发起HTTP Tunnel连接请求。
    • HTTP Tunnel服务器 – 接收来自HTTP Tunnel客户端的HTTP Tunnel连接请求。同时还发起HTTP Tunnel*数据传输请求*。
    总是由HTTP Tunnel客户端发起与HTTP Tunnel服务器的连接。服务器侧对客户端不加区分,只要他们具备访问服务器的权限即可。从HTTP Tunnel客户端到HTTP Tunnel服务器的连接建立后,服务器可以发起数据传输请求。
    HTTP Tunnel客户端对初始连接请求使用长轮询。保证连接对队列中的任何服务器数据传输请求开放。一旦服务器发起数据传输请求,客户端根据请求执行相应的动作,关闭连接,向服务器发送新连接,执行新的数据传输请求。
    HTTP Tunnel客户端还使用长轮询发送 GET 请求,从服务器获取数据。初始连接建立后,服务器与客户端建立会话,互相传输数据。HTTP Tunnel客户端内的一个会话映射至HTTP Tunnel服务器内的一个会话, 拉取和推送数据。根据接收用户或应用程序初始连接的服务来创建会话。然后,该服务通知配对服务使用同一个ID发起会话。
    下图展示了HTTP Tunnel数据流: 图2使用HTTP Tunnel服务的数据流

    图片描述

    配置HTTP Tunnel客户端

    要使用HTTP Tunnel客户端,必须先配置SSL上下文TrustStore。参考配置客户端KeyStore/TrustStore,设置下列属性 com.ge.dspmicro.securityadmin.sslcontext.client.truststore.type, com.ge.dspmicro.securityadmin.sslcontext.client.truststore.path和 com.ge.dspmicro.securityadmin.sslcontext.client.truststore.password 。
    可以配置HTTP Tunnel客户端,指定目标主机、允许的最大连接数和每个路由的最大连接数。还可以指定使用的连接协议名称或类型、协议端口和端口的作用。
    配置属性在单独的配置文件内定义,一个文件用于目的地和连接信息,另一个文件用于协议和端口信息。
    格式化.config文件(不是 .cfg 文件)内的属性时,使用类型字符,后跟值的引用字符串表示。例如,一个布尔型属性=B”true”。小写类型字符表示基本数据。字符串的类型可以省略。下表列出了类型和对应的类型字符:
    图片描述

    数组格式为属性=<类型>[”<值1>”,”<值2>”]。例如,整型数组属性=I[”1”, “2”, “3”]。为清晰起见,可使用反斜杠分隔。
    1. 配置HTTP Tunnel客户端设置:
    a. 找到并打开下列文件:
    <Predix Machine runtime container location>/configuration/machine /com.ge.dspmicro.httptunnel.client-[n].config file
    b. 设置以下属性的值:
    图片描述
    图片描述

    1. 配置HTTP Tunnel客户端协议设置:
      a. 找到并打开下列文件:
      图片描述
      b. 设置以下属性的值:
      图片描述
      图片描述

    配置HTTP Tunnel服务器

    可以配置HTTP Tunnel服务器,指定监听HTTP Tunnel客户端的服务器端口。
    1. 将图片描述
    2. 2. 打开tunnelServer文件(Windows系统为tunnelServer.bat文件),位置:/samples/sample-cloud-apps/sample/httptunnel-server。
    3. 设置下列参数值:
    图片描述
    4. 找到并打开下列文件:
    图片描述

    1. 设置以下属性的值:
      图片描述
      图片描述

    2. 找到并打开下列文件:
      图片描述

    3. 设置以下属性的值:
      图片描述

    为HTTP Tunnel配置Predix云身份管理服务

    可以通过设置.config文件或在技术人员控制台内使用Predix云注册(会自动设置属性),为 HTTP tunnel配置Predix云身份管理服务。
    格式化.config文件(不是 .cfg 文件)内的属性时,使用类型字符,后跟值的引用字符串表示。例如,一个布尔型属性=B”true”。小写类型字符表示基本数据。字符串的类型可以省略。下表列出了类型和对应的类型字符:
    图片描述
    数组格式为属性=<类型>[”<值1>”,”<值2>”]。例如,整型数组属性=I[”1”, “2”, “3”]。为清晰起见,可使用反斜杠分隔。
    1. 找打并打开下列文件:
    图片描述

    1. 设置以下属性的值:
      图片描述
      图片描述

    HTTP Proxy设置概述

    可以使用Proxy配置服务指定HTTP proxy设置,为某个位置启用Predix机器的设备存储和提供proxy设置,还可以指定不需要proxy的目的地。
    Apache Proxy配置服务
    Apache Proxy配置服务为某个位置启用Predix机器的设备存储和提供proxy设置。
    这样,服务就无需在自己的配置文件内实现proxy设置。
    由于服务通过不同方式使用proxy信息,proxy主机名、proxy端口和proxy用户名及密码的值用原始形式存储在 org.apache.http.osgi.services.ProxyConfiguration 接口内。
    • String getHostname()
    • int getPort()
    • String getUsername()
    • String getPassword()
    • boolean isEnabled()
    • String[] get ProxyExceptions();
    使用范例
    以下使用情景示范了如何使用Apache Proxy配置服务。
    1. Predix机器的HTTP客户端需要与外部服务器建立代理连接。与在自己的配置文件内实现proxy设置不同,该服务消费在Predix机器运行时容器内运行的Proxy配置服务,并提供设置。
    2. Predix机器的网络套接字客户端需要与外部服务器建立代理连接。与在自己的配置文件内实现proxy设置不同,该服务消费在Predix机器运行时容器内运行的Proxy配置服务,并提供设置。然后容器将设置应用到自己的 org.eclipse.jetty.websocket.client 碎片上。
    依赖项
    消费该服务,需要Maven依赖项和OSGi导入:

    o 消费Proxy配置服务需要以下Maven依赖项:
    图片描述

    • 消费捆绑束组件(bundle)需要下列OSGi导入:
    图片描述

    配置Apache Proxy配置设置

    配置Apache Proxy配置服务时,最少须提供proxy主机信息。
    格式化.config文件(不是 .cfg 文件)内的属性时,使用类型字符,后跟值的引用字符串表示。例如,一个布尔型属性=B”true”。小写类型字符表示基本数据。字符串的类型可以省略。下表列出了类型和对应的类型字符:
    图片描述

    数组格式为属性=<类型>[”<值1>”,”<值2>”]。例如,整型数组属性=I[”1”, “2”, “3”]。为清晰起见,可使用反斜杠分隔。
    1. 导航至
    图片描述
    图片描述
    图片描述

    获取Apache Proxy配置服务

    要获取Apache Proxy配置服务,可使用声明式服务注入。
    下例展示了如何使用声明式服务注入该服务:
    图片描述

    Little Proxy

    Predix机器运行时容器内运行的应用程序可以与Predix云通信,因为Predix机器为发往云端的请求添加了认证。在Predix机器内运行Little Proxy服务, 使Predix机器容器外运行的可信应用程序可以通过代理请求与云端通信。
    Little Proxy服务方便了使用以下工作流的代理请求:
    1. 在Predix机器上或在设备容器外运行的可信应用程序向Predix机器和Little Proxy服务发送HTTPS请求。
    2. Little Proxy服务向Predix云请求接入令牌。
    3. Little Proxy服务将令牌添加到proxy请求内,并将其转发至云端或任何上游proxy。
    下图展示了此工作流:

    图片描述

    配置Little Proxy服务
    在代理或调试容器类型内,可以配置Little Proxy服务,指定端口、连接超时时间和范围。
    1. 导航至/configuration/machine
    2. 打开com.ge.dspmicro.littleproxy.config文件。
    3. 设置以下属性的值:
    图片描述

    图片描述

    网络套接字客户端服务

    网络套接字客户端服务是云网关的一个组件。通过这个服务,应用程序可以与网络套接字服务器端点建立网络套接字连接。Predix机器实现通过Java网络套接字API (JSR-356)暴露网络套接字客户端。这样可以使Predix机器上运行的应用程序与网络套接字提供者无关。

    使用范例

    网络套接字客户端服务支持下列使用情景:
    • 服务尝试连接 WebSocket 端点,以发送和接收数据。组件首先获取一个客户端容器实例,后者通过依赖项注入实现 WebSocketContainer 接口。然后服务调用 connectToServer() 方法,将 ClientEndpoint-annotated WebSocket 类传递给该方法。
    • 服务尝试连接 WebSocket 端点以传输/接收数据。组件首先获取一个客户端容器实例,后者通过依赖项注入实现 WebSocketContainer 接口。然后调用 connectToServer() 方法,将 ClientEndpoint-annotated WebSocket对象实例传递给方法。通过该方法,消费者可以用配置的状态注册网络套接字 ClientEndpoint ,而不是通过未实例化的类进行注册。

    SSL上下文

    网络套接字客户端使用安全管理配置文件内设置的全局SSLContext,通过TLS启用网络套接字,该配置文件位于图片描述。配置完成后,客户端自动在连接WSS URI时建立TLS连接。

    依赖项

    消费此服务需要Maven依赖项和OSGI导入包。
    • 需要以下Maven依赖项:
    图片描述

    • 消费捆绑束组件(bundle)需要以下OSGi导入:
    图片描述

    获取网络套接字客户端服务

    使用声明式服务注入 WebSocketContainer 服务。
    下例展示了如何注入 WebSocketContainer 服务:
    图片描述

    使用网络套接字客户端服务

    Java网络套接字的Java Community Process为消费者提供了一种方便的、与提供者无关的方法来编写网络套接字代码。利用该API,可以将类作为客户端/服务器端点来添加注释,并可以使用以下通用的网络套接字回调约定为各个方法添加注释: onOpen/onMessage/onClose。
    使用下表作为类或方法的注释参考。

    图片描述

    下例展示了一个依照JSR-356标准注释的客户端。示例含有最少限度的 OnOpen 和 OnMessage 回调。要使用网络套接字客户端服务,消费者必须实现一个注释类。
    图片描述

    使用网络套接字客户端示例应用程序

    为了示范如何使用该服务,特提供一个网络套接字示例应用程序。
    1. 导航至图片描述,解压文件。
    2. 在sample-apps/sample文件夹内,打开sample-websocketclient应用程序。
    注:
    关于构建和运行示例应用的说明参见 在Predix SDK内构建示例和运行示例。
    配置网页服务安全性
    1. 导航至图片描述
    2. 打开安全管理配置文件com.ge.dspmicro.securityadmin.cfg。
    3. 配置以下属性:
    图片描述

    展开全文
  • 8.API网关意义

    千次阅读 2018-04-17 07:39:00
    意义 集合多个API 统一API入口(天气预报只要依赖网关就好了,不需要关心什么城市数据API和天气数据API):Pc就请求Web应用API(数据量大),移动就请求移动API 2.使用api网关的利与弊 好处:降低构建微服务的复杂性...

    1.API网关

    1. 避免将背部信息泄露给外部
    2. 为微服务添加额外的安全层
      • 意义
    3. 集合多个API
    4. 统一API入口(天气预报只要依赖网关就好了,不需要关心什么城市数据API和天气数据API):Pc就请求Web应用API(数据量大),移动就请求移动API

    2.使用api网关的利与弊

    1. 好处:降低构建微服务的复杂性;微服务模拟与虚拟化
    2. 弊端:在架构上需要额外考虑更多编排与管理;路由逻辑配置要进行统一的管理

    3.常见api网关的实现方式

    1. Nginx作为API网关
    2. Zuul,也是netflix公司开发的,SpringCloud封装好了,认证、鉴权、负载均衡、弹性路由等
    3. Kong

    4.集成Zuul

    1. mico-weather-eureka-client-zuul新建copy,导入spring-cloud-starter-netflix-zuul
    2. 修改application添加@EnableZuulProxy
    3. 修改properties
    4. 访问:http://localhost:8080/hi/hello,这个就是代理过的

    5.API网关设计与实现

    1. 集成zuul:天气采集,数据,城市,天气预报;只修改msa-weather-report-eureka-feign-gateway
    2. 本来天气预报依赖数据与城市,现在只要依赖zuul会好了,进行如下配置
    spring.application.name=msa-weather-eureka-client-zuul
    #启动后就会找这个服务器,并把自己注册进去
    eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
    
    zuul.routes.city.path=/city/**
    zuul.routes.hi.serviceId=msa-weather-city-eureka
    
    zuul.routes.data.path=/data/**
    zuul.routes.data.serviceId=msa-weather-data-eureka
    1. msa-weather-eureka-client-zuul

    6.天气预报微服务重构,改为依赖网关

    1. 修改DataClient

    8.运行测试重构后的系统

    1. 运行eureka-server8761等
    2. 访问:http://localhost:8087/report/cityId/101282002
    3. 期间网关的一个问题导致city客户端访问不到:properties中zuul.routes.city.serviceId=,city写成了hi
    展开全文
  • Http API网关服务模块设计方案1. 概述 网关作为服务生产者和服务消费者之间的接口,一方面通过“服务路由”为服务消费找到所需服务的具体位置并调用;另一方面为后台服务器提供负载均衡、安全、流量控制、身份认证...

    Http  API网关服务模块设计方案

    1. 概述                          

    网关作为服务生产者和服务消费者之间的接口,一方面通过“服务路由”为服务消费找到所需服务的具体位置并调用;另一方面为后台服务器提供负载均衡、安全、流量控制、身份认证等相关功能

    2. 模块需求描述

            需求

    模块

    描述

    API请求服务路由

    服务路由模块

    对业务请求进行路由,后台服务接收到服务请求后将执行结果交给服务网关,服务网关将结果转发给请求客户端

    后台服务管理

    服务管理模块

    实现对后台服务的统一管理,注册、修改、删除

    网关访问管理

     访问控制模块

    对访问请求进行管理,过滤掉非法、无意义的访问请求

    记录网关访问日志

    访问日志记录模块

    将访问记录永久化存储,以便通过访问记录实现对非业务功能的支持

    业务连续性支持

    心跳模块

    通过心跳发送相关通知消息,保障业务连续性

                                                       

    3. 整体架构

     

    图1

    4. 模块设计

    4.1 服务路由模块

    4.1.1 业务功能请求、应答流程

    客户端的所有请求都首先经过服务网关,然后由它将请求路由到合适的微服务,网关经常会通过调用多个微服务并合并结果来处理一个请求。


    图2

    4.1.2 业务服务请求流程的剖析

    1.  在(1)、(2)过程中,网关收到消费者的服务请求后,需要解析消费者所请求的具体服务,因此需要定义一个消息结构,如:

         Request struct {                                  

    //如果请求多个服务,对服务进行组装,

    //网关拿到后对其解析,这对每个服务做出请求

                  Service_name  string; //服务名称,唯一

                 Service_ID     float;  // 服务ID,唯一

                 Service_Position  url/ip;//服务所在的地址、url

    Service_request  requester;  //服务请求者             

    Service_load  param_data;  //服务调用所需的参数

    }

    网关通过解析这个Request结构体找到服务ID 、服务所在的具体位置,解析过程需要用到一个服务注册表,结构大体如下:

    Service_Table   {

    Service_name : add_service

    Service_version版本

    Sevice_position:  .../path/add.html   或者可以直接是一个IP地址

    Service_descrition:   服务描述

    Service_creator  :   责任人

    }

    服务注册表来自于服务注册模块,当后台需要添加一个服务时,需要向服务注册模块注册,服务注册模块将其添加到服务注册表中,在之后的服务调用中通过读取服务注册表找到服务所在的具体位置。服务注册表的存储、读取实现通过数据库模块来实现。

    2、在(2)中的协议解析完成后,在第三步(3)中根据获取到的服务地址与具体的服务通信,不关心所提交的Service_load 里面的具体内容,这个内容由服务自己进行解析,服务端根据服务功能提供服务结果(第4步),请求可以失败,无论如何会提供一个服务的返回结果。

    3、567步中,网关收到各个服务请求的返回结果后,进行合并,将结果返回给服务消费者。

    服务请求与返回结果的结构体格式定义可以分开来做,网关只负责服务路由,请求的内容和返回结果由服务消费者和服务提供者自己来封装、解析,事先二者做好协议定义。

    4.1.3 微服务访问结果的合并

    每个业务请求内可能包含对多个微服务的请求,API 网关收到服务请求后,对请求服务进行解析,并发对每个服务进行请求,每个服务的请求结果返回后,API网关对服务结果进行合并,将其返回给服务请求者。

    如果每个业务请求只包含一个对后台服务的请求,可以通过Nginx配置文件的方式将请求路由到后台服务器;如果每个业务请求包含对多个微服务的请求,则需要定义请求结构体和结果返回结构体,以完成服务请求者和服务提供者间的通信。3展示了,请求中包含多个微服务时,API网关的响应流程。


    图3

     

    (1) 服务请求Request A 向 API网关发送服务请求信息,里面包括对三个服务的请求,及请求服务的名字和每个请求要用到的参数;

    (2、3)网关收到服务请求后通过服务的名字,在服务注册表中找到服务所在的服务器位置;

    (4、5)后台服务收到请求后对服务进行处理,并将结果返回

    (6) 网关将请求的结果合并返回给服务请求者,并不是请求的每个微服务都会正确回应,但是网关会把所有的微服务结果都返回

     

    4.2 服务管理模块

    4.2.1 服务注册

    后台服务器提供很多微服务,服务管理模块对这些微服务进行统一的管理,主要是服务的注册、注销、修改。图4为服务注册流程,后台微服务较多,并且服务内容不会经常变动,从开发角度讲,不可能针对每个微服务提供服务注册方法,因此服务注册由服务提供商发起,服务注册模块提供两方面的接口:

    1.与服务注册商交互的接口。接收请求,返回请求操作结果。

    2. 操作数据库的接口。(本质上就是,服务注册商通过服务注册模块实现服务注册表的操作


    图4

    目前未涉及到服务提供商的问题,可以由管理员直接将服务注册表写入到数据库中,管理员对其进行运维,如图5。对于数据库的选择,遵循以下原则:数据一致性、冗余备份策略


           图 5

    4.2.2 服务可用性的周期性检测

        服务注册模块可以实现对服务注册表的操作,方式是读取服务注册表所在的数据库数据,获得所有服务所在的位置,建立服务测试请求(定义服务测试请求规范),如果服务能够正常访问则跳过;如果服务不能正常访问,则告知管理员。

     

    4.3 访问日志记录模块与访问控制模块(具体细节参考实际业务场景)

                 

    访问日志记录:

    记录对API网关访问的日志,通过分析日志获得一些有用的信息,如通过流量监控判断是否存在类似ddos的攻击,判断是否存在安全测试行为

    访问控制模块:

    访问合法性的检查,无论是对内网还是外网的接口都需要做身份认证,而认证在一些规模大点的公司都会有统一的单点登录系统,如果每个微服务系统都是做对接单点登录系统的工作,那么显然比较浪费资源,开发效率低。可以将认证的部分抽取到网关层,然后微服务系统无需关注认证的逻辑只关注自身业务即可。
        对一些特定的接口设置白名单,访问次数,访问频率等各类设置,这些非业务功能的配置以及变更不会影响微服务的实现可以在网关层单独做操作。

     

    4.4 心跳模块(具体细节参考实际业务场景)                                            

                                                    

     

     

     

     

     

     

     

     

     


    展开全文
  • 使用Zuul构建微服务网关

    千次阅读 2018-07-26 14:57:06
    之前没有使用网关的微服务可能存在的问题? 客户端直接和微服务交互,增加了复杂度; 某些场景下可能存在跨域; 如果一个功能点需要调用多个微服务,每个服务都需要身份认证,使得身份验证复杂冗余; ...
  • WAP网关服务器应用介绍

    千次阅读 2008-06-25 09:41:00
    WAP网关服务器应用介绍 1. 简介 目前wap已成为信息技术(it)领域内的热门话题,有关这方面的文章和论述了较多,涉及到wap的方方面面,例如协议栈本身、wap的各种应用等。的确,wap实现了21世纪人们随时随地上网冲浪...
  • 网关

    2018-06-01 10:43:56
    什么是网关 :顾名思义,网关(Gateway)就是一个网络连接到另一个网络的“关口”。 种类:按照不同的分类标准,网关也有很多种。TCP/IP协议里的网关是最常用的,在这里我们所讲的“网关”均指TCP/IP协议下的网关...
  • 服务网关概述什么是网关?为什么需要网关?Zuul 实现网关(已经被淘汰,但是还有人用)路由访问映射规则GateWay实现网关 概述 什么是网关?为什么需要网关? 什么是网关: 网关就是架设在前端浏览器和后端微服务之间的一层...
  • ——本文讨论了WAP网关服务器与移动网络的几种连接方式,以及相应的协议栈,并对其进一步应用作了一些初步探讨。本文讨论了WAP网关服务器与移动网络的几种连接方式,以及相应的协议栈,并对其进一步应用作了一些初步...
  • Spring Cloud中的API网关服务Zuul

    千次阅读 2017-10-30 11:01:27
    到目前为止,我们Spring Cloud中的内容已经介绍了很多了,Ribbon、Hystrix、Feign这些知识点大家都耳熟能详了,我们在前文也提到过微服务就是把一个大的项目拆分成很多小的独立模块,然后通过服务治理让这些独立的...
  • 在这里讨论了wap网关服务器与移动网络的几种连接方式,以及相应的协议栈,并对其进一步应用作了一些初步探讨。 1. 简介 目前wap已成为信息技术(it)领域内的热门话题,有关这方面的文章和论述了较多,涉及到wap的...
  • 五:对微服务API服务网关的理解

    万次阅读 2018-07-27 21:43:02
    通过以下几个问题去理解微服务中的一个重要组件:API网关。 1. 什么是API网关 2. 为什么需要API网关 3. API网关在微服务架构体系中处于什么位置 4. 网关技术实现有哪些 5. zuul网关工作原理是什么样的 6. 技术上...
  • 上一篇(游戏服务器之网关)说了一些网关大致功能,这次说说具体的实现. 网关需要与客户端保证连接。这里网关使用Netty4来做为网络通信框架。它也是目前在Java游戏服务器开发中,长连接使用最多的框架。 1,管理...
  • 服务网关zuul之四:zuul网关配置 禁用过滤器 在Zuul中特别提供了一个参数来禁用指定的过滤器,该参数的配置格式如下: zuul.AccessFilter.pre.disable=true 动态加载 动态路由 通过结合Spring Cloud Config的动态...
  •  第一种方式可充分利用目前的基础设施,即数量庞大的用户线都可实现与WAP网关服务器的连接,直接的好处就是WAP服务供应商会增多,可充分引入竞争和改善服务等。  第二种方式中ISP商需要租用相对昂贵的中继线,同时...
  • 服务网关-Zuul

    千次阅读 2018-09-03 14:33:44
    参考GOF设计模式中的Facade模式,将细粒度的服务组合起来提供一个粗粒度的服务,所有请求都导入一个统一的入口,那么整个服务只需要暴露一个api,对外屏蔽了服务端的实现细节,也减少了客户端与服务器的网络调用次数...
  • Java网关服务-AIO(一)

    千次阅读 2018-10-17 15:37:00
    Java网关-AIO(一) aio:声明一个byteBuffer,异步读,读完了之后回调,相比于Future.get(),可以减少阻塞、减少线程等待,充分利用有限的线程 nio:声明一个byteBuffer,自己同步读出来,再做业务 概述 作为一个网关,...
  • 服务网关配置:Zuul

    千次阅读 多人点赞 2021-02-01 23:31:28
    目录第一章 Zuul介绍1.1、什么是Zuul1.2、为啥用Zuul第二章 Zuul路由功能2.1、项目准备与启动2.2、工程搭建与测试2.3、配置自定义路由2.4、禁止默认的路由2.5...Zuul其他功能4.1、负载均衡超时4.2、服务降级熔断4.3、网
  • 为什么要进行网关限流? 手游的架构通常是客户端通过Socket连接直连网关,所有请求都需要经过网关,然后由网关统一...严格意义上来说计数器限流不属于限流算法,使用计数器来进行限流,主要用来限制总并发数,比...
  • 网关api Gateway的重要性不言而喻,网关负责统一接收所有请求,然后根据不同的规则进行转发到不同的服务。使用网关能够统一的管理请求日志、进行权限控制、过滤等,这样就能避免在每个单体应用中做重复的工作。这一...
  • 对于大多数基于微服务的应用程序而言,实现一个API网关是有意义的,它可以作为系统的唯一入口。API网关负责服务请求路由、组合及协议转换。 它为每个应用程序客户端提供一个定制的API。API网关还可以通过返回缓存...
  • 本文讨论了WAP网关服务器与移动网络的几种连接方式,以及相应的协议栈,并对其进一步应用作了一些初步探讨。 1. 引言 目前WAP已成为信息技术(IT)领域内的热门话题,有关这方面的文章和论述了较多,涉及到WAP的...
  • 构建微服务:使用API网关     克里斯·理查森(ChrisRichardson)。 编辑-这个由七部分组成的系列文章现已完成:    您还可以下载完整的文章集,以及有关使用Nginx Plus作为电子书实现微服务的信息-微服务...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,871
精华内容 17,148
关键字:

网关服务的意义