前面在谈微服务架构的时候,我博客上转过Chris Richardson 微服务系列中对微服务网关的描述:

通常来说,使用 API 网关是更好的解决方式。API 网关是一个服务器,也可以说是进入系统的唯一节点。这与面向对象设计模式中的 Facade 模式很像。API 网关封装内部系统的架构,并且提供 API 给各个客户端。它还可能还具备授权、监控、负载均衡、缓存、请求分片和管理、静态响应处理等功能。下图展示了一个适应当前架构的 API 网关。

API 网关负责服务请求路由、组合及协议转换。客户端的所有请求都首先经过 API 网关,然后由它将请求路由到合适的微服务。API 网关经常会通过调用多个微服务并合并结果来处理一个请求。它可以在 web 协议(如 HTTP 与 WebSocket)与内部使用的非 web 友好协议之间转换。

API 网关还能为每个客户端提供一个定制的 API。通常,它会向移动客户端暴露一个粗粒度的 API。以产品详情的场景为例,API 网关可以提供一个端点(/productdetails?productid=xxx),使移动客户端可以通过一个请求获取所有的产品详情。API 网关通过调用各个服务(产品信息、推荐、评论等等)并合并结果来处理请求。

对于API 网关,虽然网上有类似Netfix Zuul和Kong等的开源实现,但是本篇重点还是想再思考下网关应该具备的一些关键功能点。主要还是是服务接入,服务运维,服务运营,服务安全,服务管控治理等几个方面来思考下一个完整的API网关应该具备或后续扩展的能力。

服务注册和服务接入能力

1.直接将Java API接口发布为服务,即内部可以用Java API或RPC,跨模块访问走Rest接口服务注册到网关
2.将已有的Rest API接口通过代理方式注册和接入
3.将已有的Soap WS服务接入通过协议转换和数据格式转换后发布为Rest API服务接口
4.将内部基于JMS或AMQP的消息适配后发布为Rest API服务接口
5.提供服务自动化注册和接入的能力

网关接入和发布核心功能

1.协议转换:重点是支持SOAP,JMS,Rest间的协议转换
2.数据转换:重点是支持XML和Json之间的报文格式转换能力(可选)
3.负载均衡:注意是网关本身的负载均衡,可以部署多个API网关形成Cluster集群
4.路由:基础能力,基本的服务路由支持

服务安全

1.基于Token的客户端访问控制和安全策略
2.传输数据和报文加密,到服务端解密,需要在客户端有独立的SDK代理包
3.基于Https的传输加密,客户端和服务端数字证书支持
4.基于OAuth2.0的服务安全认证(授权码,客户端,密码模式等)

服务管控和治理

1.服务消息和日志监控能力,能够查看详细的服务消息日志,在取中心化的网关中需要单独处理
2.服务流量控制,限流和熔断能力,可以设置不同的流量控制策略
3.服务链的监控和跟踪,可以跟踪多个服务间的调用链,需要进一步规约Trace_id的使用

面向开发者的自服务能力

1.提供开发者门户和面向开发者的各种自服务能力
2.提供API服务目录,服务详细说明,服务调用示例,在线测试等基础功能
3.提供服务接入,服务订购关键自服务流程
4.提供详细的服务开发案例代码,开发框架,本地SDK包,接入指南帮助文档等

当前开源的API网关产品-Zuul和Kong产品

Spring Zuul: Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。它的主要功能有:认证、压力测试、金丝雀测试、动态路由、负载削减、安全、静态响应处理和主动/主动交换管理。spring zuul 是spring Cloud的组件,可以和spring cloud的各个组件结合使用。

SpringCloud的整体组建包括:Zuul、Ribbon、EureKa、Fein、Hystrix等。其中Zuul就是一个类似APIGateway的组建,Ribbon是类似于Nginx的代理服务器,Eureka用于注册和发现服务,Hystrix可以作为整个架构的断路服务,用于服务降级。Fein可以作为一个Rest服务的提供者,可以供内部服务之间相互调用

Kong:Kong 是一个现成 的Api Gateway 的解决方案,它在 nginx 上进行了开发。Api gateway 的实现方式有很多种,比如说 JVM 上可以用基于NIO 的框架比如Netty,Vertx,Spring Reactor,JOSS Undertow。现在一个比较流程的没有基于 JVM 的就是 NodeJs。其他的还有 Nginx Plus。

文章转载至 http://blog.sina.com.cn/s/blog_493a84550102x6zu.html

再谈API GateWay服务网关的更多相关文章

  1. SpringCloud初体验:四、API GateWay 服务网关

    网关服务很多,比如:Zuul.Kong.spring cloud gateway ……, 这里不纠结哪种性能好,本次体验是用的 spring cloud gateway 更多网关比较可以了解这篇文章: ...

  2. Spring Cloud Gateway 服务网关快速上手

    Spring Cloud Gateway 服务网关 API 主流网关有NGINX.ZUUL.Spring Cloud Gateway.Linkerd等:Spring Cloud Gateway构建于 ...

  3. Spring Cloud 系列之 Gateway 服务网关(三)

    本篇文章为系列文章,未读第一集的同学请猛戳这里: Spring Cloud 系列之 Gateway 服务网关(一) Spring Cloud 系列之 Gateway 服务网关(二) 本篇文章讲解 Ga ...

  4. Spring Cloud 系列之 Gateway 服务网关(二)

    本篇文章为系列文章,未读第一集的同学请猛戳这里:Spring Cloud 系列之 Gateway 服务网关(一) 本篇文章讲解 Gateway 网关的多种路由规则.动态路由规则(配合服务发现的路由规则 ...

  5. Spring Cloud 系列之 Gateway 服务网关(四)

    本篇文章为系列文章,未读第一集的同学请猛戳这里: Spring Cloud 系列之 Gateway 服务网关(一) Spring Cloud 系列之 Gateway 服务网关(二) Spring Cl ...

  6. spring cloud微服务快速教程之(十) gateway 服务网关

    0.前言 gateway是spring的二代网关, 作为Netflix Zuul的替代者,是异步非阻塞网关 ,ZUUL2也是异步非阻塞的,但未纳入spring cloud整合计划 基于WebFlux  ...

  7. Spring Cloud 系列之 Gateway 服务网关(一)

    什么是 Spring Cloud Gateway Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由 ...

  8. 微服务(七)Gateway服务网关

    1 为什么要有网关 权限控制:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截. 路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发 ...

  9. Spring Cloud Gateway服务网关

    原文:https://www.cnblogs.com/ityouknow/p/10141740.html Spring 官方最终还是按捺不住推出了自己的网关组件:Spring Cloud Gatewa ...

随机推荐

  1. Flink 靠什么征服饿了么工程师?

    Flink 靠什么征服饿了么工程师? 2018-08-13    易伟平 阿里妹导读:本文将为大家展示饿了么大数据平台在实时计算方面所做的工作,以及计算引擎的演变之路,你可以借此了解Storm.Spa ...

  2. vs开发工具报错:参数错误 异常来自 HRESULT:0x80070057 E_INVALIDARG

    解决方法: 4.0 删除 c:\windows\microsoft.net\framework\v4.0.30319\temporary asp.net files 2..0 删除 c:\window ...

  3. linux CentOS7 修改系统时间

    linux在安装的时候如果时区选择错误,可以在系统安装完成之后修改.系统时间运行着也会有偏差,需要对时间进行实时同步,方法如下: 打开terminal 首先转到root权限 :并输入密码 然后输入:t ...

  4. TZOJ 1072: 编辑距离(动态规划)

    1072: 编辑距离 时间限制(普通/Java):1000MS/10000MS     内存限制:65536KByte 总提交: 917            測试通过:275 描写叙述 如果字符串的 ...

  5. 【crontab】“bad minute”及“errors in crontab file, can't install”错误处理

    今天有朋友提到,在使用crontab定制后台定时备份任务时报出“bad minute”及“errors in crontab file, can't install”错误.经确认,根本原因是cront ...

  6. jdk1.7下载路径

    http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

  7. weblogic 内存 及 内存溢出

    . 区分JVM虚拟机选项:Xms Xmx PermSize MaxPermSize JVM限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制 ...

  8. Asp.net视图状态的作用

    视图状态(view state)是在单个页面中保存信息的第一选择,ASP.NET Web控件也使用试图状态在回发间保存属性值.通过页面内建的 ViewState 属性,你可以把自己的数据放入到视图状态 ...

  9. UNIX网络编程读书笔记:TCP输出、UDP输出和SCTP输出

    TCP输出 下图展示了应用进程写数据到TCP套接口的过程. 每一个TCP套接口有一个发送缓冲区,我们可以用SO_SNDBUF套接口选项来改变这个缓冲区的大小. 当应用进程调用write时,内核从应用进 ...

  10. Dynamic Proxy (动态代理模式)

    动态代理(运行期行为)主要有一个 Proxy类 和一个 InvocationHandler接口 动态代理角色: 1. 抽象主题角色 2. 真实主题角色(实现了抽象主题接口) 3. 动态代理主题角色(实 ...