微服务最佳实践中,我们需要通过统一的 API 网关进行服务能力的共享,API 网关为用户提供发布、管理、保护和监控 API的能力,帮助用户在自己的多个系统之间,或者内部系统与合作伙伴以及第三方的系统之间实现跨系统、跨协议的服务能力互通。

API网关应用场景

API网关有三种典型的应用场景:

内部业务集成:规范系统间API接口,快速完成企业内部系统的解耦及前后端分离,实现可管可控的相互访问。

对外能力开放:将企业内部服务能力以标准API的形式开放给外部合作伙伴或第三方,与外部用户可管可控地共享服务、能力和数据,达成深度合作,共建新生态。

交付标准化:实现软件交付的标准化,提高交付质量,以及确保软件可迭代。

作为后端服务的统一访问入口,除了服务路由的基本功能,API网关还可以加持服务治理,保证后端服务的稳定性,比如集成流控和熔断功能,前者可以防止服务被恶意攻击,后者能在后端服务发生异常的情况下保证不会发生“雪崩”效应。

轻舟微服务API网关实践

网易云轻舟微服务平台包括了API网关组件,严格意义上讲,API网关并不算NSF内组件,但以网易微服务实践经验来看,API网关又是微服务架构下的一款非常主要的工具型组件。Spring Cloud提供了Zuul作为API网关组件,提供了主体功能,但功能相对单薄,代理效率一般(1.x是同步模式,2.x已改为异步),较难满足网关生态需求。我们团队在NSF研发前,已经自研了一套包括服务网关(Gateway)+网关自助管控平台(GPortal)系统,提供了较完善的API网关解决方案。

先看一下API网关与NSF整合的架构:

可以看出,API网关为微服务集群提供了外部调用认证、服务/API管控、路由、审计等能力的解决方案。

本文不对API网关进行详细介绍,仅简要说明我们自研API网关主要的特性:

基础请求代理:采用Servlet3.0+HttpAsyncClient实现异步化,单点万级TPS转发能力;

审计与统计分析:对服务请求进行异步审计与统计分析,多维度审计查询、统计图表、依赖拓扑展示;

服务治理能力:融合Eureka服务注册/发现,网关层熔断、线程隔离、限流;

自定义插件:基于Groovy自定义filter、路由插件;

统一认证:基于RBAC统一认证请求合法性;

服务知识库与发布:形成了标准化API管理、导入/导出、Swagger/Markdown文档、发布/下线,基于OpenAPI的微服务规范流程控制(网易云内部在用标准);

API测试:基于API元数据与发布环境,快速完成API的测试;

SLA与报警:提供服务SLA检查与运行时监控报警。

轻舟微服务API网关应用

在德邦快递的微服务实践中,API网关提供了统一的认证、鉴权、API 监控、熔断、限流、降级等功能。当然,熔断、限流、降级在注册中心也会进行一次。

通过自定义分流插件功能,德邦快递可以灵活地针对全国不同地区的客户进行不同处理。而通过流量镜像功能,德邦快递可以通过网关复制流量到压测环境中,从而更好地进行压测。

API网关实践-网易云轻舟微服务的更多相关文章

  1. Ocelot网关统一查看多个微服务asp.net core项目的swagger API接口

    0.前言 整体架构目录:ASP.NET Core分布式项目实战-目录 一.准备 前提需要下载安装consul,项目需要懂添加swagger 统一在网关中配置多个微服务的swagger,需要用到服务注册 ...

  2. 网易云免费OSS服务用做Markdown图床或博客图片外链

    我使用据说是Windows下最好用的Markdown编辑器“MarkdownPad2”(个人感觉还是Visual Code+Markdown插件666)写Markdown,在贴图方面遇到一个问题,于是 ...

  3. AspNet Core Api Restful +Swagger 发布IIS 实现微服务之旅 (二)

    上一步我们创建好CoreApi 接下来在框架中加入 Swagger  并发布  到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore  比 ...

  4. 掌握业界最新工程实践 | 了解AIOps下一代微服务等最新趋势

    近年来,IT应用越来越复杂,一旦出现故障,诊断越来越困难,使用传统技术来管理机器数据的组织会让其运维团队不堪重负.幸好随着大数据.机器学习和AI技术的飞速发展,智能化运维给这一现状带来了改变. 那么就 ...

  5. 为什么 kubernetes 天然适合微服务 (3)

    此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 四.Kubernetes 本身就是微服务架构 基于上面这十个设计要点,我们再回来看 Kubernetes,会发现 ...

  6. 为什么 kubernetes 天然适合微服务 (2)

    此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 三.微服务化的十个设计要点 微服务有哪些要点呢?第一张图是 SpringCloud 的整个生态. 第二张图是微服 ...

  7. 架构师成长之路也该了解的新一代微服务技术-ServiceMesh(上)

    架构演进 发展历程 我们再来回顾一下架构发展历程,从前往后的顺序依次为单机小型机->垂直拆分->集群化负载均衡->服务化改造架构->服务治理->微服务时代 单机小型机:采 ...

  8. 2019年微服务5大趋势,你pick哪个?

    2018年对于微服务来说是非常重要的一年,这一年Service Mesh开始崭露头角,解决服务间复杂的通信问题,这一年很多国内互联网公司已经有了较为成熟的微服务实践案例,网易云主办的微服务实践沙龙中也 ...

  9. 微服务应用新趋势:Service Mesh、AIOps和中台化

    微服务技术由于天生支持快速迭代.弹性扩展的特点,使企业能够在不确定性下提升发展速度及抗风险能力,受到了越来越多的关注.当前,云服务商纷纷试水微服务产品,最为典型的,当属推出轻舟微服务平台.剑指整个微服 ...

  10. 为什么 kubernetes 天然适合微服务 (1)

    此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 最近总在思考,为什么在支撑容器平台和微服务的竞争中,Kubernetes 会取得最终的胜出,事实上从很多角度出发 ...

随机推荐

  1. 用 C 语言开发一门编程语言 — 跨平台的可移植性

    目录 文章目录 目录 前文列表 实现跨平台的可移植性 使用预处理器指令 前文列表 <用 C 语言开发一门编程语言 - 交互式解析器l> 实现跨平台的可移植性 理想情况下,我希望我的代码可以 ...

  2. angular 16 路由守卫更新

    在 angular16 中守卫使用方式进行了更新,route 守卫被弃用(取消了CanActivate的使用),新增了功能性守卫(CanActivateFn),支持 inject 注入,官网提供了一个 ...

  3. Django——form组件的局部钩子

    如果对字段的校验条件太少,不能满足我们的需求,那么,我们可以对每个字段自定义校验的内容,就可以使用局部钩子. 局部钩子的使用方法: (1)导入错误类型 ----> 我们自己定义的钩子抛出的错误也 ...

  4. Vue3使用Composition API实现响应式

    title: Vue3使用Composition API实现响应式 date: 2024/5/29 下午8:10:24 updated: 2024/5/29 下午8:10:24 categories: ...

  5. 在 Flask 项目中配置 Session:简明指南

    在 Flask 项目中配置 Session:简明指南 本文介绍如何在 Flask 项目中配置会话 1. Flask 内置会话 Flask 自带会话管理功能,使用客户端 Cookie 存储会话数据.默认 ...

  6. 用.NET代码生成JSON Schema 验证器

    问题 对于验证复杂JSON数据是否合法的需求,通常的解决方式是标准JSON Schema,.Net下有对应的JSON Schema实现库.应用程序通常需要将标准JSON schema传入实现库,来做后 ...

  7. iOS 系统级别录屏方式调研

    p.p1 { margin: 0; font: 20px ".PingFang SC"; color: rgba(69, 69, 69, 1) } p.p2 { margin: 0 ...

  8. Linux进程间通信-FIFO(命名管道)

    本系列文章主要是学习记录Linux下进程间通信的方式. 常用的进程间通信方式:管道.FIFO.消息队列.信号量以及共享存储. 参考文档:<UNIX环境高级编程(第三版)> 参考视频:Lin ...

  9. BOM弹窗 滚动条

     //   window.alert('弹出内容')  警告框         //   window.prompt('弹出内容') 输入框         //      以 字符串 形式 存储输入 ...

  10. es语法 rest api 模拟根据歌手,歌名,歌词来搜索demo

    #创建索引songs_v1 PUT { - "acknowledged": true, "shards_acknowledged": true, "i ...