目录
一、api网关设计
二、api网关部署
三、api网关实现技术
四、关键功能设计
五、总结
六、实战使用
一、api网关设计
1、含义
API网关是微服务架构(Microservices Architecture)标准化服务的模式。API网关定位为应用系统服务接口的网关,区别于网络技术的网关,但是原理则是一样。API网关统一服务入口,可方便实现对平台众多服务接口进行管控,对访问服务的身份认证、防报文重放与防数据篡改、功能调用的业务鉴权、响应数据的脱敏、流量与并发控制,甚至基于API调用的计量或者计费等等
2、组件设计
3、组件介绍
4、相关网关框架
1、基于nginx平台实现的网关有:KONG、API Umbrella
2、自研发的网关有:apigee、zuul
3、老牌esb控件:camel、mule
4、自定义:servlet、spring-mvc、node.js、erlang
二、api网关部署
三、api-gateway实现技术
1、camel:接收请求、处理和路由选择、后端请求
2、服务端:spring-mvc
3、服务注册:通过收集应用中controller+requestMapping向zk注册规范信息
4、服务发现:获取zk中注册的服务信息
5、支持手动注册服务
四、关键功能
1、限流设计
限流模式主要是提前对各个类型的请求设置最高的QPS阈值,若高于设置的阈值则对该请求直接返回,不再调用后续资源。这种模式不能解决服务依赖的问题,只能解决系统整体资源分配问题,因为没有被限流的请求依然有可能造成雪崩效应。限流模式则可以称为预防模式
2、隔离设计
这种模式就像对系统请求按类型划分成一个个小岛的一样,当某个小岛被火少光了,不会影响到其他的小岛。例如可以对不同类型的请求使用线程池来资源隔离,每种类型的请求互不影响,如果一种类型的请求线程资源耗尽,则对后续的该类型请求直接返回,不再调用后续资源。这种模式使用场景非常多,例如将一个服务拆开,对于重要的服务使用单独服务器来部署,再或者多中心。
(1)线程池隔离模式:使用一个线程池来存储当前的请求,线程池对请求作处理,设置任务返回处理超时时间,堆积的请求堆积入线程池队列。这种方式需要为每个依赖的服务申请线程池,有一定的资源消耗,好处是可以应对突发流量(流量洪峰来临时,处理不完可将数据存储到线程池队里慢慢处理)
(2)信号量隔离模式:使用一个原子计数器(或信号量)来记录当前有多少个线程在运行,请求来先判断计数器的数值,若超过设置的最大线程个数则丢弃改类型的新请求,若不超过则执行计数操作请求来计数器+1,请求返回计数器-1。这种方式是严格的控制线程且立即返回模式,无法应对突发流量(流量洪峰来临时,处理的线程超过数量,其他的请求会直接返回,不继续去请求依赖的服
3、熔断设计
这种模式主要是参考电路熔断,如果一条线路电压过高,保险丝会熔断,防止火灾。放到我们的系统中,如果某个目标服务调用慢或者有大量超时,此时,熔断该服务的调用,对于后续调用请求,不在继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用。
其中最重要的是三个模块:熔断请求判断算法、熔断恢复机制、熔断报警
(1)熔断请求判断机制算法:使用无锁循环队列计数,每个熔断器默认维护10个bucket,每1秒一个bucket,每个blucket记录请求的成功、失败、超时、拒绝的状态,默认错误超过50%且10秒内超过20个请求进行中断拦截。
(2)熔断恢复:对于被熔断的请求,每隔5s允许部分请求通过,若请求都是健康的(RT<250ms)则对请求健康恢复。
(3)熔断报警:对于熔断的请求打日志,异常请求超过某些设定则报警
4、超时设计
超时分两种,一种是请求的等待超时,一种是请求运行超时。
等待超时:在任务入队列时设置任务入队列时间,并判断队头的任务入队列时间是否 大于超时时间,超过则丢弃任务。
运行超时:直接可使用线程池提供的get方法
五、总结
API网关作为企业能力开放的一个门户,除了具备基本的请求转发、协议转换、路由等功能,以及高性能和高稳定性外,还需具备良好的扩展性,已便于网关能力的不断增强。在网关实施过程中,要规划好网关层与服务层的交互方式,尽量使得网关层与服务层解耦,便于各个团队工作的独立性。另外,在API的管理上,需要提供API全生命周期的发布、配置、鉴权、流控、监控等配套的管理功能。才能让API网关真正在企业中运转起来。
六、实战使用
1、适用于任何基于spring-mvc框架
2、可以自定义注册满足的接口信息道zk
3、基于http的网关代理
4、项目介绍:
项目分为4个模块
hms-gateway-api :定义用到的模型:节点、服务、限流、隔离、熔断
hms-gateway-register:收集客户端节点和url信息注册到zk
hms-gateway-core:http代理核心处理:服务发现和路由、限流、隔离、熔断
hms-gateway:代理入口,打包成war进行部署
hms-gateway-admin:后台管理,对节点和服务进行启用、禁用、限流、隔离、熔断、接口管理平台
5、框架使用
如果你是spring-mvc项目,两步完成框架使用
依赖
a、maven 引入
<dependency>
<groupId>org.hbhk.hms</groupId>
<artifactId>hms-gateway-register</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
b、spring 配置文件
<bean id="restServiceRegistry" class="org.hbhk.hms.gateway.registry.RestServiceRegistry">
<!--zk地址,此地址与api-gateway配置一致-->
<property name="registryAddress" value="47.98.169.10:2181"/>
<!--应用名称-->
<property name="app" value="hbhk" />
<!-- 此端口配置是为了试吃maven tomcat 插件开发支持,如果内部能获取到端口,此配置无效 -->
<property name="port" value="8082" />
</bean>
c、api-gateway 使用
1、修改配置文件 config.properties 里面的zk地址
zk.host=47.98.169.10:2181
zk.timeout=26000
2、maven 执行 clean install 打成 war部署 ,或者 maven tomcat 插件启动 clean tomcat7:run
未来预告
4、微服务之分库分表
5、微服务之全链路跟踪
注意事项: 一切都有源码 ,如需源码联系微信:hmsjava
相关推荐
微服务API聚合网关 An Aggregation API Gateway-fizz-gateway-node
api-gateway.zip
使用Express.js和Express中间件构建的微服务API网关 Express Gateway是一个微服务API网关,位于任何微服务或无服务器架构的核心,无论您使用哪种语言或平台。 Express Gateway保护您的微服务和无服务器功能,并使用...
背景我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语
Goku API网关是基于Golang的微服务网关,可实现高性能的动态路由,服务编排,多租户管理,API访问控制等。它也适用于微服务系统下的API管理。 Goku提供图形界面和插件系统,使配置更容易,扩展更方便。 摘要/ 为...
betapp-api-gateway Zuul API网关提供betapp微服务
Spring Cloud Gateway 是基于 Spring Framework 和 Spring Boot 构建的 API 网关,它旨在为微服务架构提供一种简单、有效、统一的 API 路由管理方式。 Spring官方博客发布了一篇关于Spring Cloud Gateway的CVE...
强大的golang微服务api网关。 特征 登录/登出 查询/更新管理员信息 CURD Http / Tcp / Grpc服务 CURD应用 仪表板流量/百分比/统计 限速器中间件 断路器中间件 托多斯 迁移架构 Websocket代理服务器 ...
Terraform AWS Api网关 Terraform模块,用于在AWS上创建Route53资源,以使用其基本元素创建api网关。 我们吃饭,喝水,睡觉,最重要的是喜欢DevOps 。... source = " clouddrove/api-gateway/aws
带有API网关的微服务 使用Ocelot API Gateway,ASP.NET CORE 5.0开发应用程序 实施的技术: ASP.NET Core 5.0 豹猫 SwaggerForOcelot Ocelot CacheManager
这为您的API提供了唯一的入口点,并且无需为每个微服务的安全性,缓存,限制和监视之类的事情实现特定于API的代码。 您可以使用ALB Ingress Controller( )和Amazon API Gateway实施此模式。 Amazon API Gateway是...
aws-lambda-api-gateway 这是AWS Compute Blog的主题没有服务器的微服务: ://aws.amazon....
我们认为,发展必须是一种令人愉快的,富有创造力的经历,才能真正实现。 Lumen尝试通过减轻大多数Web项目中使用的常见任务(例如路由,数据库抽象,排队和缓存)来减轻开发的痛苦。 官方文件 ...
允许将多个微服务作为一台固态服务器运行。 安装 npm install --save-dev dev-gateway # or yarn add -D dev-gateway 用法 首先,您需要创建app.js文件并定义配置: module . exports = { port : 3000 , host : ...
Goku API Gateway是基于Golang的微服务网关,可实现高性能的动态路由,服务编排,多租户管理,API访问控制等。它也适用于微服务系统下的API管理。 Goku提供图形界面和插件系统,使配置更容易,扩展更方便。 摘要/ ...
进入Restful微服务和KrakenD API网关研讨会这是一个购物篮研讨会,展示了如何使用KrakenD API网关。 由5个微服务和API网关组成。 基于令牌的身份验证。 原始访问令牌是由身份服务创建的。 (json模型) 此原始访问...
基于Spring Boot / Spring Cloud的微服务架构 项目介绍 预备知识 项目结构 config:配置文件仓库 api-config:配置管理中心 api-registry:服务注册中心 api-gateway:服务网关 api-monitor:服务监控中心 api-...
带有蒸气的服务器端Swift,可将API网关服务创建为微服务 几乎只有工程师才开始尝试,在客户端的Apple设备上快速运行。 但是,由于苹果公司构建了SwiftNIO,因此快速解锁功能可以在服务器端运行。 在这个项目中,我...
电视销售ApiGateway 该应用程序是使用JHipster 6.10.5生成的,您可以在找到文档和帮助。 这是旨在成为微服务体系结构一部分的“网关”应用程序,请参阅文档的页面以获取更多信息。 使用JHipster注册中心为服务...