基于API网关的微服务组合策略研究
- 格式:pdf
- 大小:2.97 MB
- 文档页数:3
基于API网关的微服务架构设计与实现随着微服务架构的流行,API网关成为了微服务系统中不可或缺的一部分。
API网关作为一种服务的入口,承担着路由、认证、鉴权、流量控制等职责,可以将微服务系统中散落的服务整合成一个协调一致的整体。
本文将探讨基于API网关的微服务架构设计与实现。
一、微服务架构概述微服务架构是一种软件架构风格,它将一个大型应用程序拆分为若干个独立的、可以独立部署的小型服务。
每个服务都是一个具体的业务功能模块,可以通过轻量级机制进行通信。
微服务架构具有以下优点:1. 易于扩展性:由于微服务是独立部署的,因此可以针对每个服务进行独立的扩展。
2. 高可用性:每个微服务都可以通过水平扩展来提高可用性。
如果某个服务出现问题,可以通过切换到其他服务节点来保证服务可用。
3. 易于替换性:由于每个微服务都是独立的,因此可以比较容易地替换它们。
4. 易于应对变化:每个微服务都是独立开发、测试和部署的,因此可以更容易地适应业务需求的变化。
二、API网关概述API网关是一种服务的入口,它提供了各种服务的路由、认证、鉴权、流量控制等功能。
API网关可以将微服务系统中散落的服务整合为一个协调一致的整体。
API网关有以下优点:1. 提供了一种标准的服务入口:API网关提供了一种标准的服务入口,客户端无需直接访问每个微服务,简化了客户端的操作。
2. 集成了各种功能:API网关可以集成认证、鉴权、路由、限流等功能,简化了微服务系统的架构。
3. 提高了系统的可用性:API网关可以通过负载均衡和容错机制来提高系统的可用性。
三、基于API网关的微服务架构设计基于API网关的微服务架构包括以下几个部分:1. 微服务:每个业务功能模块都是一个微服务,可以独立部署运行。
2. API网关:API网关是服务的入口,承担着路由、认证、鉴权、流量控制等职责,将微服务整合成一个协调一致的整体。
3. 注册中心:微服务需要向注册中心注册,API网关通过注册中心来获取微服务的信息。
SpringCloud微服务项⽬实战-API⽹关Gateway详解实现前⾯讲过zuul的⽹关实现,那为什么今天⼜要讲Spring Cloud Gateway呢?原因很简单。
就是Spring Cloud已经放弃Netflix Zuul了。
现在Spring Cloud中引⽤的还是Zuul 1.x版本,⽽这个版本是基于过滤器的,是阻塞IO,不⽀持长连接。
Zuul 2.x版本跟1.x的架构⼤⼀样,性能也有所提升。
既然Spring Cloud已经不再集成Zuul 2.x了,那么我今天也就再讲解⼀下Spring Cloud Gateway了。
1. API⽹关API⽹关是⼀个服务器,是系统的唯⼀⼊⼝。
从⾯向对象设计的⾓度看,它与外观模式类似。
API⽹关封装了系统内部架构,为每个客户端提供⼀个定制的API。
它可能还具有其它职责,如⾝份验证、监控、负载均衡、缓存、请求分⽚与管理、静态响应处理。
API⽹关⽅式的核⼼要点是,所有的客户端和消费端都通过统⼀的⽹关接⼊微服务,在⽹关层处理所有的⾮业务功能。
通常,⽹关也是提供REST/HTTP的访问API。
⽹关应当具备以下功能:性能:API⾼可⽤,负载均衡,容错机制。
安全:权限⾝份认证、脱敏,流量清洗,后端签名(保证全链路可信调⽤),⿊名单(⾮法调⽤的限制)。
⽇志:⽇志记录(spainid,traceid)⼀旦涉及分布式,全链路跟踪必不可少。
缓存:数据缓存。
监控:记录请求响应数据,api耗时分析,性能监控。
限流:流量控制,错峰流控,可以定义多种限流规则。
灰度:线上灰度部署,可以减⼩风险。
路由:动态路由规则。
2,SpringCloud Gateway 特征SpringCloud官⽅,对SpringCloud Gateway 特征介绍如下:(1)基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0(2)集成 Hystrix 断路器(3)集成 Spring Cloud DiscoveryClient(4)Predicates 和 Filters 作⽤于特定路由,易于编写的 Predicates 和 Filters(5)具备⼀些⽹关的⾼级功能:动态路由、限流、路径重写从以上的特征来说,和Zuul的特征差别不⼤。
使用Kong进行API网关和微服务治理随着企业业务的快速发展和云计算技术的广泛应用,企业IT 架构已经逐渐从传统的单体架构向微服务架构转型。
在微服务架构下,每个微服务拥有独立的开发、部署、运行和测试能力,可以提高应用的可扩展性、灵活性和快速开发能力。
但是,在微服务架构下,微服务数量庞大,管理和治理难度也相应增加。
为了解决这个问题,大量的企业开始使用API网关进行微服务治理。
API网关可以看作是微服务的门户,所有的微服务请求都通过API网关进行交互。
API网关不仅能够进行请求的转发、路由和负载均衡等基本功能,还能够进行请求过滤、鉴权和流量控制等高级功能。
在企业微服务架构中,API网关的作用十分重要。
在API网关领域,Kong是一个知名的开源产品。
Kong是一个轻量级的API网关和微服务治理平台,用于处理敏捷、安全和可扩展的API管理。
其轻量级的特点使其在资源限制的环境中得以广泛应用。
同时,Kong能够提供优秀的性能和可靠性,因此在微服务治理领域得到了广泛的应用。
那么,如何使用Kong进行API网关和微服务治理呢?下面将分别从API网关和微服务治理两个方面进行介绍。
一、API网关在使用Kong进行API网关方面,我们可以将其分为以下几个步骤:1、部署KongKong可以在Linux和Docker等平台上进行部署。
我们可以通过下载其二进制包或使用Docker镜像进行安装。
2、创建服务和路由在Kong中,一个服务指的是一个被封装在微服务中的API。
我们可以通过Kong的API或CLI命令来创建服务和路由。
在创建服务时,我们需要给出服务的名称、服务的主机和端口、服务的协议等信息。
在创建路由时,我们需要将服务路由到适当的URL,并定义访问路由的策略,如使用正则表达式等。
3、添加插件Kong支持各种插件,如鉴权、限流、负载均衡、重试等。
我们可以通过API网关为每个服务添加不同的插件,以达到更好的服务管理和控制。
16REGION INFO 数字地方摘要:近年来微服务架构被广泛使用,系统后台服务支持的对象从之前单一的Web应用,扩展到多种应用场景。
API网关作为系统的入口,已经成为微服务架构中不可或缺的部分,尤其是随着5G网络的迅速发展,各服务之间的流量变化呈现出爆发性的增长,迫使API网关被赋予了更多的功能和作用。
论文通过对API网关的概念、架构及作用、服务定位的论述,分析了企业如何进行API网关的选型与设计。
关键词:微服务;API网关;选型;设计一、API 网关网关一词最早出现于互联网,是实现不同设备之间互联的网络连接设备。
实现两个系统或两个服务的通信,在中间负责API 的调用,我们把这个网关称之为API 网关(API Gateway)。
在微服务架构中为了提高系统的性能,微服务化各应用服务,各服务之间的调用变得更多,也更为频繁。
API 网关主要负责服务的路由请求、负载均衡、协议转换等工作,但是随着微服务架构的变迁,5G 网络和移动应用的迅猛发展,需求不断增加,业务快速增长,各服务之间的流量变化呈现出爆发性的增长趋势,迫使API 网关催生出更多的功能。
二、API 网关系统架构及作用API 网关可以拆分成Core、Admin、Monitor 三个系统。
Core(核心网关)系统的功能主要是对客户请求的接收,它将请求指向给上层的服务端,并且会把这些处理结果返回给客户端或下层服务端。
API 网关负载均衡、协议转换、路由服务等大部分功能都在核心网关系统中完成;Admin(网关管理)系统负责配置系统的各种策略,如:限流、缓存以及告警等基础信息;Monitor(监控日志)系统负责生成运维管理报表等。
Admin 和Monitor 主要是为Core 服务,但是如果没有Admin 和Monitor 两个系统,作为核心网关Core 系统也可以独立运行。
如图1所示,API 网关系统架构图。
API 网关在系统中具有重要的地位。
它既是系统的入口,又是客户端与服务端之间的一层挡板,在整个微服务架构中起承上启下的作用。
API 网关与服务网格微服务治理随着微服务架构的流行,越来越多的企业开始采用微服务架构来构建他们的应用程序。
微服务架构的优势在于可以将一个较大的应用拆分成许多小的服务,这些小的服务可以独立部署、扩展和维护,从而提高应用程序的可靠性和可扩展性。
但是,微服务架构也带来了一些新的挑战,如服务注册和发现、负载均衡、安全性、可观测性和故障管理等。
为了解决这些挑战,API 网关和服务网格逐渐成为了微服务治理中的热门解决方案。
API 网关是一个位于前端的 HTTP 服务器,通常与一个负载均衡器一起使用。
它的主要作用是将来自客户端的请求路由到正确的微服务实例,并将它们转换为转换服务所使用的协议。
例如,当一个客户端应用程序向 API 网关发送一个 HTTP 请求时,API 网关可以根据请求 URL 中的路由信息将请求路由到正确的微服务实例。
此外,API 网关还可以处理一些共享的功能,例如身份验证、请求限制和路由记录。
这些功能可以在不同的微服务之间共享,从而减少了代码冗余,并简化了开发和维护。
服务网格是一种专门用于解决微服务治理问题的中间件层,它提供了一些核心功能,例如服务发现、负载均衡、故障恢复、流量控制和安全性等。
服务网格通常由一组代理组成,每个代理都安装在运行微服务的主机上,并与其他代理通信。
当一个微服务向服务网格注册时,代理会为该服务创建一个唯一标识符,并将该标识符与该服务的实例绑定在一起。
当一个客户端向服务网格发送请求时,服务网格将路由请求到正确的服务实例,并支持灰度发布、A/B 测试和相似的部署功能。
由于服务网格是专门针对微服务架构而设计的,因此它能够有效解决微服务治理中的许多挑战,并提高整个应用程序的可靠性和可扩展性。
尽管 API 网关和服务网格都提供了许多有用的功能,但它们在解决微服务治理问题方面存在一些不同之处。
API 网关更注重在应用程序前端为客户端提供较少的服务,提供了一些额外的功能,例如请求转发和路由,以便简化代码和提高整个应用程序的可用性。
容器云之微服务API网关技术分析部署微服务于容器云平台,API网关应如何选择?目录一、前言 (4)二、API网关 (4)三、API网关的作用和价值 (5)1.集成以实现互连互通 (5)2.提供统一对外接口以实现标准化、规范化 (6)3.保护开放的应用以实现安全 (6)4.简化应用和服务的开发以提升效率 (6)5.释放数据价值,促进行业发展 (6)6.监控分析业务趋势,助力智能决策 (7)7.协助构建开放平台,建立生态系统 (7)四、API网关要实现的能力 (7)(一)API安全 (7)(二)服务预处理 (8)(三)服务编排 (8)(四)服务注册 (9)(五)API管理 (10)(六)API网关部署 (10)五、API 网关选择 (11)(一)开源 (11)(二)自研 (14)(三)商用 (14)六、结论 (16)一、前言微服务越来越火,越来越多的公司开始采用微服务架构。
但采用微服务并不容易,实施微服务可能不可或缺的一个很重要的组件就是API 网关。
微服务若要部署于容器云平台,API网关的实现能力、部署方式、产品选择等就显得至关重要。
网关,顾名思义,网络关口,担负着安全检查、认证授权、路由分发、流量控制、熔断保护等重要的职责。
API网关,那就是API的网络关口、通道,是整个微服务平台的咽喉,API请求应答必经之路。
为了利用容器云弹性伸缩等特性,结合微服务的优点,部署微服务于容器云平台,则API网关的实施部署则会显得更复杂些。
二、 API网关API网关(API Gateway)是一个服务器,是调用服务的唯一节点和请求应答出入口。
API Gateway封装内部系统的架构,并且提供API给各个客户端。
通常情况下它还需要实现其他功能,如认证授权、访问控制、路由、负载均衡、缓存、日志、限流限额、转换、映射、过滤、熔断、注册、服务编排、API管理、监控、统计分析等等。
从API网关的能力来看,我们可以理解其重要性。
在微服务架构中实现API网关与路由管理随着云计算和容器技术的发展,微服务架构成为了构建现代应用程序的首选方案之一。
微服务架构通过将应用程序拆分为一系列的小服务来实现灵活性和可扩展性。
然而,随着服务数量增加,管理这些服务变得愈发困难。
这时候,API网关和路由管理成为了不可或缺的组件。
一、什么是API网关API网关是一个位于微服务架构前的中间层系统。
它作为核心服务的唯一公开接口,将所有进入系统的请求进行路由和转发。
通过使用API网关,可以在应用程序和外部世界之间添加一层保护,提供更好的安全性、可扩展性和性能。
API网关还可以负责请求的校验、身份验证、请求转换和响应缓存等功能。
它将来自客户端的请求转发到适当的微服务,将响应重新聚合并返回给客户端。
二、API网关的优势1. 安全性:API网关可以检测和过滤恶意请求,并提供访问控制、认证和授权功能。
通过集中管理所有请求,可以更轻松地保护微服务架构。
2. 高性能:API网关可以缓存响应,避免不必要的请求传递给后端服务,提供更快的响应时间。
它还可以通过负载均衡来优化请求的分发,确保每个服务都能够平均负载。
3. 透明性:通过API网关,可以轻松地收集和监控整个系统的性能和日志。
这对于故障排查和系统优化非常重要。
4. 增加网络效率:由于API网关集中处理请求,可以减少与内部服务的网络通信,提高整体网络效率。
三、路由管理在实现API网关时,路由管理是一个关键问题。
路由管理可以根据请求的特定条件将请求路由到不同的后端服务。
常见的路由管理方式有以下几种:1. 基于URL:根据请求URL中的路径信息将请求路由到不同的服务。
可以通过配置规则表来实现,例如将所有以/api/user开头的请求路由到用户服务。
2. 基于请求方法:根据HTTP请求方法(GET、POST等)将请求路由到不同的服务。
例如,GET请求可以路由到读取数据的服务,POST 请求可以路由到写入数据的服务。
3. 基于请求头:根据HTTP请求头中的特定信息将请求路由到不同的服务。
在微服务架构中实现API网关与路由管理引言:微服务架构是一种将应用程序拆分为小的、自治的服务的软件开发模式,可以提高开发效率和系统的可伸缩性。
而在微服务架构中,API网关和路由管理起着至关重要的作用。
本文将探讨在微服务架构中如何实现API网关与路由管理,以及它们的重要性和应用。
1. 什么是API网关API网关是微服务架构中的一个核心组件,它是服务端点的入口,负责接收来自客户端的请求,并将请求发送到相应的微服务。
API网关既可以充当代理服务器,也可以提供安全性、认证和授权等功能。
通过集中管理和调度微服务的请求,API网关可以提高系统的性能和安全性。
2. API网关的作用与重要性- 路由与负载均衡:API网关可以根据请求的URL路径或其他标识符,将请求路由到相应的微服务。
此外,它还可以根据微服务的负载情况,实现负载均衡,保证系统的稳定性和可伸缩性。
- 安全性与访问控制:API网关可以通过认证和授权机制,限制客户端对微服务的访问。
它可以集中管理和验证用户的身份,确保只有合法的用户才能访问系统中的微服务。
- 日志和监控:API网关可以拦截并记录请求和响应的日志,方便后续的故障排查和系统性能优化。
此外,它还可以监控微服务的运行状态,并提供实时的性能指标和报警。
3. 路由管理的挑战与解决方案在微服务架构中,由于服务的数量众多,加上服务的动态变化,路由管理是一个复杂的问题。
以下是一些常见的挑战和相应的解决方案:- 动态路由:在微服务架构中,服务的地址和端口可能会动态变化。
为了解决这个问题,可以使用服务注册与发现机制,例如使用Consul、Eureka等工具。
API网关可以通过查询注册中心,动态地获取微服务的地址和端口信息。
- 版本管理:当微服务进行新版本发布时,可能需要同时维护多个版本的服务。
API网关可以通过URL路径或者请求头中的版本号,将请求路由到相应的版本上。
这样可以实现不同版本的服务共存,方便系统的演进。
软件架构中的API网关与微服务随着云原生技术的广泛应用,API网关和微服务架构成为了当下非常流行的软件架构模式。
本文将探讨API网关和微服务架构的设计和实现原则,以及它们的优缺点和实际应用。
一、API网关的设计和实现原则API网关是一个在应用程序和后端服务之间充当中间层的服务器。
它旨在增强性能、可靠性和安全性。
下面是API网关的几个设计和实现原则。
1.路由和转发API网关必须能够将请求路由到合适的后端服务。
路由应该是基于请求的上下文信息,如HTTP头、请求参数和身份验证等信息,来完成的。
在路由到后端服务之前,API网关还要确保请求的安全性。
这可以通过对请求进行身份验证和授权来实现。
2.通信管理API网关的另一个重要功能是对流量进行管理和控制。
API网关必须能够限制请求速率、限制连接数和限制带宽等细节。
这可以帮助保持系统变得可靠和可用。
3.代理和负载均衡API网关还要具备代理和负载均衡的功能。
代理使得API网关能够透明地路由请求和响应。
负载均衡使得API网关能够将请求合理地分配到后端服务上,从而实现瓶颈的消除和应用程序的可伸缩性。
4.缓存API网关还可以实现缓存的功能。
通过在API网关上设置缓存,可以大大提高API的响应速度和系统的性能。
缓存可以是静态的或基于时间的,它们可以在API网关的内存或硬盘中进行存储。
二、微服务架构的设计和实现原则微服务是将应用程序划分为一组小型、自治的服务的软件架构模式。
对于每个服务,它们都有自己的数据存储、业务逻辑和用户界面。
下面是微服务架构的几个设计和实现原则。
1.服务拆分在微服务架构中,每个服务都有自己的职责和功能。
因此,服务的拆分和划分是非常重要的。
服务应该被设计为互相独立的、小型的、自治的组件。
2.服务发现在微服务架构中,大量的服务可以被部署到不同的主机上。
因此,服务发现是必不可少的。
服务发现能够帮助服务在不同主机之间进行通信。
3.服务监控在微服务架构中,需要监控服务的运行状况。
在微服务架构中实现API网关与路由管理引言随着云计算和大数据技术的发展,微服务架构成为了一种流行的应用开发模式。
而在微服务架构中,API网关和路由管理起着至关重要的作用。
本文将介绍如何在微服务架构中实现API网关与路由管理,并探讨它们对于系统的优化和安全性的重要性。
1. 什么是API网关API网关充当了系统和外部客户端之间的中间层,用于处理传入的请求并将其路由到适当的微服务。
它提供了统一入口点,简化了系统的架构和管理。
通过API网关,可以对请求进行鉴权、限流、安全验证等操作,以增强系统的可靠性和安全性。
2. 实现API网关的技术选型在实现API网关时,有多种技术可以选择。
常见的包括Nginx、Kong、API Gateway等。
其中,Nginx是一个高性能的开源HTTP服务器和反向代理服务器,它可以通过配置文件实现请求的路由和负载均衡。
Kong是一个基于Nginx的API网关管理系统,它提供了丰富的插件和功能,方便进行路由和API管理。
另外,一些云服务提供商也提供了自己的API网关服务,如AWS API Gateway、Azure API Management等。
3. 设计API网关的路由管理在设计API网关的路由管理时,需要考虑以下几个方面:请求路由API网关需要根据请求的URL和HTTP方法将请求路由到相应的微服务。
可以通过配置文件或者编程方式实现请求的路由。
另外,还可以根据请求的头部信息、查询参数等进行路由选择。
负载均衡负载均衡是将请求分发到多个后端微服务实例的过程。
通过负载均衡,可以实现对后端服务的资源均衡利用,提高系统的性能和可靠性。
常见的负载均衡策略包括轮询、随机、加权随机等。
熔断和降级在微服务架构中,一个微服务的故障可能会导致整个系统的不可用。
为了保证系统的可用性,API网关需要实现熔断和降级机制。
熔断机制会在后端服务出现故障时暂时关闭对该服务的访问,避免瀑布效应。
降级机制则是在后端服务的性能不足时,通过返回默认值或者错误信息来保证用户的体验。
IT大视野数码世界 P.84基于API网关的微服务组合策略研究吴润 武汉大学计算机学院摘要:随着微服务体系架构的出现,越来越多的大型应用程序开始采用微服务的方式来部署和运行,传统的单体架构应用被拆分为多个功能独立的微服务。
微服务架构解决了单体架构扩展性和维护性差的问题,但多个微服务如何有效地进行协同组合工作成了新的问题,微服务组合也成为了微服务架构中不可忽视的研究重点。
本文分析了微服务组合所面临的问题,并对当前微服务组合研究现状进行了介绍,,最后重点分析了基于API 网关的微服务组合策略。
关键词:微服务架构 API网关 微服务组合1引言随着企业级应用程序规模的不断扩张,应用的更新、部署以及维护工作变得越来越繁重,以单体架构方式构建的应用越来越难以为继,而微服务架构的出现为大型应用程序开辟了另一条通道,而云计算、容器虚拟化、基础设施自动化等技术的不断涌现,更是为微服务架构的发展提供了良好的基础。
微服务架构通过对应用进行分析,将原本单体应用中庞大冗杂的功能模块分解成体量小,功能明确并且耦合度低的多个微服务,这些微服务相互协同完成工作。
微服务通常具备以下特点:单一职责。
在面向对象程序设计中,我们提倡高内聚、低耦合,同理,每个微服务在服务架构层面都遵循单一职责原则,每个单独的微服务都负责特定的业务逻辑。
相互独立。
在传统的单体架构应用中,所有的功能模块代码都糅合在一起,修改某个功能模块很可能会影响到另一个功能模块,在修改过后,还需要进行重新集成,通过测试还要进行统一打包,再部署到相应的服务器环境中。
因此,在单体应用中,功能模块的开发、测试和部署过程都会互相产生影响,而微服务架构中,每个微服务都是独立的业务单元,有着独立的代码库,并且可以单独测试和部署。
轻量级的通信方式。
微服务之间通常通过轻量级的通信机制进行通信,这些轻量级的通信方式通常是与语言和平台完全无关的。
也正因为如此,不同的微服务甚至可以使用不同的语言进行开发,增加了灵活性。
在微服务架构中,微服务都是一些功能单一、相互独立的功能单元,其功能有限,如果需要实现某种复杂功能,则需要对已有的微服务进行适当组合,相互协作以实现各种多样化的功能需求。
因此,可以将不同功能,易于执行且简单的微服务通过某种组合策略集成在一起实现强大的功能。
2微服务组合相关概念2.1 web服务组合提到微服务架构,就不得不提到面向服务架构(SOA),两者在某些方面有着不少相似之处,在SOA中,服务也是通过某种组合方式来相互协同完成某个具体功能。
在web服务组合策略中,通常分为两种方式,一种称为编排方式(choreography),编排方式可以看做是一种消息驱动方式,实现方案大多是异步的,监听业务事件的web服务会主动获取消息,进行处理,然后发布自己的消息;另一种方式称为编制方式(ochestration),编制方式的实现方案大多是同步的,这种设计方式中往往有一个流程控制服务,该服务接收请求,并按照业务逻辑调用各个web服务,最后完成任务。
以上两种服务组合方式都有对应的标准支持,分别是BPEL4WS(Business Process Execution Language for Web Services)和WS-CDL (Web Service Choreography Definition Language),BPEL4WS适合用于服务编制,此标准主要用于组织内部的业务流程管理,而且很多BPM产品基于此规范实现,WS-CDL是专门的web服务编排标准。
2.2微服务组合与web服务组合相类似,微服务组合采用某种适当地策略将若干个相互独立,功能单一的微服务组合成一个功能更强大的服务,为某个具体的业务功能提供支持。
不同之处在于微服务相较于web服务而言,粒度更小,功能更加独立,而不是面向业务,因此,相比较而言,微服务组合问题面临着更大的挑战。
2.3微服务组合需要解决的问题在微服务架构中,由于微服务是较小粒度的独立功能单元,因此,通常一个具体的业务功能需要调用多个微服务,这就涉及到服务的映射和路由问题;其次,安全防护也是一个必要的考量,对来访的用户应该进行必要的身份认证,只有得到授权的用户才有访问权限;另外,可用性是保证服务稳定性的重要指标,在调用微服务的过程中,不可避免地会出现服务无响应或服务繁忙等情况,对于这些服务不可用的情况必须提供超时或熔断处理;最后,系统也可能面临短时间内访问量剧增的情况,考虑到系统有限的负载能力,通过采用适当的策略减轻服务的压力也是需要考虑的问题。
3微服务组合研究现状伴随着微服务架构的出现,对于微服务组合策略的研究也随之出现,工业界和学术界也都纷纷提出了不同的解决方案,大体上分为两种,一种借鉴web服务组合的编排策略对微服务进行某种形式编排以实现微服务组合,另一种则是通过使用API网关来实现微服务组合。
Netflix Conductor是一个典型的借鉴web服务组合策略的微服务组合工具。
Conductor支持创建复杂的业务流,这些业务流通过基于JSON DSL制定的蓝图来定义其整个执行流程,这些流程蓝图反过来也为整个业务流提供了可见性和可追溯性。
另外,在业务流程的执行过程中,Conductor也支持暂停、恢复、重启等多个控制语义,使其在运行时可以灵活应对各种突发情况。
在性能上,Conductor能够在必要时同步处理所有任务,并允许扩展数百万个并发处理的业务流程。
可以说,Conductor作为Netflix内部使用多年的微服务编排工具,其在多个方面都有优秀的表现。
图1 Netflix Conductor运行时模型IT 大视野数码世界 P .85文献[5]提出了一个轻量级微服务组合平台Medley。
Medley 首先为微服务组合定义一套服务组合规范,通过这些规范来约束微服务组合,然后通过编译器将这些规范语义编译成描述微服务组合的代码,最后将这些代码部署在服务器的Docker 容器中执行,从而实现整个服务组合流程。
基于API 网关实现微服务组合也是目前微服务领域较为常用的策略。
API 网关往往作为一个系统的入口,是连接所有客户端和服务端的关键节点,通过一个统一的API 网关,客户端和服务端能够非常方便地进行交互而无需了解其底层微服务细节。
API 网关对系统内部的细节进行了封装,将所有非业务功能放在网关层进行处理,使其内部组织结构对API 调用者透明,且对于每个调用者都提供对应的定制API。
除此以外,API 网关在微服务架构中还可兼具负载均衡、身份验证、限流等多个功能职责。
4基于API 网关的微服务组合4.1 API 网关的诞生背景和意义相对于诞生不久的微服务架构而言,其实API 网关在很多领域并不算是一个新名词,早在微服务被提出并在业界流行起来之前,API 网关就已经在金融证券领域的前置机系统上得到应用。
API 网关的作用在于其将客户端和服务端有效地进行了分离,通过网关将后端的微服务进行组合并映射到对应的API,降低了客户端和服务端之间的耦合性,在面对业务变化时也能更方便地进行功能扩展与变更,节省了开发成本,通过API网关的功能聚合作用,可以有效提高系统访问效率。
随着移动互联网时代的到来,传统的系统后台需要支持的客户端对象从单一的PC 端逐渐转移到手机,平板等移动端,服务场景的增多一方面对后台的吞吐量提出了更高的要求,另一方面也无形中增大了后台服务的复杂性,毕竟不同的客户端由于使用场景的不同对后台的响应需求也各不相同,而借助于API 网关的强大功能,以上问题可以得到有效解决。
尤其在微服务架构中,我们构建的微服务可能会面临服务端口更改和服务实例的变更问题,不同的微服务可能采用了不同的数据协议,对于客户端而言,其直接调用的往往是粗粒度的API,而微服务往往是细粒度的API,如果客户端直接调用细粒度的微服务,会大大增加API 调用的复杂性和系统耦合性,而这些问题也都在API 网关的解决范畴之内。
因此,随着微服务架构的日益成熟完善,在很多微服务架构体系中,API 网关都成为了不可或缺的一个关键组件。
4.2 API 网关的解决方案随着微服务架构的发展成熟,业界也相继出现了很多成熟的API 网关解决方案,常见的有Tyk、Orange、Kong、Netflix Zuul、apiaxle、Api-umbrella、Amazon API Gateway 等等。
Tyk 是一个轻量级的开源API 网关,基于Go 语言开发[6]。
在安全认证方面,Tyk 支持多种认证方式,包括基本身份认证、令牌认证、HMAC 签名认证、Json Web 令牌认证,也支持以上多个认证方式组合使用。
在API 的访问控制方面,Tyk 内置了流量限制机制,包括速率限制、请求配额和请求大小限制。
Tyk 提供了两种速率限制器,即硬同步速率限制器和分布式速率限制器来实现速率限制。
配额类似于速率限制,它允许在一定时间内通过一定数量的请求。
Tyk 支持在全局和各端点设置最大请求长度,以拒绝任何超过设定长度的请求。
Orange 是一款基于OpenResty 的API 网关,除了具备Nginx 的基本功能外,它还具备API 重定向和鉴权、流量切分、访问限速、访问统计以及web 防火墙等多种功能,是一个功能齐全的网关系统。
Orange 的特性之一是其内置了多个通用插件,如全局状态统计、URL 重写、URL 重定向、自定义监控、访问限速、鉴权、WAF 防火墙等。
Kong 是Mashape 提供的一款开源API 网关,起初用于维护、管理和扩展其Marketplace 中的API 和微服务[8]。
Kong 是基于Nginx 实现的,或者准确的说,Kong 是一个运行在Nginx 中的Lua 应用程序,它比Nginx 提供了更加简单的配置方式。
Kong 主要包含两个重要组件,即Kong Server 和Apache Cassandra,前者用来接收API 请求,后者用来存储操作数据,可以通过增加Kong Server 的数量来对Kong 服务进行水平扩展,并通过负载均衡器转发请求以应对访问压力。
Kong 的优秀之处在于其提供了大量的插件来扩展应用,为可插拔架构奠定了基础,Orange 的很多设计也正是借鉴于此。
Zuul 是由Netflix 开源的网关产品,其在Spring Cloud Netflix 项目中的主要作用相当于路由器和服务器端负载均衡器[9]。
通过Zuul 的过滤器,Netflix 可以实现认证、测试、动态路由、服务迁移、安全、流量管理等操作。
Zuul 的规则引擎支持任何以JVM 语言编写规则和过滤器,如Java 和Groovy 。
Apiaxle 是基于Nodejs 实现的开源API 管理平台,是一个免费的本地托管的API 管理解决方案[10]。