关于网关:Higress-×-OpenKruiseGame-游戏网关最佳实践

<article class=“article fmt article-content”><p>OpenKruiseGame(下文简称:OKG)是一个面向多云的开源游戏服 Kubernetes 工作负载,是 CNCF 工作负载开源我的项目 OpenKruise 在游戏畛域的子项目,其提供了热更新、原地降级、定向治理等罕用的游戏服治理性能。而游戏作为典型的流量密集型场景,在吞吐量、提早性能、弹性与安全性等方面对入口网关提出了很高的要求。</p><p>Higress 是基于阿里外部两年多的 Envoy 网关实际积淀,以开源 Istio 与 Envoy 为外围构建的下一代云原生网关。Higress 实现了平安防护网关、流量网关、微服务网关三层网关合一,能够显著升高网关的部署和运维老本。Higress 能够作为 K8s 集群的 Ingress 入口网关,并且兼容了大量 K8s Nginx Ingress 的注解,能够从 K8s Nginx Ingress 疾速平滑迁徙到 Higress。同时也反对 K8s Gateway API 规范,反对用户从 Ingress API 平滑迁徙到 Gateway API。</p><p>本文将演示 Higress 如何无缝对接 OKG 游戏服,并为其带来的优良个性。</p><h2>Higress 无缝接入 OKG</h2><p>前置步骤:</p><ol><li>装置 OpenKruiseGame[1]。</li><li>装置 Higress[2]。</li></ol><p>OKG 提供诸多游戏服热更新和游戏服伸缩的优良个性,便于游戏运维人员治理游戏服的全生命周期。游戏不同于无状态类型的服务,玩家战斗的网络流量是不容许被负载平衡的,因而每一个游戏服须要独立的拜访地址。</p><p>应用原生工作负载(如 Deployment 或 StatefulSet)时,运维工程师须要为泛滥游戏服一一配置接入层网络,这无疑妨碍了开服效率,同时手动配置也无形中减少了故障的概率。OKG 提供的 GameServerSet 工作负载能够自动化地治理游戏服的接入网络,大幅度降低运维工程师的累赘。</p><p>对于 TCP/UDP 网络游戏,OKG 提供了诸如 HostPort、SLB、NATGW 等网络模型;而对于 H5/WebSocket 类型的网络游戏,OKG 也相应提供了 Ingress 网络模型,如 Higress、Nginx、ALB 等。</p><p></p><p>本文采纳了一款开源游戏 Posio 来构建 demo 游戏服。下述配置中,IngressClassName=“higress” 指定了 Higress 作为游戏服的网络层,Higress 通过上面配置能够无缝接入 Posio 游戏服,并且能够基于 Annotation 实现 Higress 定义的高阶流量治理等性能。示例 Yaml 如下所示,GameServerSet 生成的游戏服对应的拜访域名与游戏服 ID 相干。</p><p>在此例中,游戏服 0 的拜访域名为 http://game0.postio.example.com,游戏服 1 的拜访域名为 game1.postio.example.com. 客户端以此来拜访不同的游戏服。</p><pre><code>piVersion: game.kruise.io/v1alpha1kind: GameServerSetmetadata: name: postio namespace: defaultspec: replicas: 1 updateStrategy: rollingUpdate: podUpdatePolicy: InPlaceIfPossible network: networkType: Kubernetes-Ingress networkConf: - name: IngressClassName value: “higress” - name: Port value: “5000” - name: Path value: / - name: PathType value: Prefix - name: Host value: game<id>.postio.example.com gameServerTemplate: spec: containers: - image: registry.cn-beijing.aliyuncs.com/chrisliu95/posio:8-24 name: postio</code></pre><p>OKG 程度伸缩[3]提供主动扩容、依据游戏服的 OpsState 缩容、依据 DeletionPriority 缩容、依据游戏服序号缩容等性能来反对游戏运维的业务需要。程度伸缩的个性在给游戏开发者带来便当的同时,也对入口网关提出了更高的要求:入口网关必须具备配置热更新的能力,实现路由配置的平滑下发。</p><p>起因在于:在进行游戏服的扩容时,OKG 会同步创立 Ingress 等相干网络相干资源,以此来保障游戏服的主动上线。如果入口网关不具备配置热更新的能力,在扩容时就,线上玩家就会遇到连贯断开等问题,影响玩耍体验。</p><h2>Nginx reload 无奈优雅热更新</h2><p>在游戏服呈现扩容,或者定义的路由策略产生变更时,Nginx 的配置变更会触发 reload,导致上下游的连贯都断开并触发重连。</p><p>咱们以 Posio 游戏服为例,模仿 Nginx+OKG 在游戏服扩容时呈现的问题。Posio 服务端依赖于 Socket 连贯与客户端通信。游戏服扩容时,触发对应的 Ingress 资源创立,此时 Nginx-ingress-controller 监听到 Ingress 资源变更,触发本身 reload 机制,此时原来与游戏服建设的连贯(如本例中的 Socket 连贯会被断开)。在正在游戏的玩家侧的体感便是呈现了异样卡顿。</p><p>为了直观的展现 Nginx Ingress reload 带来的影响,咱们对 Nginx 默认配置参数进行一些更改:</p><pre><code>kubectl edit configmap nginx-configuration -n kube-systemdata: … worker-shutdown-timeout: 30s # 一个很难做衡量的配置</code></pre><p>Nginx 配置参数中 worker-shutdown-timeout 是 Nginx 的 worker 过程优雅下线的超时配置,worker 过程会先进行接管新的连贯,并期待老的连贯逐步敞开,达到超时工夫后,才会去强制敞开以后的所有连贯,实现过程退出。</p><p>此参数配置过小,会导致大量沉闷连贯霎时断开;而此参数配置过大时,又会导致 websocket 长连贯始终维持住 Nginx 过程,当产生频繁 reload 时会产生大量 shutting down 状态的 worker 过程,老 worker 占有的内存迟迟得不到开释,可能会导致 OOM 引发线上故障:</p><p></p><p>理论玩耍的测试过程如下:客户端拜访游戏服,进行失常玩耍。在此过程中通过 OKG 能力触发游戏服扩容,查看此时客户端的响应。通过网页开发者工具能够看到,呈现了两条 Socket 连贯,一条是原先浏览器拜访游戏服建设,另一条是因为 Nginx 断连后重连产生的 Socket 连贯。</p><p></p><p>原有连贯收到的最初一个包工夫戳是 15:10:26。</p><p></p><p>而新建连贯到获取第一个失常游戏包的工夫是 15:10:37,网页与游戏服的断连大略继续 5s 左右。</p><p></p><p>除了玩家的玩耍体验受影响,这个机制也会给业务整体稳定性埋雷。在高并发场景下,因为连贯瞬断,导致大批量客户端的并发重连,会导致 Nginx 的 CPU 霎时飙升;而后端游戏服务器须要解决更多业务逻辑,个别比网关的资源需要更高,因而 Nginx 透传过来的大量并发重连,也更容易打垮后端,造成业务雪崩。</p><h2>Higress 如何实现优雅热更新</h2><p>Higress 反对采纳 K8s Ingress 裸露游戏服内部 IP 端口,供玩家连贯拜访。当游戏服伸缩或者定义的路由配置发生变化时,Higress 反对路由配置的热更新,以此保障玩家连贯的稳定性。</p><p></p><p>Higress 基于 Envoy 的准确配置变更治理,做到了真正的配置动静热更新。在 Envoy 中 downstream 对应 listener 配置,交由 LDS 实现配置发现;upstream 对应 cluster 配置,交由 CDS 实现配置发现。listener 配置更新重建,只会导致 downstream 连贯断开,不会影响 upstream 的连贯;downstream 和 upstream 的配置能够独立变更,互不影响。再进一步,listener 下的证书(cert),过滤器插件(filter),路由(router)均能够实现配置独立变更,这样不论是证书/插件/路由配置变更都不再会引起 downstream 连贯断开</p><p>准确的配置变更机制,除了让 Envoy 能够实现真正的热更新,也让 Envoy 的架构变的更牢靠,Envoy 配置管理从设计之初就是为数据面(DP)和管制面(CP)拆散而设计的,因而应用 gRPC 实现近程配置动静拉取,并借助 proto 来标准配置字段,并放弃版本兼容。这个设计实现了数据面和管制面的平安域隔离,加强了架构的安全性。</p><p>应用 OKG 接入 Higress 后,上面仍然模仿客户端拜访游戏服,进行失常玩耍。在此过程中通过 OKG 能力触发游戏服扩容,查看此时客户端的响应。通过网页开发者工具能够看到,在此过程中客户端与游戏服建设的连贯稳固不受影响。</p><p></p><p>此外,在大规模游戏服场景下,每个游戏服对应一个独立的 Ingress,会产生大量的 Ingress 资源,咱们测试在达到 1k 级别规模时,Nginx Ingress 要新扩一个游戏服须要分钟级失效,而 Higress 能够在秒级失效。Nginx Ingress 的这一问题也被 Sealos 踩坑,并最终通过切换到 Higress 解决,有趣味能够浏览这篇文章理解:《云原生网关哪家强:Sealos 网关血泪史》</p><p><strong>相干链接:</strong></p><p>[1] OpenKruiseGame</p><p>https://openkruise.io/zh/kruisegame/installation/</p><p>[2] Higress</p><p>https://higress.io/zh-cn/docs/user/quickstart/</p><p>[3] OKG 程度伸缩</p><p>https://openkruise.io/zh/kruisegame/user-manuals/gameservers-…</p><p>作者:赵伟基、力铭、澄潭</p><p><strong>原链接</strong></p><p><strong>本文为阿里云原创内容,未经容许不得转载。</strong></p></article> ...

February 29, 2024 · 2 min · jiezi

关于网关:为什么-Higress-是-Knative-入口网关的最佳实践

在传统的利用开发中,通常须要治理底层的基础设施、服务器与网络配置等方面的工作。然而在云原生 Serverless 化的浪潮下,这些基础设施的细节被形象和自动化,开发者无需关注服务器等配置、扩大、监控和保护等工作,能够更专一于应用程序的业务逻辑和性能开发。Serverless 架构的价值在于提供高效、弹性、无服务器治理、服务按需付费、疾速部署与迭代、以及高可扩展性等劣势,升高开发和运维的复杂性,进步开发效率和应用程序的品质。 Knative Serving 是一款基于 K8s 的 Serverless 开源平台,用于构建和治理现代化、可拓展、流量驱动、无服务器的应用程序。Knative Serving 提供了诸多个性来反对用户部署 Serverless 服务,如基于 HTTP 流量触发 pod 的主动扩缩容、服务版本订正、主动流量治理、故障复原等。 $$起源:https://knative.dev/docs/serving/architecture/$$ Knative 整体架构如下层所示,Controller 和 DomainMapping 等组件等负责管理 KnativeCRD 资源的生命周期,其弹性能力由外围的 Activator、Autoscaler 和 Queue-Proxy 等组件提供。网络和路由能力依赖各类 Ingress Gateway 提供。 本文重点关注 Knative 网络层能力的实现。Knative 网络层能力须要依赖 Knative Ingress CRD 与其余网络层组件实现。目前,Knative 官网提供了基于 Contour、Istio 和 Kourier 等作为其网络层组件,提供无限的网络能力,如根本的路由、认证鉴权和 TLS 等,能够满足根本的路由和平安要求。Higress 是平安、流量和微服务三合一的云原生网关,应用 Higress 作为 Knative 服务的流量入口可能取得更强的流量治理、平安防护、可观测和可扩大能力。 Knative 网络层工作原理接下来咱们以 Net-Istio 为例,介绍 Knative Serving 通过网络层实现服务对外公布的过程。Net-istio 网络层将数据面与管制面进行拆散。数据面采纳 Envoy,负责解决网络流量。管制面负责管理与配置数据面,反对对网关的动静配置和治理。 当有 KService 被部署的时候,Knative Serving Controller 将解析 Kservice 中的路由项并生成对应的 KIngress 资源。KIngress 是 Knative 的 CRD,其资源中蕴含了服务对外披露所需的所有信息,示例如下: ...

September 5, 2023 · 5 min · jiezi

关于网关:高性能多级网关与多级缓存架构落地实战完整

download:高性能多级网关与多级缓存架构落地实战高性能多级网关的概念高性能多级网关是指具备多个网络档次的网关设施,它可能根据不同的网络协议和服务需要,动静地抉择最优的传输路径和转发策略,实现高效的数据交换和处理。高性能多级网关可能同时反对物理层、数据链路层、网络层、传输层、会话层、表示层和应用层的功能,从而实现不同网络之间的互联互通。 高性能多级网关的架构高性能多级网关的架构一般由以下几个部分组成: 核心交换模块:负责实现不同网络档次之间的数据交换和转发,反对多种交换模式,如电路交换、分组交换、报文交换等。接口模块:负责提供与内部网络的连接和适配,反对多种接口类型,如以太网、光纤、无线、串行等。处理模块:负责实现各种网络协议和服务的处理和转换,反对多种协定类型,如 TCP/IP、HTTP、FTP、SMTP等。管制模块:负责实现网关设施的治理和管制,反对多种管制形式,如本地管制、近程管制、分布式管制等。高性能多级网关的功能高性能多级网关具备以下几个次要功能: 路由抉择:根据不同的网络拓扑和流量状况,动静地抉择最佳的路由路径,优化网络性能和资源应用率。协定转换:根据不同的网络协议和服务需要,实现不同协定之间的互操作和兼容,保证数据的正确传输和解析。安全防护:根据不同的网络安全策略微危险等级,实现数据的加密、认证、过滤和防火墙等功能,保护数据的安全和隐衷。服务提供:根据不同的网络应用场景和用户需要,实现各种网络服务的提供和拜访,如 Web 服务、邮件服务、文件服务等。高性能多级网关的利用高性能多级网关广泛利用于各种简单的网络环境中,如企业网络、云计算网络、物联网网络等。高性能多级网关可能为这些网络提供以下几方面的劣势: 提高网络效率:通过动静地抉择最优的路由路径和转发策略,缩小网络提早和拥塞,提高数据传输速度和品质。增强网络兼容:通过实现不同协定之间的互操作和转换,解决不同网络之间的连接和通信问题,增强网络互联互通能力。保障网络安全:通过实现数据的加密、认证、过滤和防火墙等功能,防止数据被窃取、篡改或破坏,保证数据安全和隐衷。丰富网络服务:通过实现各种网络服务的提供和拜访,满足用户的多样化和个性化的网络需要,丰富网络应用场景。总结高性能多级网关是一种网络设备,它可能在不同的网络档次之间提供高速、安全、可靠的数据传输和服务。高性能多级网关的概念是具备多个网络档次的网关设施,它可能根据不同的网络协议和服务需要,动静地抉择最优的传输路径和转发策略。高性能多级网关的架构是由核心交换模块、接口模块、处理模块和管制模块组成。高性能多级网关的功能是路由抉择、协定转换、安全防护和服务提供。高性能多级网关的利用是广泛利用于各种简单的网络环境中,如企业网络、云计算网络、物联网网络等。心愿本文能够对你有所帮助,如果你对高性能多级网关有兴趣,欢迎拜访以下资源了解更多信息。谢谢!

August 18, 2023 · 1 min · jiezi

关于网关:对接多个-Neuron-实例实现多网关协同分析与设备联动

3 月份,eKuiper 团队次要进行了 1.9.0 版本的开发,减少了一些重要的性能,进一步提高了 eKuiper 的性能和可用性: IO Connectors 加强。新增了多 Neuron 连贯的性能;在 HTTP 连贯方面,咱们提供了类 oAuth 的基于动静 token 的鉴权过程的反对;此外还反对了 MQTT 连贯中压缩和解压,缩小边云传输的带宽损耗。剖析能力加强。咱们增加了许多新的转换函数,包含 JSON 字符串相干、base64 编码相干以及压缩相干的函数,不便用户更灵便地解决和转换数据流。经营效率加强。新版本中持续优化了数据导入和导出性能,反对抉择须要的规定进行导入导出,实现了规定依赖的流、配置和插件等的主动推断和导出。另外,咱们优化了 eKuiper manager 中的规定治理界面,能够更精确地展现规定启动中的状态。残缺内容请点击下方链接查看: https://developer.aliyun.com/article/1190418?utm_content=g_10... 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

June 21, 2023 · 1 min · jiezi

关于网关:多层网关已成过去网关多合一成潮流网关改造正当时丨Higress-正式发布-10-版本

01 前言K8s 通过 Ingress / Gateway API 将网关标准化,逐渐将平安网关、流量网关、微服务网关内聚,解决从单体到微服务到云原生多层网关的复杂度,合久必分,分久必合,多层网关已成过来,网关多合一成潮流,成为 K8s 开发者和微服务开发者独特关怀的话题。 02 Higress 1.0 正式公布,即官网举荐生产可用Higress 是阿里云开源的下一代网关,从 2022 年 11 月在云栖大会上发表开源,走过大半年工夫,公布了 GA 版本 1.0.0,即官网举荐生产可用。回顾 Higress 的倒退历程,经验了三个阶段: 残缺内容请点击下方链接查看: https://developer.aliyun.com/article/1234100?utm_content=g_10... 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

June 15, 2023 · 1 min · jiezi

关于网关:开源-API-网关访问策略二

在上篇文章API网关:开源 API 网关-拜访策略(一) 中,咱们简略演示了如何在IP维度中对申请门路设置黑白名单,以此来限度客户端申请的权限和范畴。 此外,Apinto网关为客户端提供了一种对立的、基于拜访密钥的认证机制,让客户端能够依据权限定制专属的拜访策略,以满足其对服务和API的拜访需要,无效地管制拜访权限。如下图: 配置步骤假如咱们当初须要满足以下需要:只容许携带指定Authorization 申请头中拜访特定的API。为了实现这个指标,咱们能够抉择筛选流量,指定指标API,而后在失效范畴中抉择利用 利用鉴权信息配置。若您须要理解具体步骤,请点击查看相干阐明。 新建策略 筛选流量抉择一个名为百度的API,它的申请门路为/baidu,失效范畴抉择一个名为test的利用,它的鉴权信息为ApiKey,ApiKey值为123456 公布策略 测试后果 通过测试后果,咱们能够看到,当申请带不带Authorization或Authorization值不是123456时,会返回403回绝拜访状态码 总结Apinto网关开箱即用,整个过程仅用2个小时就能疾速入门,至于其余性能后续再进行钻研! Apinto是一款高性能、可扩大、易保护的API网关。 Apinto网关基于GO语言模块化开发,5分钟极速部署,配置简略、易于保护,反对集群与动静扩容,企业级开箱即用。Apinto除了提供丰盛的网关插件外,还将提供监控告警、用户角色等企业插件,同时反对自定义网关插件和可扩大企业插件,满足咱们企业的定制化需要。 Apinto反对代理内部流量,转发给外部服务,也反对外部服务之间的通信代理 为了反对Apinto团队提供更好的开源体验,记得fork一下噢。开源地址:https://github.com/eolinker/apinto

June 9, 2023 · 1 min · jiezi

关于网关:多层网关已成过去网关多合一成潮流网关改造正当时

01 前言K8s 通过 Ingress / Gateway API 将网关标准化,逐渐将平安网关、流量网关、微服务网关内聚,解决从单体到微服务到云原生多层网关的复杂度,合久必分,分久必合,多层网关已成过来,网关多合一成潮流,成为 K8s 开发者和微服务开发者独特关怀的话题。 02 Higress 1.0 正式公布,即官网举荐生产可用Higress 是阿里云开源的下一代网关,从 2022 年 11 月在云栖大会上发表开源,走过大半年工夫,公布了 GA 版本 1.0.0,即官网举荐生产可用。回顾 Higress 的倒退历程,经验了三个阶段: Higress 的技术选型和首次业务落地(2020.05~2020.11) Higress 的创立源于阿里外部的“本地生存战斗”,核心技术指标是实现阿里巴巴业务域与蚂蚁业务域之间 RPC 间接调用,但因阿里巴巴与蚂蚁业务域网络是隔离的,即网络是不通的,很天然想到利用网关来解决此问题。利用网关来解决阿里巴巴与蚂蚁跨业务域 RPC 互通问题,首先要对网关做技术选型。选型期,除了关注技术计划是否完满反对 HTTP/gRPC 协定、反对丰盛路由策略以及是否业内支流技术,还关注是否反对热更新。 热更新是咱们的外围关注点。 Tengine/Nginx 的配置更新须要 reload,reload 须要重启 worker 过程,重启时会引起流量抖动,对长连贯影响尤为显著。在网关的集群规模十分大时,更是不能随便的做 reload,这时就会引发一个矛盾点:业务向网关提交配置后,心愿能疾速验证,但受限于 reload 机制和稳定性要求,无奈满足业务疾速验证与疾速试错的诉求。 如何解决这点呢? 一是采纳两层网关,即流量网关 + 业务网关;二是实现网关原生反对配置热更新。除了比照不同计划的优劣势,咱们也调研了 Envoy 作为网关在业界的趋势,论断是目前 Envoy 作为 K8s 中的 Ingress Provider 增长最快的事实(Ingress Provider 指 K8s Ingress 标准具体实现,因 K8s Ingress 本身只是标准定义,是 K8s 下内部流量进入集群外部的网关标准定义),咱们最终抉择了 Envoy 来实现两层网关,并完满撑持双11大促每秒数十万的申请流量。 ...

May 30, 2023 · 3 min · jiezi

关于网关:打造未来API网关成为AIGC访问的基石

最近人工智能爆炸性音讯层出不穷,先是百度和微软别离发表将于近期公布新款类ChatGPT产品,随着相干音讯披露,商业化成为业内最为关注的话题。此前OpenAI发表凋谢ChatGPT的API接口。这意味着,任何公司和集体都能够在本人的程序中自在调取ChatGPT的相干性能。随着ChatGPT的弱小性能一直被验证,近期一批A股上市公司纷纷发表接入或打算接入ChatGPT等相似零碎。随着ChatGPT的API接口正式凋谢,更多公司的退出将会减速相干模型的商业化落地。 在继3月16日百度公布文心一言大模型后,国内泛滥科技、AI巨头都相继颁布了各家大模型的发布会工夫:4月8日华为盘古大模型公布、4月10日商汤大模型公布、4月11日阿里大模型公布,国内大模型的“百家争鸣”,AI曾经成为大厂的必争之地,一些通用性AI能力将成为基础设施,当前大家看到的APP可能都离不开这些AI提供的能力。将来咱们上线的APP的整体架构可能会是这样的: AI能力作为基础设施处于最底层,客户端和用户的业务零碎都有调用AI的API的需要。用户的业务零碎能够通过API网关将所有AI的API包装起来,对客户端和业务零碎提供对立的拜访形式,对立管制拜访权限和拜访频率。这个架构还有个益处,就是用户购买的AI能力和用户业务API通过API网关上托管的对立的域名对客户端提供服务,能够对立管制相干权限和流量。上面咱们分块形容下阿里云API网关在能力凋谢这块提供的根底能力。 对立域名证书 用户能够将本人的业务域名和对应的SSL证书对立托管到API网关,将所有AI的API和本人业务零碎的API包装到API网关后,对客户端和内部零碎提供对立的域名进行拜访,将所有AI的服务域名都包装起来。调用者并不知道后端真正提供能力实现的零碎名称,用户能够依据业务运行的状况来替换AI的供应商,调用者感知不到后端API的变动。 鉴权 不同的AI能力提供者对用户派发了不同的拜访凭证,调用不同的AI提供者的API的鉴权形式各有不同。用户能够将这些复杂度通通在阿里云的API网关配置上,对其调用者提供对立的鉴权形式。用户能够通过API网关为不同的用户生成不同的拜访凭证,并且为这些拜访凭证设置有效期,也能够在API网关控制台随时删除指定的拜访凭证。 阿里云API网关除了为用户提供拜访凭证类型的鉴权形式,还提供了规范的JWT的鉴权形式,用户能够通过颁发Token的形式对调用者进行动静鉴权,并且能够通过治理API网关的插件数据集形式来Block曾经颁发的Token。 阿里云API网关还提供了灵便的第三方鉴权的能力,用户配置本人的鉴权服务为API的拜访进行鉴权,API网关在调用API后端服务之前先调用用户的鉴权服务,收到鉴权服务的鉴权胜利应答后才会持续调用后端服务,否则给客户端返回鉴权失败的应答。 反对流式输入(SSE) 目前泛滥类ChatGPT的AI提供方提供的服务模式都是对话性质的,在返回应答的时候都是流式输入的,如上图所示,返回的应答都是逐字逐句返回的。阿里云的API网关能够通过简略的配置反对流式输入的个性(SSE),以适配目前风行的对话型AI服务模式。 流控 流控是API网关最根底的能力,无论用户的业务API还是AI的API都须要有流控的爱护。阿里云API网关容许用户依据后端系统最大承受能力设置流量阈值,当客户端申请总量超过阈值时,网关把多出的申请间接驳回,保障后端服务不会遇到过载申请的状况。API网关容许用户通过多个维度对申请进行流控,能够对API,App(拜访凭证),用户(拜访方的App归属用户)三个维度进行秒、分钟、小时、天等工夫维度进行流控,API网关同时提供针对申请中自定义参数这个维度的限流,申请的任意一个参数都能够成为流控的锚定值,比方用户能够指定申请中的IP头作为流控锚定值,那么能够通过API网关的流控能力轻松管制每个IP的申请RPS。 监控与报警 业务的可观测性和异常情况报警是一个零碎的必备根底能力,API网关作为用户业务流量入口,天生是业务观测最佳地位。阿里云的API网关将所有业务拜访日志同时同步到了阿里云的三个产品中:日志服务(SLS)、利用实时监控服务(ARMS)、云监控服务,用户能够在不同的云产品中通过不同的形式去观测与监督本人的业务监控状况。 通过日志服务(SLS)查看每一个申请的详细情况,包含申请和应答、后端服务耗时等细节;通过利用实时监控服务(ARMS)观测整个申请链条中,每个网络节点的耗时申请,对全链路耗时状况进行剖析;通过云监控服务,对所有业务日志进行监控,并能够依据业务状况针对后端应答码、后端服务耗时设置报警规定。申请与应答大小限度在调用类ChatGPT的API的时候,申请和应答中存在须要传输文件的场景,比方传输一张图片给ChatGPT,或者从ChatGPT中下载一个生成的视频文件。阿里云API网关在申请和应答的限度上针对相似场景给出十分优化的限度: Request Body大小,共享实例最大为8MB,专享实例最大为32MB。Response Body大小,无限度,但须要在API设置的后端超时工夫内返回。专享实例后端超时工夫最大容许为90秒。性能性能是所有API网关的一个十分外围的一个指标,所有业务申请都须要过API网关,API网关的性能会是整个零碎性能指标的的十分要害的一环。阿里云API网关商业化后在私有云对公众用户提供服务七年无余,在性能上做个屡次大幅度的优化,能够给大家分享两个2022年统计的两个专享实例的要害性能指标:98.17%的申请在API网关耗时在1毫秒以内,99.23%的申请在API网关耗时在2毫秒以内。 阿里云的API网关除了性能优良,自身耗时极低,还能够为用户提供有限扩容的专享实例,能够为用户生成反对超过百万RPS的专享实例,在性能上和容量上彻底打消后顾之忧。 小结在AI成为基础设施的今后,以AI为根底的利用会随着AI能力的遍及大量地呈现在人们的视线中。将来以AI作为基础设施的利用零碎架构中,应用阿里云的API网关作为对立API入口,将AI能力的复杂性包装在API网关内,提供对立的鉴权、流控等根底能力。API网关外部集成了阿里云日志监控类云产品,为用户提供API调用统计、全链路监控、报警等性能,不便对API进行治理和保护,进步接口的稳定性和可靠性。API网关提供极高的并发能力和扩容能力,能够满足高并发的业务需要。 原文链接 本文为阿里云原创内容,未经容许不得转载。

May 4, 2023 · 1 min · jiezi

关于网关:Apinto-V012-发布新增流量镜像与-Mock-插件路由特性更丰富

Hello~ 各位开发者敌人们好呀, Eolink 旗下开源网关 Apinto 本周又更新啦!这次的更新咱们给大家带来了 2个好用的插件,且目前曾经反对动态资源路由了!心愿新的性能能让大家的开发工作更加高效 ~ 1、新增流量镜像插件流量镜像(eolinker.com:apinto:proxy_mirror) 插件提供了镜像客户端申请的能力。流量镜像是将线上实在流量拷贝到镜像服务中,以便在不影响线上服务的状况下,对线上流量或申请内容进行具体的剖析。 应用 流量镜像插件 前,申请调用链如下图: 应用 流量镜像插件 后,申请调用链如下图: 2、新增 Http Mocking 插件API Mock 是一种技术,它容许程序员在不依赖后端数据的状况下,模仿 web 服务器端 API 的响应。通常应用 API Mock 来测试前端应用程序,而无需期待后端程序员构建实现。API Mock 能够模仿任何 HTTP 申请办法,并进行响应测试。 Apinto 提供 HTTP Mocking 插件(eolinker.com:apinto:http_mocking)来模仿 Api Mock 申请响应数据,无需等到后端接口上线,通过模仿数据进行前端利用程序调试。 3、丰盛 http 路由个性,反对动态资源路由在 Apinto V0.12 版本之前,若客户端想获取动态资源,依然采取代理转发到上游服务获取资源,耗时费劲,且减少上游服务压力,不可取。为了解决这一痛点,Apinto V0.12 版本新增了动态资源路由,能够设置接口的默认返回,满足客户端需要,这包含动态 HTML 页面、动态的接口数据(Json、XML 等格局数据)、页面重定向等等。 上面,咱们通过 Apinto Dashboard 配置了一个重定向到【Apinto 官网 www.apinto.com 】的动态资源路由示例 更多应用形式可到咱们的教程网站进一步理解!https://help.apinto.com/docs 咱们心愿失去您的关注~ Apinto : https://www.apinto.com/ ...

March 6, 2023 · 1 min · jiezi

关于网关:如何在几百万qps的网关服务中实现灵活调度策略

作者 | 加纳斯 导读 说起百度的BFE可能不少人都据说过,然而其实在百度外部还有一个几百万qps的通用网关服务:Janus。截止以后,Janus服务不仅笼罩了百度外部FEED、评论、点赞、关注、直播等十多个中台服务的内网流量,而且为百度app、晓得、教训、passport、百科、问一问等业务提供了外网流量服务。 在百度已有BFE且BFE开源的状况下,为什么要建设Janus网关?Janus网关区别于其余网关的外围点有哪些?面对泛滥的接入方,如何实现既能通用又能个性化的流量调度呢? 来本文一探到底吧。 全文3802字,预计浏览工夫10分钟。01 为什么要建设Janus在百度已有BFE且BFE开源的状况下,为什么要建设Janus网关? 从场景上看,与BFE面向通用性能的流量网关场景不同,Janus不仅能够作为流量网关,也能够作为业务网关、混合网关;不仅面向通用性能,也反对个性化需要。从实现上看,Janus的局部技术参考了BFE,然而与厂内BFE次要提供saas类的服务不同,Janus提供的是一个通用技术计划,谁应用谁部署,谁有个性化需要谁本人定制插件。因而,Janus网关的利用场景绝对更广一些,以后的应用场景次要蕴含流量网关、业务网关、混合网关三种模式,流量拓扑如下: 部署拓扑: 02 外围问题从流量调度规定为例,大部分的应用方的转发规定都绝对比较简单,然而局部业务的转发规定来自于原来的nginx配置,绝对比较复杂,更有些应用方会有偏业务的逻辑在外面,例如: 从某时刻后,将API1的A机房和B机房的流量切30%到C机房;将某个APP的某个版本之上的android流量切到新的路由规定;cookie有某些特色或者query中有某些特色的流量转发到预览环境。那么在调度阶段如何更好地解决如下两个问题呢: 如何让简略的路由规定配置起来特地简略,性能较高?如何实现简单甚至业务个性化的调度策略实现?把问题放大到网关的全局利用场景来看,如何既能通用,写个插件大家都能用;又能反对个性化,尽量能通过通用插件满足业务特例的问题;还能灵便,流量网关、业务网关都能胜任。既要、又要、还要的问题通常是应用tradeoff的形式加以均衡解决,然而Janus的解决方案同时满足了下面的三个需要:通过插件机制满足通用化需要+通过可动静下发编程能力的形式进行差异化配置+通过SDK集成到业务部署的形式反对灵便应用。 03 流量调度方案设计3.1 计划思路概述为了将服务的转发规定更加清晰,Janus将路由分为了三级(与nginx相似): 由下面的挑战剖析可知: 对于大多数的简略路由规定须要绝对简略,性能绝对高,通过域名匹配+树路由实现的url匹配即可;对于大量的简单路由规定须要扩展性足够强,能够在特色匹配阶段引入一个极简的脚本语言来实现。3.2 根底路由规定反对通过树路由反对的局部规定如下: 3.3 进阶路由规定反对上述的简略路由规定能够满足90%+的业务需要,然而对于相似\`从某时刻后,将API1的A机房和B机房的流量切30%到C机房\`这种需要是满足不了的。因而,在特色匹配阶段能够通过\`变量表达式\`+\`条件表达式\`进行精细化匹配。 变量表达式为了能依据零碎外面的常见特色进行精细化匹配,首先咱们要对系统外面的常见特色进行形容。例如: 通过${idc}示意以后所属的机房通过${time}示意以后工夫通过${query}示意get参数通过${header}示意header外面的数值然而当特色越来越多的时候,就会略显臃肿,存在的特色变量越来越多,这时候Janus引入了分级的概念,比方: 如图所示,就能够用${request.query.id}来示意本次申请中key为id的query值。并且如上的特色变量是能够裁减的,每个应用方能够依据本人的零碎差别、环境差别定义本人的特色变量体系。 条件表达式有了下面实现的变量表达式,咱们就能够用$形容咱们须要的特色变量了,然而如何对这些特色变量进行操作呢? Janus的计划是定义一门极简的语言(无论是用yacc等一类的生成语法分析的工具,还是本人做词法剖析、语法分析,实现都比较简单,这里不再赘述实现细节),只反对逻辑运算+函数调用,局部例子如下: 函数调用: 逻辑运算: Janus在有变量表达式来示意零碎特色的根底上,增加了条件表达式来对系统特色进行操作、判断。因为能够一直裁减变量表达式和条件表达式,因而Janus简直能够满足用户的任意需要。 性能比照通过如上计划介绍能够看出,采纳从管制面下发表达式的形式,能够满足绝大部分场景的需要,然而,对性能影响如何呢? 在数据面接管到管制面下发转发规定时,首先会对变量表达式和条件表达式进行编译,映射成go的代码,在后续运行时,与间接调用原生的go语言差别并不大。比照数据如下: 条件表达式: "random(0,100) || random(100,100)"对应的benchmark数据: goos: windowsgoarch: amd64cpu: 11th Gen Intel(R) Core(TM) i5-1145G7 @ 2.60GHzBenchmarkRandom-8 35817918 34.52 ns/op 0 B/op 0 allocs/op原生go代码: (0 > rand.Intn(100)) || (100 > rand.Intn(100))对应的benchmark数据: ...

November 29, 2022 · 1 min · jiezi

关于网关:放弃-SpringCloud-GatewayApache-APISIX-在还呗业务中的技术实践

不同行业之间,都会存在一些业务属性上的差距。对于金融畛域的应用软件来说,因其波及到钱等因素,所以在业务上会有以下独特属性: 稳定性。金融畛域跟钱强相干,这对于业务稳定性就有着十分严格的要求,稳定性一旦呈现问题,它将影响整个交易系统的成败。强监管。强监管个别是针对生物医药畛域、医疗畛域和金融畛域,因为它们所出现的内容都与人的生命相干。所以,更高层面的强监管要求势必会影响一些业务层面的选型和架构出现。准确性和有效性。因为跟钱强相干,所以在数字层面的出现更是要求零偏差。就像股票价格一样,它的数字出现都是准确到了每分每秒和固定数位的。基于以上这些特点,金融行业软件系统在进行零碎设计、机房拓扑以及中间件选型时,就会呈现一些与其余通用行业不太一样的中央。 对 Java 的那些爱与恨金融零碎为何独爱 JavaJava 自诞生以来就深受开发者的青睐。在中国有将近 50% 的开发者在应用 Java 作为开发语言。这不单单是因为其语言的劣势,也因为 Java 相干的生态十分宏大,尤其是国内的金融零碎很多都是基于 Java 的,这导致有段时间大家都误以为所有的零碎都是用 Java 做的。 近 15~20 年以来,大部分金融零碎根本都抉择了 Java 技术栈,深究其原因,咱们认为次要是因为 Java 技术栈有以下几点劣势。 正是如此,Java 逐步失去了金融类软件系统的青眼。 云原生时代下的 Java 现状随着技术行业的疾速倒退,单体架构逐步被淘汰,微服务和云原生时代正在风靡四海。然而在近几年的技术大环境下,作为面向对象的高级语言,Java 也在一些业务场景中开始略显疲乏: 首先,Java 性能较低,这点比照一下 C 语言相干技术栈就会明确。Java 是基于虚拟机,它的内存治理是交给虚拟机来解决的,所以当面对一些高性能或动态变化的业务场景时,Java 语言在解决上没有那么强势。 其次,Java 语言须要更多的资源。一个架构的打造如果不思考老本,很多问题都很好解决,但在云原生时代下,所有的资源计算变得越来越细、越来越颗粒化。Java 在运作时须要耗费大量的资源,因为 Java 重量重和须要重启的根底个性,因而在高 QPS 或者业务连续性要求较高的场景下,该语言会更容易呈现问题。 最初就是指针变量的问题。习惯于写 C/C++ 语言的同学都晓得,指针是一个十分好的资源。但 Java 是基于虚拟机,它把内存治理交给了 GC(Garbage Collection),而不是由手动程序进行治理,所以对于一些特定状况或者高并发、高访问量和高性能的场景下,Java 的理论性能可能就略显有余了。 还呗为何抉择 APISIX?数禾科技是一家提供智能化金融的服务平台,旗下次要产品有还呗、还享花等。还呗 APP 是一款基于生产多场景的分期服务平台,通过与持牌金融机构单干,为公众提供集体消费信贷服务,并为小微企业主提供贷款资金反对。在业务架构层面,还呗的产品实现始终是依赖 Java 技术栈的。 Spring Cloud Gateway 是 Spring Cloud 生态下为更好治理微服务而诞生的网关我的项目,对于公司业务以 Java 为次要开发语言的状况下,Spring Cloud Gateway 通常是个不错的 API 网关抉择。但在近期的 API 网关迭代过程中,还呗放弃了应用已久的 Spring Cloud Gateway,而是抉择了 Apache APISIX。 ...

October 10, 2022 · 2 min · jiezi

关于网关:为什么说-Apache-APISIX-是最好的-API-网关

明天,咱们能够通过手机和各种 APP 实现各种各样的事件,比方社交,网购等。这些行为的背地,API 起到了要害的作用。作为 API 的使用者,咱们并不关怀 API 的稳固、平安和高效,然而通过 API 提供数据服务的企业则须要抉择一个适合的 API 网关,用来保障数千乃至数万的 API 为提供疾速和平安的服务。 在 CNCF 的 API Gateway landscape 中有靠近 20 个 API 网关的选型(不包含私有云厂商的产品),包含 Apache APISIX、Kong、Tyk 等等。很多网关都称本人是下一代 API 网关,是最受欢迎的开源 API 网关我的项目,那么事实如何呢?本文将通过开发者、知识产权和品牌、技术、生态等多个维度来看看 Apache APISIX 为什么是下一代 API 网关? 工程师的眼睛是雪亮的工程师是 API 和 API 网关的使用者和开发者,更多工程师关注和参加的 API 网关我的项目,代表的就是技术的趋势。咱们从 GitHub 代码贡献者的维度,选取了 4 个开源 API 网关进行比照:Apache APISIX、Kong、Tyk 和 Gloo。 Kong 和 Tyk 都是 2015 年之前开始研发的,Apache APISIX 和基于 Envoy 的 Gloo 是在 2019 年左右开始研发的。从上图中的 Github Contributor Over Time 能够看出,Kong 通过近 7 年的倒退曾经有超过 250 个贡献者参加,远远超过了 Tyk 和 Gloo;而最年老的 Apache APISIX,曾经超过 320 个贡献者,数量和增速都远超 Kong,成为最多开发者参加奉献的 API 网关我的项目。 ...

September 16, 2022 · 3 min · jiezi

关于网关:如果让我设计一套TPS百万级API网关

作者:小傅哥博客:https://bugstack.cn 积淀、分享、成长,让本人和别人都能有所播种!是滴,小傅哥又要筹备搞事件了!这次筹备下手API网关我的项目,因为这是所有互联网大厂都有的一个外围服务,承接着来自用户的滴滴打车、美团外卖、京东购物、微信领取,更是大促期间千万级访问量的外围零碎。 那么它是一个什么样的我的项目呢?为什么会有它的存在?它是怎么设计实现的呢?都用到了哪些技术栈呢? 一、前言:网关是啥货色在计算机网络中,网关(Gateway)是转发其余服务器通信数据的服务器,接管从客户端发送来的申请时,它就像本人领有资源的源服务器一样对申请进行解决。 而API网关也是随着对传统宏大的单体利用(All in one)拆分为泛滥的微服务(Microservice)当前,所引入的对立通信管理系统。用于运行在内部http申请与外部rpc服务之间的一个流量入口,实现对外部申请的协定转换、参数校验、鉴权、切量、熔断、限流、监控、风控等各类共性的通用服务。 二、大厂:为啥都做网关各大厂做网关,其实做的就是一套对立计划。将散布式微服务下的RPC到HTTP通信的同类共性的需要,凝练成通用的组件服务,缩小在业务需要场景开发下,非业务需要的同类技术诉求的开发成本。 那么以往没有网关的时候怎么做,根本的做法就是再 RPC 服务之上再开发一个对应的 WEB 服务,这些 WEB 服务能够是 Spring MVC 工程,在 Spring MVC 工程中调用 RPC 服务,最终提供 HTTP 接口给到 H5、Web、小程序、APP 等利用中进行应用。如图 1-1 所示 传统开发 WEB 服务的几个问题: 问题1:每一个 WEB 利用,都须要与之匹配申请一套工程、域名、机器等资源,始终到部署,研发效率升高,保护成本增加。问题2:每一个 WEB 利用,都会有所波及共性需要,限流、熔断、降级、切量等诉求,保护代码成本增加。问题3:每一个 WEB 利用,在整个应用生命周期内,都会波及到文档的保护、工程的调试、联调的诉求,相似刀耕火种一样的开发势必升高研发效率。所以:综上在微服务下的传统开发所遇到的这些问题,让各个大厂都有了本人自研网关的诉求,包含;阿里、腾讯、百度、美团、京东、网易、亚马逊等,都有本人成熟的 API 网关解决方案。毕竟这能够升高沟通老本、晋升研发效率、晋升资源利用率。 三、网关:零碎架构设计如果心愿实现一个能撑持百亿级吞吐量的网关,那么它就应该是依照分布式架构思维做去中心化设计,反对横向扩大。让每一台网关服务都成为一个算力,把不同的微服务RPC接口,依照权重策略计算动态分配到各个算力组中,做到分布式运算的能力。 此外从设计实现上,要把网关的通信模块、治理服务、SDK、注册核心、经营平台等顺次离开独自开发实现,这样能力进行独立的组合包装应用。 这就像为什么 ORM 框架在开发的时候不是与 Spring 强绑定在一起,而是开发一个独立的组件,当须要有 Spring 交融应用的时候,再独自开发一个 Mybatis-Spring 来整合服务。 所以在这里设计网关的时候也是同样的思路,就像官网的通信不应该一开始就把 Netty 相干的服务全副绑定到 Spring 容器,这样即减少了保护老本,也升高了零碎的扩展性。 诸如此类的软件架构设计,都会在这套网关微服务架构中体现,整体架构如图 1-2 所示 整个API网关设计核心内容分为这么五块; 第一块:是对于通信的协定解决,也是网关最实质的解决内容。这里须要借助 NIO 框架 Netty 解决 HTTP 申请,并进行协定转换泛化调用到 RPC 服务返回数据信息。第二块:是对于注册核心,这里须要把网关通信零碎当做一个算力,每部署一个网关服务,都须要向注册核心注册一个算力。而注册核心还须要接管 RPC 接口的注册,这部分能够是基于 SDK 主动扫描注册也能够是人工染指治理。当 RPC 注册实现后,会被注册核心通过AHP权重计算调配到一组网关算力上进行应用。第三块:是对于路由服务,每一个注册上来的Netty通信服务,都会与他对应提供的分组网关相关联,例如:wg/(a/b/c)/user/... a/b/c 须要匹配到 Nginx 路由配置上,以确保不同的接口调用申请到对应的 Netty 服务上。PS:如果对应谬误或者为启动,可能会产生相似B站事变。第四块:责任链下插件模块的调用,鉴权、授信、熔断、降级、限流、切量等,这些服务尽管不算是网关的定义下的内容,但作为共性通用的服务,它们通常也是被放到网关层对立设计实现和应用的。第五块:治理后盾,作为一个网关我的项目少不了一个与之对应的治理后盾,用户接口的注册保护、mock测试、日志查问、流量整形、网关治理等服务。综上零碎微服务模块构造如下: ...

August 16, 2022 · 1 min · jiezi

关于网关:Apache-APISIX-215-版本发布为插件增加更多灵活性

不出意外的话,2.15 将会是 Apache APISIX 3.0 版本公布之前最初一个 minor 版本。从两年前公布第一个 2.0 版本开始,APISIX 曾经公布了 15 个 minor 版本和许多个 patch 版本。作为 2.x 系列最初的一个 minor 版本,2.15 版本能够说是个承前启后的版本。「承上」是因为该版本持续引入了更多的性能,使得插件配置更加灵便;「启下」则是因为该版本将会是 2.x 版本的最初一个 LTS 版本,后续 APISIX 就要向 3.0 版本进发了。更多细节一起来看下文吧! 自定义插件优先级新版本反对用户自定义插件的优先级,而非间接利用插件默认的优先级属性。有了这个性能,咱们能够在某个特定的路由上调整某几个插件的执行程序,从而突破之前插件优先级属性的解放。例如,在默认状况下,serverless-post-function 插件是在 serverless-pre-function 插件之后执行的。然而通过此性能,能够让 serverless-post-function 插件优先执行。配置示例如下: { "serverless-post-function": { "_meta": { "priority": 10000 }, "phase": "rewrite", "functions" : ["return function(conf, ctx) ngx.say(\"serverless-post-function\"); end"] }, "serverless-pre-function": { "_meta": { "priority": -2000 }, "phase": "rewrite", "functions": ["return function(conf, ctx) ngx.say(\"serverless-pre-function\"); end"] }}如果一个插件配置中没有注明优先级,则会依据插件代码中的优先级属性值进行排序。如果你在 Service 或者 Plugin Config 的插件配置中指定了插件的优先级,那么在合并到路由后仍然失效。 ...

August 2, 2022 · 2 min · jiezi

关于网关:助力开发者全方位解读-APISIX-测试案例

背景信息Apache APISIX 是 Apache 软件基金会下的云原生 API 网关,它兼具动静、实时、高性能等特点,提供了负载平衡、动静上游、灰度公布(金丝雀公布)、服务熔断、身份认证、可观测性等丰盛的流量治理性能。你能够应用 APISIX 来解决传统的南北向流量,也能够解决服务间的东西向流量。同时,它也反对作为 K8s Ingress Controller 来应用。 通常状况下,想要保障软件失常运行,在软件上线前咱们个别会应用各种技术和办法,通过手动或主动的形式对软件的性能进行查看以确保其运行失常。该操作咱们称之为 QA(测试)。测试个别分为单元测试、E2E 测试以及混沌测试。 单元测试是用来查看繁多模块的正确性(比方查看某个 RPC 的序列化/反序列化、数据加解密是否失常),然而该测试不足对系统的全局视角。而 E2E 测试(即端到端测试),能够补足单元测试的有余,该测试将整个零碎和内部依赖服务跑起来,通过实在的软件调用形式查看本零碎与其余零碎的集成状况;混沌测试则通过在零碎各组件间制作突发状况,如 OOM Kill、网络中断等,测试整个零碎谬误谬误的容忍水平与能力。APISIX 的测试更加偏差于 E2E 测试,保障本身性能和与其余系统集成的正确性。 APISIX 测试案例简介APISIX 作为寰球最沉闷的 API 网关,其稳定性及服务的健壮性须要失去肯定的保障,那么如何防止 APISIX 中潜在的谬误呢?这里就须要通过测试用例来实现了。 测试脚本并不仅仅是一个被测试机器执行的程序文件,对于开发者来讲,能够通过测试脚本实现软件所有性能的测试,包含不同配置、不同输出参数等状况下程序的运行状况。而对于用户来说测试提供了某一个功能模块的具体应用示例,例如:程序能够承受的配置和输出,想要失去怎么的输入后果。用户在参考应用文档时遇到不懂的中央,齐全能够参考现有的测试用例,寻找是否有相似的应用场景。 在 APISIX 我的项目中,通常应用 Github Action 运行 CI 测试,执行下图展现的测试脚本。许多 APISIX 的开发者在编写测试用例时,会遇到各种各样的问题。心愿通过本文,能够缩小你在编写 APISIX 测试案例时呈现的谬误。 编写测试案例APISIX的测试用例基于 Test::NGINX 测试框架编写,该测试框架是在 Perl 语言根底上实现的测试环境,能够提供基于脚本的自动化测试能力,为 APISIX 以后如此大规模的测试与质量保证工作提供了反对。当然你不会应用 Perl 也没有关系,因为大部分场景中是不须要编写 Perl 代码的,仅应用 TEST::NGINX 封装的能力即可,如果有非凡需要能够联合 Lua 代码的形式进行加强。 APISIX 的测试用例均寄存在 ./apisix/t 目录上面,接下来将以增加 opa 插件为例为你介绍如何编写测试案例。 你须要创立一个 .t 结尾的测试文件,例如 ./t/plugin/opa.t。如果你是在已有性能上增加个性,能够间接在对应的测试文件中增加测试用例。并在文件中增加固定格局的 ASF 2.0 协定。该局部次要作用是给 opa.t 这个文件中所有的测试用例主动增加 no_error_log,这样就不须要在每个代码下增加 error_log 相干的代码了,你能够间接复制应用这段代码。通过这种形式,能够缩小一些反复的代码。add_block_preprocessor(sub { my ($block) = @_; if ((!defined $block->error_log) && (!defined $block->no_error_log)) { $block->set_value("no_error_log", "[error]"); } if (!defined $block->request) { $block->set_value("request", "GET /t"); }});run_tests();DATA每个测试用例都有固定的结尾,个别格局如下。=== TEST 1: sanity=== 测试用例起始的固定语法结构,TEST` `1 则代表是本文件的第一个测试用例。sanity 则为该测试的名称。个别以测试用例的具体目标命名。 ...

July 15, 2022 · 3 min · jiezi

关于网关:APISIX-如何与-Hydra-集成搭建集中认证网关助力企业安全

本文介绍了Apache APISIX 如何与 Hydra 集成实现集中式身份认证。 背景介绍Apache APISIXApache APISIX 是一个开源的云原生 API 网关,作为 API 网关,它兼具动静、实时、高性能等特点,提供了负载平衡、动静上游、灰度公布、服务熔断、身份认证、可观测性等丰盛的流量治理性能。你能够应用 APISIX 来解决传统的南北向流量,以及服务间的东西向流量,也能够当做 K8s Ingress controller 来应用。 APISIX 的 OpenID Connect 插件反对 OpenID Connect 协定,用户能够应用该插件让 APISIX 对接泛滥鉴权服务提供商,作为集中式认证网关部署于企业中。 HydraOry Hydra 是反对 OAuth 2.0 和 OpenID Connect 协定的身份提供商之一,基于 OAuth 2.0 受权框架以及 Open ID Connect Core 1.0 框架实现,兼具开源与云原生个性。它能够与任何登录系统集成,通过 OAuth 2.0 Acces、Refresh 和 ID Tokens,使得第三方可能轻松拜访你的 API,实现用户随时随地与任何应用程序的交互。 Ory Hydra 采纳 Go 语言编写,为简直所有语言都提供了 SDK,包含 Dart、.NET、Go、Java、PHP、Python、Ruby、Rust 和 Typescript。它实用于任何登录零碎,并且能够轻松自定义登录体验。 简介OpenID 是一种集中认证模式,它是一个去中心化的身份认证零碎。应用 OpenID 的益处是,用户只须要在一个 OpenID 身份提供方的网站上注册和登录,应用一份账户明码信息即可拜访不同利用。 ...

July 12, 2022 · 3 min · jiezi

关于网关:API-网关-Apache-APISIX-助力雪球双活架构演进

背景雪球成立于 2010 年,起步于投资社区,现已成为国内当先的集投资、交换和交易为一体的在线治理平台,为投资者提供优质内容、实时行情、交易工具、财产治理等多种服务。 其中实时行情服务对接了多种上游数据源,通过数据流式计算、存储与散发,为投资者提供稳固的数据服务。所以实时行情始终是雪球业务零碎中的资源耗费小户,继续在高水位运行。雪球外部一项重要的工作就是继续进行稳定性建设,其中包含对行情服务进行性能优化。即便如此,在偶尔产生极其行情的状况下,局部零碎仍会因为数据量激增而产生响应变慢,甚至是不可用的状况,从而影响用户体验。 在此背景下,雪球为了向宽广投资者提供稳固优质的服务,启动了服务双活革新打算。Apache APISIX 能极大地简化双活架构的施行复杂度。同时 APISIX 本身的云原生性能个性、丰盛的社区生态和插件等,也为雪球将来云原生架构的演进打下了良好基础。本文将介绍雪球公司是如何借助 Apache APISIX 实现外部双活架构的演进。 上图是雪球单机房期间的简略架构形容,用户流量从云端入口(SLB)进来后,经网关进行简略的公共性逻辑解决,向后端服务转发。后端服务会通过 SDK 的形式,由集成在服务中的鉴权模块向雪球用户核心发动用户鉴权,通过后则持续进行后续的业务解决。 双活革新痛点在实际业务场景中,该架构下一些痛点也开始逐步浮现。 SDK 鉴权模块简单在双活革新施行过程中,微服务的提供方和生产方无奈齐全同步进行部署上线。当行情服务首先在云端上线,而雪球用户核心还不具备云端服务能力时,便会呈现跨机房调用的状况。依据用户核心统计,其 RPC 调用量日均约数十亿,峰值可达到 50K QPS,在行情高的 QPS 场景下会带来较高提早。 同时雪球鉴权业务复杂度较高,除 OAuth2.0 / JWT 协定外,还须要兼顾客户端版本、雪球旗下多个 APP 等多种因素。因为鉴权模块嵌入了服务内,导致降级也变得较为艰难。 OpenResty 功能性稍有有余雪球在之前始终将 OpenResty 作为网关,其本身功能性上略有有余。所以将 OpenResty 集成雪球现有监控体系时,仍须要肯定的工作量;同时扩大流程繁琐,还须要运维侧去增加自定义脚本进行实现。 依赖自研注册核心目前雪球的 HTTP 服务注册是在后端服务启动时,申请注册核心将本身注册到网关,服务进行时申请注册核心进行服务节点摘除,注册核心会定期轮询服务节点进行健康检查。但自研的服务相比开源我的项目而言,保护老本较高。 API 网关选型所以在这些痛点之上,雪球外部心愿在不引入过多变量的同时,尽量保障对业务方通明以及最小化改变; 能够将问题在基础设施层面进行对立解决,并且尽量将鉴权服务在本机房实现。综上思考,雪球决定将鉴权服务移至 API 网关进行实现。 基于在业务实际场景中逐步浮现的痛点,雪球基础设施团队开始了针对网关产品的调研。通过外部诉求和目前市场中网关产品的比照,最终抉择了基于 Apache APISIX 进行后续架构的调整与应用。 基于 Apache APISIX 的实际调整后架构 如上图是目前雪球行情双活架构。左侧展现的是在原机房里对应的架构,并没有进行太多改变;右侧展现的则是上云之后基于多 Region 设计的多活架构。 上述架构次要基于 APISIX 进行了如下调整: 将鉴权模块对立调整到代理层,利用 APISIX 进行对立鉴权形式。其中波及到 JWT 类型的能够间接利用 APISIX jwt-auth 插件进行本地鉴权;兼容 OAuth 2.0 模式,利用 APISIX 对立调用雪球用户核心进行解决;对接雪球后端 RPC 服务注册核心,用于 JWT 鉴权失败时应用雪球后端服务来鉴权。利用场景展现在后端服务接入 APISIX 后,次要在网关鉴权和可观测性等层面进行了一些实际。 ...

June 15, 2022 · 2 min · jiezi

关于网关:高性能API网关Kong介绍

作者:天翼云 张帆本文关键词:高性能、API网关、Kong、微服务0.Introduction to Kong API网关是随着微服务(Microservice)概念衰亡的一种架构模式。本来一个宏大的单体利用(All in one)业务零碎被拆分成许多微服务(Microservice)零碎进行独立的保护和部署,服务拆分带来的变动是API的规模成倍增长,API的治理难度也在日益减少,应用API网关公布和治理API逐步成为一种趋势。一般来说,API网关是运行于内部申请与外部服务之间的一个流量入口,实现对外部申请的协定转换、鉴权、流控、参数校验、监控等通用性能。 本文行将介绍的Kong,是一个开源的API gateway和微服务治理的工具,基于Nginx和lua-nginx-module(非凡的OpenResty),Kong具备可插拔的架构,使其功能强大且灵便。2.Key ConceptsService: Kong的一个实体对象,示意了内部的上游API或者微服务Route: Kong的一个实体对象,示意了一种将上游申请映射到上游服务的路由Consumer: Kong的一个实体对象,示意应用API的开发者或者机器,在应用Kong时,一个Consumer仅与Kong交互。Plugin:插件用于是Kong外部将申请转发给上游API前后执行的一系列动作,Kong在其插件库中提供了十分弱小的插件Credential: A certificate object represents a public certificate/private key pair for an SSL certificate.SNI: An SNI object represents a many-to-one mapping of hostnames to a certificate. That is, a certificate object can have many hostnames associated with itUpstream: 上游服务,指代Kong背地的API或者服务,也是客户端申请转发的目标端,The upstream object represents a virtual hostname and can be used to loadbalance incoming requests over multiple services (targets).Target: A target is an ip address/hostname with a port that identifies an instance of a backend service. Every upstream can have many targets, and the targets can be dynamically added. Changes are effectuated on the fly.Admin API -用于治理Kong配置,端点,使用者,插件等的RESTful API端点下图展现了Kong和其余传统架构的区别,能够帮忙咱们了解为什么有Kong: ...

June 2, 2022 · 8 min · jiezi

关于网关:Apache-APISIX-v2141-探索性版本发布进军更多领域

间隔上次 APISIX v2.13 LTS 版本公布曾经有两个多月的工夫,以往每次 APISIX 的小版本公布,都会为大家带来新性能。然而 APISIX v2.14.1 版本公布的性能,将紧跟技术前沿,为大家带来了诸多探索性的新性能,并为 APISIX v3 版本的公布投石问路,欢送大家摸索这些新性能。 接下来咱们先看下 APISIX 反对了哪些探索性的新性能。 基于 WebSocket 的 pubsub 代理框架在 APISIX v2.14.1 版本之前,无论是代理 gRPC 申请还是一般的 HTTP 申请,APISIX 的上游都是对接的应用服务器,无奈满足多元化场景需要。例如用户须要应用其余上游类型(比方 Kafka),就只能通过其余形式实现。然而在 APISIX v2.14.1 版本中,APISIX 新增了一个基于 Websocket 的音讯订阅代理框架,该框架容许客户端通过 APISIX 来订阅指定音讯队列(上游)中的音讯。当初你能够应用 APISIX来订阅 Kafka 中的音讯。 以 Kafka 为例,咱们须要如下配置: curl -X PUT 'http://127.0.0.1:9080/apisix/admin/routes/kafka' \ -H 'X-API-KEY: ${api-key}' \ -H 'Content-Type: application/json' \ -d '{ "uri": "/kafka", "upstream": { "nodes": { "kafka-server1:9092": 1, "kafka-server2:9092": 1, "kafka-server3:9092": 1 }, "type": "none", "scheme": "kafka" }}'上述示例是在路由中增加了一个 Kafka 类型的上游,并蕴含了多个 Broker。 ...

May 31, 2022 · 2 min · jiezi

关于网关:Apache-APISIX-Summit-ASIA-20225月20日开启开源生态探索之旅

点击此处即可报名预约,观看直播! 大会介绍作为微服务生态中的重要一环,API 网关能够做为内部申请与外部服务之间的流量入口,对外对立裸露拜访接口,解决微服务架构带来的接口暴增和难对接、难测试、难治理的问题。作为开源的云原生 API 网关,Apache APISIX 兼具动静、实时、高性能三大劣势,能够帮忙企业疾速、平安地治理南北向和东西向的流量,提供负载平衡、动静上游、灰度公布、精细化路由、限流限速、服务降级、服务熔断、身份认证、可观测性等服务治理性能。 自 2019 年 6 月 6 日开源后,Apache APISIX 便以社区的形式疾速成长,短短两年间,寰球贡献者已冲破 400 位。此外,Apache APISIX 社区也播种了来自寰球开发者的认可。 2022 年 5 月 20-21 日,Apache APISIX 社区将在线举办 Apache APISIX 首届年度盛会——Apache APISIX Summit ASIA 2022。 本次大会邀请了各大开源社区及行业头部企业的顶尖技术专家,围绕【基础架构】、【开源生态】、【利用实际】、【Friends of Apache APISIX】四大主题方向,分享 Apache APISIX 的最新动静、前沿技术、最佳实际以及技术干货。 主会场介绍2022 年 5 月 20 日上午 9:00-11:50,温铭(Apache APISIX PMC 主席)、熊飞(经纬创投合伙人)、吴晟(Apache APISIX PMC 成员,Apache SkyWalking 创始人)、王院生(Apache APISIX PMC 成员)将为大家揭开 Apache APISIX Summit ASIA 2022 的帷幕,围绕开源生态这一话题,分享 Apache APISIX 的当初与将来、开源我的项目与社区生态的关系、开源中的二三事儿。 ...

April 28, 2022 · 1 min · jiezi

关于网关:Traefik为服务添加HTTPS支持

Traefik为服务增加HTTPS反对背景紧接着Traefik学习这篇文章,尝试应用Let's Encrypt为Traefik的服务增加HTTPS反对Let's EncryptLet’s Encrypt 是一家收费、凋谢、自动化的证书颁发机构(CA),为公众的利益而运行。它是一项由 Internet Security Research Group(ISRG)提供的服务。以尽可能对用户敌对的形式收费提供为网站启用 HTTPS(SSL/TLS)所需的数字证书。Traefik的反对创立acme.json文件用来存储证书信息 touch acme.jsonchmod 600 acme.json留神务必设置权限为600,否则会报错traefik Docker Compose配置文件 traefik.yaml: version: '3'services: reverse-proxy: image: traefik restart: always ports: - "80:80" - "443:443" networks: - traefik volumes: - ./traefik.toml:/etc/traefik/traefik.toml - /var/run/docker.sock:/var/run/docker.sock - ./config/:/etc/traefik/config/:ro - ./acme.json:/letsencrypt/acme.json container_name: traefik # 网关健康检查 healthcheck: test: ["CMD-SHELL", "wget -q --spider --proxy off localhost:8080/ping || exit 1"] interval: 3s timeout: 5s# 创立内部网卡 docker network create traefiknetworks: traefik: external: true要害局部是应用volume向容器引入acme.jsontraefik动态配置文件 traefik.toml ...

April 26, 2022 · 1 min · jiezi

关于网关:Traefik监控系统搭建

Traefik监控零碎搭建背景前边的文章Traefik学习中曾经介绍了Traefik的应用,然而如果没有一个可视化的Traefik拜访状态与Acces Log的Dashboard界面的话,对于一个网关来说实际上是不残缺的,这篇文章就来介绍应用Prometheus + Grafana + Promtail+ Loki构建Traefik的监控核心Prometheus是云原生时代事实上的零碎(服务)状态监测规范,通过基于HTTP的pull形式采集时序数据,能够通过服务发现或者动态配置去获取要采集的指标服务器,反对单主节点工作,反对多种可视化图表及仪表盘--在本文中Prometheus用来收集Traefik Metrics数据Grafana是一个开源的度量剖析与可视化套件。 纯Javascript 开发的前端工具,通过拜访库(如InfluxDB、Prometheus),展现自定义报表、显示图表等。Grafana的UI更加灵便,有丰盛的插件,功能强大--在本文中Grafana用来展现来自Prometheus和Loki的数据Promtail是一个日志收集的代理,它会将本地日志的内容发送到一个Loki实例,它通常部署到须要监督应用程序的每台机器/容器上。Promtail次要是用来发现指标、将标签附加到日志流以及将日志推送到Loki--本文中Promtail用来收集Traefik Access LogGrafana Loki是一组能够组成一个功能齐全的日志堆栈组件,与其它日志零碎不同的是,Loki只建设日志标签的索引而不索引原始日志音讯,而是为日志数据设置一组标签,这意味着Loki的经营老本更低,效率也能进步几个数量级,一句话形容下Loki就是like Prometheus, but for logs--本文中Loki用来整合来自Promtail的日志数据Traefik配置对于Traefik的配置,最要害的就是开启Metrics与Access Log的配置,动态配置文件traefik.toml如下 [log] level = "WARN" format = "common" filePath = "/logs/traefik.log"[accessLog] filePath = "/logs/access.log" bufferingSize = 100 format = "json" [accessLog.fields.names] "StartUTC" = "drop" [accessLog.filters] retryAttempts = true minDuration = "10ms"这里只展现日志相干的要害配置StartUTC的设置是为了设置日志应用的时区工夫,配合TZ环境变量应用traefik部署的Docker Compose配置文件traefik.yaml如下: version: '3'services: reverse-proxy: image: traefik restart: always environment: - TZ=Asia/Shanghai ports: - "80:80" - "443:443" networks: - traefik volumes: - ./traefik.toml:/etc/traefik/traefik.toml - /var/run/docker.sock:/var/run/docker.sock - ./config/:/etc/traefik/config/:ro - ./acme.json:/letsencrypt/acme.json - ./logs:/logs/:rw container_name: traefik # 网关健康检查 healthcheck: test: ["CMD-SHELL", "wget -q --spider --proxy off localhost:8080/ping || exit 1"] interval: 3s timeout: 5s# 创立内部网卡 docker network create traefiknetworks: traefik: external: true要害的局部是: ...

April 26, 2022 · 3 min · jiezi

关于网关:Apache-APISIX-存在改写-XREALIP-header-的风险公告CVE202224112

问题形容在 Apache APISIX 2.12.1 之前的版本中(不蕴含 2.12.1 和 2.10.4),启用 Apache APISIX batch-requests 插件之后,会存在改写 X-REAL-IP header 危险。 该危险会导致以下两个问题: 攻击者通过 batch-requests 插件绕过 Apache APISIX 数据面的 IP 限度。如绕过 IP 黑白名单限度。如果用户应用 Apache APISIX 默认配置(启用 Admin API ,应用默认 Admin Key 且没有额定调配治理端口),攻击者能够通过 batch-requests 插件调用 Admin API 。影响版本Apache APISIX 1.3 ~ 2.12.1 之间的所有版本(不蕴含 2.12.1 )Apache APISIX 2.10.0 ~ 2.10.4 LTS 之间的所有版本 (不蕴含 2.10.4)解决方案该问题目前已在 2.12.1 和 2.10.4 版本中失去解决,请尽快更新至相干版本。在受影响的 Apache APISIX 版本中,能够对 conf/config.yaml 和 conf/config-default.yaml 文件显式正文掉 batch-requests,并且重启 Apache APISIX 即可躲避此次危险。破绽详情破绽优先级:高 破绽公开工夫:2022 年 2 月 11 日 CVE 详细信息:https://nvd.nist.gov/vuln/detail/CVE-2022-24112 贡献者简介该破绽由长亭科技在 Real World CTF 中发现,并由 Sauercloud 上报给 Apache 软件基金会。感激各位对 Apache APISIX 社区的奉献。 ...

February 12, 2022 · 1 min · jiezi

关于网关:网关服务免登录免检

背景网关服务的作用有很多,比方负载平衡、路由转发、鉴权等等。最近在做需要时碰到了两类问题,须要网关服务提供一些撑持,用户如何绕过网关鉴权免登录?Api接口如何免检? 网关免登录最近遇到一个需要:买方在平台公布了一个询价单,通过IM客户端将该单的详情以卡片模式发送给卖方,卖方点击该卡片能够跳往对应报价单页面进行报价,买家也能够点击该卡片跳往询价单详情页查看报价状况。因为以上跳转形式是通过IM客户端关上浏览器页面,因而为了用户的体验和效率,心愿跳转过程跳过登录环节。 IM客户端用户和web端用户都是通过公司一账通(SSO)登录的,不同零碎间账户都是互通的,因而在IM客户端唤醒浏览器关上链接时能够将身份信息作为url参数,网关检测到拜访链接上携带身份信息时放行,进行路由转发,具体流程如下: 网关免检在讲如何去实现网关免检时,先来形容一个实在的业务场景:一个车主去维修厂修车,维修厂给车主举荐了很多不同品牌的配件,车主不晓得该抉择哪个品牌的配件,心愿培修厂家可能介绍一下,于是培修厂家就将不同品牌商的介绍信息(H5承载)分享给车主,车主比拟了不同品牌商的优劣时候抉择了其中一款品牌商配件。 下面场景中,车主通过浏览器关上H5页面查看品牌商介绍信息,页面关上后会调用接口获取商家信息,但车主并不是平台用户,是无奈登录的,因而网关须要对H5链接以及接口做免检解决,对其放行。常见的免检解决办法就是在申请url退出免检的要害门路,比方对含有/public的申请门路放行

January 16, 2022 · 1 min · jiezi

关于网关:喜讯Apache-APISIX-Committer-张晋涛当选中国开源先锋-33-人

2022 年 1 月 12 日,「SegmentFault 思否」联结「开源社」推出的《2021 中国开源先锋 33 人》榜单出炉,来自 Apache APISIX 社区的 Committer 张晋涛荣誉入选!对于「2021 中国开源先锋 33 人」评比 SegmentFault 思否作为中国当先的新一代开发者社区,依靠数百万开发者用户数据分析,及各科技企业和集体在国内技术畛域的行为、影响力指标,开展了第三届“中国技术先锋”年度评比,并联结长期耕耘与推广开源文化的「开源社」推出「2021 中国开源先锋 33 人」榜单,心愿通过本份榜单,有更多“幕后英雄”能够被看见。中国开源须要石破天惊的贡献者,也须要一呼百应的“带货网红”。 所谓先锋,不仅限于开发者,奉献代码的开发者、开源我的项目发起者、开源布道师、开源治理专家与推动者、关注开源的投资人、开源社区运营者等等,都是开源生态倒退路线上不可或缺的角色。本次评比历时 1 个月,最终由 SegmentFault 思否和开源社组成的主编团,和局部 2020 中国开源先锋组成的评审团,独特评比产生 33 位「先锋人物」。 Apache APISIX 社区成员荣誉入选!来自 Apache APISIX 社区的 Committer 张晋涛作为 「开源社区中冉冉升起的新星」,凭借在开源社区奉献代码、在开发者社区奉献高质量内容、在各大技术会议上奉献优质演讲等,荣誉入选「2021 中国开源先锋 33 人」! 张晋涛,Apache APISIX committer, Kubernetes ingress-nginx reviewer,containerd/Docker/Helm/Kubernetes/KIND 等泛滥开源我的项目 contributor,『K8S 生态周报』的维护者。写有 《Kubernetes 上手实际》和 《Docker 外围常识必知必会》等专栏。Apache APISIX 从开源第一天就以社区的形式疾速成长。张晋涛作为 Apache APISIX 社区的 Committer,不仅仅在本社区沉闷,继续以优质技术内容回馈社区,还积极参与到其余社区的开源我的项目中。在开源圈放弃高度沉闷,为中国开源倒退做出了本人的奉献,是当之无愧的「开源先锋」。 感激张晋涛在过来的一年为中国开源畛域做出的奉献。同时,也心愿泛滥想要参加开源、奉献开源的敌人能够受到启发:开源不仅仅是凋谢源代码,更是凋谢的社区、凋谢的心态,社区间单干互助,一起合力开发出更好用的开源产品。 将来,Apache APISIX 将持续携手社区小伙伴为中国开源做出奉献,率领更多的开发者一起建设开源生态,在开源方面发明更多价值。

January 14, 2022 · 1 min · jiezi

关于网关:重磅功能Apache-APISIX-拥抱-WASM-生态

在 Apache APISIX 版本(2.11.0)中,咱们新增了对于 WASM 的反对!当初开发者除了能够应用 Lua、Java、Go、Python、JavaScript 等多种编程语言开发 APISIX 的插件之外,也能够用 WASM 来开发插件。 WASM 全称 WebAssembly,与上述具体编程语言运行时的不同之处在于,它是一套字节码规范,专门设计成能够在宿主环境中嵌套应用。 如果某种编程语言提供编译成 WASM 字节码的性能,就能够把该语言的利用编译成 WASM 字节码,运行在某个反对 WASM 的宿主环境中。 听起来,是不是只有某个宿主环境反对 WASM,就能像操作系统一样运行任意利用呢? 但其实这里有个限度,就像操作系统须要实现特定规范的 syscall 一样,要想运行特定的利用,也须要实现该利用所需的 API。 以 JavaScript 为例,尽管同样是 JavaScript 代码,然而针对浏览器写的 JS 模块不能间接用在 npm 包外面,因为两个的 API 不一样。 所以仅仅把 WASM 放到 Apache APISIX 外面并行不通,要想让开发者在 Apache APISIX 上运行 WASM,咱们还须要提供一套专门的 API。 为什么抉择 Proxy WASM对于如何提供这套 API,咱们已经衡量过两套计划: 参考 lua-nginx-module 的接口,实现对应的 WASM 版 API实现 Proxy WASM 这一套规范Proxy WASM 是 Envoy 的 WASM API 规范。所以上述问题其实等价于,咱们是本人搞一套 API 规范还是复用 Envoy 已有规范呢? ...

January 11, 2022 · 2 min · jiezi

关于网关:如何在-K8s-集群中使用-Nocalhost-开发-APISIX-Ingress

环境筹备筹备一个可用的 Kubernetes 集群。可应用任意领有命名空间管理权限的 Kubernetes 集群本地已装置好 Helm v3.0+集群中已装置好 Apache APISIXGoLand IDE 2020.03+ (本文利用的是 2021.2 版本)装置 Nocalhost JetBrains plugin 插件装置 Go 1.13 或更高版本部署 Apache APISIX Ingress Controller在 GoLand 中通过 Nocalhost 部署 Apache APISIX Ingress Controller,操作如下: 在 GoLand 中关上 Nocalhost 插件抉择将要部署 APISIX Ingress Controller 的命名空间右键点击选定的命名空间,抉择 Deploy Application ,而后抉择 Helm Repo 作为装置办法在上面的对话框中:在 Name 中输出: apisix-ingress-controller在 Chart URL 中输出: https://charts.apiseven.com 部署实现后,咱们通过在 IDE 内启用端口转发来测试 apisix-ingress-controller : 在 Nocalhost 插件的 Workloads 中找到 apisix-ingress-controller ,右键点击并抉择 Port Forward增加端口转发 8080:8080在本地拜访 http://127.0.0.1:8080/healthz 并查看后果 ...

December 23, 2021 · 1 min · jiezi

关于网关:如何与-Dapr-集成打造-Apache-APISIX-网关控制器

实质上,Apache APISIX 控制器将配置雷同规范 Dapr annotations 以注入 daprd sidecar。通过公开这个 sidecar,将容许内部应用程序与集群中启用 Dapr 的应用程序进行通信。 下图为理论我的项目中的架构流程: 根本我的项目概览Apache APISIX Ingress在 K8s 生态中,Ingress 作为示意 K8s 流量入口的一种资源,想要让其失效,就须要有一个 Ingress Controller 去监听 K8s 中的 Ingress 资源,并对这些资源进行相应规定的解析和理论承载流量。在当下趋势中,像 Kubernetes Ingress Nginx 就是应用最宽泛的 Ingress Controller 实现。 而 APISIX Ingress 则是另一种 Ingress Controller 的实现。跟 Kubernetes Ingress Nginx 的区别次要在于 APISIX Ingress 是以 Apache APISIX 作为理论承载业务流量的数据面。如下图所示,当用户申请到具体的某一个服务/API/网页时,通过内部代理将整个业务流量/用户申请传输到 K8s 集群,而后通过 APISIX Ingress 进行后续解决。 从上图能够看到,APISIX Ingress 分成了两局部。一部分是 APISIX Ingress Controller,作为管制面它将实现配置管理与散发。另一部分 APISIX Proxy Pod 负责承载业务流量,它是通过 CRD(Custom Resource Definitions) 的形式实现的。Apache APISIX Ingress 除了反对自定义资源外,还反对原生的 K8s Ingress 资源。 ...

November 25, 2021 · 2 min · jiezi

关于网关:Apache-APISIX-Ingress-为何成为又拍云打造容器网关的新选择

我的项目背景介绍目前市面上可执行 Ingress 的产品我的项目逐步丰盛了起来,可抉择的范畴也扩充了很多。这些产品依照架构大略可分为两类,一类像 K8s Ingress、Apache APISIX Ingress,他们是基于 Nginx、OpenResty 等传统代理器,应用 K8s-Client 和 Golang 去做 Controller。还有一类新兴的用 Golang 语言去实现代理和控制器性能,比方 Traefik。 又拍云最开始包含当初的大部分业务仍在应用 Ingress-Nginx,整体架构如下。 上层为数据面 OpenResty。下层 Controller 次要是监听 APIServer 的资源变动,并生成 nginx.conf 配置文件,而后 Reload OpenResty。如果 POD IP 发生变化,可间接通过 HTTP 接口传输给 OpenResty Lua 代码去实现上游 Upstream node 替换。 Ingress-Nginx 的扩大能力次要通过 Annotations 去实现,配置文件自身的语法和路由规定都比较简单。能够依照需要进行相干指令配置,同时也反对可拓展 Lua 插件,进步了定制化性能的可操作性。 但 Ingress-Nginx 它也有一些毛病,比方: 开发插件时组件依赖简单,移植性差语义能力弱任何一条 Ingress 的批改都须要 Reload,对长链接不敌对在保护现有逻辑时,上述问题造成了肯定水平的困扰,所以咱们开始寻找相干容器网关替代品。 调研阶段在代替 Ingress-Nginx 的抉择中,咱们次要考量了 Traefik 和 Apache APISIX-Ingress。 Traefik 是云原生模式,配置文件极其简略,采纳分布式配置,同时反对多种主动配置发现。不仅反对 K8s、etcd,Golang 的生态语言反对比拟好,且开发成本较低,迭代和测试能力较好。然而在其余层面略显有余,比方: 扩大能力弱不反对 Reload性能和性能上不如 Nginx(尽管耗费也较低)它不像 Nginx 有丰盛的插件和指令,通过减少一条指令即可解决一个问题,在线上部署时,可能还需在 Traefik 前搭配一个 Nginx。 ...

November 18, 2021 · 2 min · jiezi

关于网关:短短-146-天就成为-Apache-APISIX-Committer我是怎么做到的

每个人的毕生中都会经验许许多多的第一次,或惊喜,或搞笑,或打动,或悲伤…… 不过在我看来,无论经验过的是什么,这些第一次会形成你残缺而丰盛的毕生,并帮忙你看到这个世界更多的和煦和美妙。等你老了,来到职场享受生存了,甚至躺在轮椅上无奈行走的时候,你闭起双眼回忆起这些经验,它的宝贵就如一壶百年老酒,细细品味,才晓得这才是佳酿。 2000 年初,我在书房里搞了一个通宵,第一次勉强用一段歪歪扭扭的 ASP 代码与数据库连贯,并把 “hello world” 存进了数据库。 …… 2021 年 4 月,我放弃了大厂的招纳,并舍弃了一些敌人的邀请,第一次迈入了开源畛域的门槛。 2021 年 9 月,我成为了 Apache APISIX 有史以来第一个非代码奉献的 Committer。 开源到底是什么有句话我常挂在嘴边:“你的人生之所以精彩,是因为你永远猜不到终局,更猜不到在下一个阶段是谁成全了谁”。人这种生物,天生对未知的事物就容易产生好奇,但却又有些胆小。 置信技术从业者们对 “开源” 二字肯定不会生疏,但第一印象根本是 “开源?不就是收费吗?白嫖?”,或者什么基金会,什么社区,什么自在平等,反正看上去都神叨叨的,满嘴跑的都仿佛是富裕正义感的名词。 在这种刻板印象的催化下,导致有不少人坚信开源代表着「正义与自在」,只有一提起什么 License 就会联想到 Oracle、微软等企业,而且还会跟巨额收款分割起来,所以很多人都认为「闭源是盘剥与邪恶的化身」,但现实情况真是如此吗? 为了加深大家的了解,尤其是一些技术圈外的敌人,我顺便联合时间轴在维基百科中搜寻了一下。 开源的倒退历程60、70 年代时,整个开源软件并不像当初具备很高的流通性,大部分应用畛域集中在军工单位,并大多采纳我的项目制的形式进行。 直到 1976 年 2 月 3 日,比尔·盖茨给电脑爱好者们写了一封公开信,埋怨未经受权应用 Altair BASIC 的状况太广泛,导致新成立的微软公司回报甚微。这封信相当有名,被看作是软件通过商业受权获取支出的真正开始,解决了软件流通性的问题。 而 License 模式的外围是解决所有权问题,不论集体也好,企业也好,我通过本人的智慧或资源投入制作了一个软件,应如何将这个软件在市场上正当、非法的进行流通呢?取得许可证的人或单位,你只有使用权,不领有所有权,而在这之前,无论你给谁做我的项目,我的项目所产出的软件所有权,都将归属这个我的项目,因为这是个合同。 说到这里,兴许有人会问,那么许可证模式与开源模式所提倡的主旨是不是南辕北辙? 这相似《黑客帝国》中的场景,有黑就有白,有正就有反,在 Richard Stallman(GUN Emacs 之父)这帮人看来并不是这样,他们想的更加久远。他感觉人类的成绩,不应该被任何一家机构或集体垄断,基于这个出发点,他最终建设了 GNU 和自由软件基金会。 到 1983 年,Richard Stallman 在 net.unix-wizards 新闻组上公开发动 GNU 打算,发表创立一套齐全自在的操作系统,并附带一份《GNU 宣言》。在该宣言中,Stallman 宣称发动该打算的一个重要理由是要「重现当年软件界单干互助的团结精力」。 ...

October 28, 2021 · 2 min · jiezi

关于网关:Apache-APISIX-社区周报-|-2021-913930

导 语Apache APISIX 从开源第一天就以社区形式成长,迅速成为全世界最沉闷的开源 API 网关我的项目。这些成就,离不开社区小伙伴们的共同奋斗。 “独行者速,众行者远”。Apache APISIX 社区周报心愿能够帮忙社区小伙伴们更好地把握 Apache APISIX 社区的每周停顿,不便大家参加到 Apache APISIX 社区中来。 咱们还整顿了一些适宜新来社区的小伙伴们加入的 Issue !感兴趣的同学们,走过路过不要错过! 贡献者统计 Good First IssueIssue #5080 链接: https://github.com/apache/api... 问题形容:之前上游服务应用 IP 认证,理论的客户端 IP 是从 x-forwarded-for 申请头中获取的。当初须要改成网关 HMAC 认证,所以须要通过网关屏蔽上游 IP 认证。尝试通过代理重写插件批改 x-forwarded-for,然而没有失效: Issue #5108 链接: https://github.com/apache/api... 问题形容:如下,当在路由上启用申请验证插件:"delete" curl http://127.0.0.1:9080/apisix/admin/routes/35 -H 'X-API-KEY: xxxxxxxxxxxxxxxxxxx' -X PUT -d '{ "uri":"/products/create", "plugins":{ "request-validation":{ "body_schema":{ "type":"object", "required":[ "productName", "price" ], "properties":{ "productName":{ "type":"string" }, "price":{ "type":"number" } } } } }, "upstream":{ "service_name":"PRODUCTSSERVICE", "type":"roundrobin", "discovery_type":"eureka" }}'应用以下命令对其进行测试时, ...

October 15, 2021 · 1 min · jiezi

关于网关:Apache-APISIX-社区周报-|-2021-830912

导语Apache APISIX 从开源第一天就以社区形式成长,迅速成为全世界最沉闷的开源 API 网关我的项目。这些成就,离不开社区小伙伴们的共同奋斗。 “独行者速,众行者远”。Apache APISIX 社区周报心愿能够帮忙社区小伙伴们更好地把握 Apache APISIX 社区的每周停顿,不便大家参加到 Apache APISIX 社区中来。 咱们还整顿了一些适宜新来社区的小伙伴们加入的 issue !感兴趣的同学们,走过路过不要错过! 贡献者统计 Good first issueIssue #4906 链接:https://github.com/apache/api... 问题形容:在启用被动健康检查性能时,用两个外部域名并减少 pass_host:node 进行测试 Apache APISIX 的负载平衡时,发现仍会路由到故障主机。  for i in $(seq 1 1000); do curl  -H "Host: httpbin.org" ${APISIX_GATEWAY_URL}  ; done appleapple<html><head><title>503 Service Temporarily Unavailable</title></head><body><center><h1>503 Service Temporarily Unavailable</h1></center><hr><center>nginx/1.17.7</center></body></html>appleappleapple<html><head><title>503 Service Temporarily Unavailable</title></head><body><center><h1>503 Service Temporarily Unavailable</h1></center><hr><center>nginx/1.17.7</center></body></html>appleappleappleappleappleIssue #4945 链接:https://github.com/apache/api... 问题形容:依据相干领导文章,尝试在 M1 零碎的 Macbook 上下载 Apache APISIX 2.9 版本时遇到问题。提醒如下: lualogging 1.5.2-1 depends on luasocket (3.0rc1-2 installed)lualogging 1.5.2-1 is now installed in /Users/juzhiyuan/workspace/apisix-2.9/apache-apisix-2.9-src/deps (license: MIT/X11)casbin 1.26.0-1 depends on lrexlib-pcre >= 2.9.1 (not installed)Installing https://luarocks.org/lrexlib-pcre-2.9.1-1.src.rockError: Failed installing dependency: https://luarocks.org/casbin-1.26.0-1.rockspec - Failed installing dependency: https://luarocks.org/lrexlib-pcre-2.9.1-1.src.rock - Could not find header file for PCRE  No file pcre.h in /usr/local/include  No file pcre.h in /usr/include  No file pcre.h in /includeYou may have to install PCRE in your system and/or pass PCRE_DIR or PCRE_INCDIR to the luarocks command.Example: luarocks install lrexlib-pcre PCRE_DIR=/usr/localmake: *** [deps] Error 1近期性能个性亮点referer-restriction 反对配置 blacklist 和 message 相干 PR:https://github.com/apache/api... 贡献者:okaybasenode\_listen 和 admin\_listen 反对更丰盛的配置模式 相干 PR:https://github.com/apache/api... https://github.com/apache/api... 贡献者:wayne-chengadmin-api 反对返回 stream 类型的插件信息 相干 PR:https://github.com/apache/api... 贡献者:spacewander反对配置后退 SNI 相干 PR:https://github.com/apache/api... 贡献者:spacewanderproxy-mirror 反对按比例镜像申请 相干 PR:https://github.com/apache/api... 贡献者:okaybaseControl API 新增 dump 路由配置 相干 PR:https://github.com/apache/api... 贡献者:Zheaolidashboard反对Service Discovery 配置 相干PR:https://github.com/apache/api... 贡献者:bzp2010dashboard Route 高级配置条件中反对内置参数配置 相干PR:https://github.com/apache/api... 贡献者:lookbrookdashboard  Upstream 反对 Keepalive Pool 配置 相干PR:https://github.com/apache/api... 贡献者:bzp2010Apache APISIX 的我的项目官网和 Github 上的 issue 上曾经积攒了比拟丰盛的文档教程和应用教训,如果您遇到问题能够翻阅文档,用关键词在 issue 中搜寻,也能够参加 issue 上的探讨,提出本人的想法和实践经验。 ...

September 16, 2021 · 1 min · jiezi

关于网关:从保证业务不中断看网关的前世今生

摘要:当初大家在谈“分布式”、“微服务”、“云原生”这些概念时,更多在谈撑持“软件服务”的弹性伸缩与负载平衡。API Gateway作为其第一道关卡以及其重要组成组件,咱们来看看他的倒退历程、现状及将来的方向。API网关作为古代分布式、微服务、云原生零碎中的一个重要组成部分,也作为一项重要的探讨主题,咱也聊聊负载平衡及API Gateway的现状。 当初大家在谈“分布式”、“微服务”、“云原生”这些概念时,除了“软件服务”性能自身,更多的是在谈如何让服务能够更好的扩大来反对大规模的利用。负载平衡及API网关是作为其第一道关卡以及其重要组成组件,咱们来看看他的倒退历程、现状及将来的方向。 负载平衡谈到网关,不得不谈负载平衡,通常负载平衡有服务器负载平衡和客户端负载平衡(例如Spring Cloud Ribbon & Eureka)两种不同的形式。对于非REST且对实时性要求较高的服务来说,客户端负载平衡是一种罕用的抉择,比方王者光荣、英雄联盟这种游戏来说,进入游戏的各种日常流动,都是基于REST服务的,而组队进行较量时,通常都是非REST服务。还有在线合作的产品,如Welink的IM/Presence性能,其服务端是能够做成REST服务,而Welink Meeting这种实时音视频会议(real-time colloration),RESE服务不能满足其实时性要求。大都是采纳客户端负载平衡的形式,根本过程如下: 1、负载平衡网关与服务器之间的注册或发现机制。2、客户端向网关申请会议服务器列表,这里服务器会有一些业务逻辑从而计算出一些服务器列表返回给客户端。3、客户端拿到服务器列表会向服务器发送探测报文,依据探测报文的响应工夫(客户端与服务器之间网络情况),以及服务器的负载等因素来决定抉择哪一个服务器。4、客户端与服务器通过约定的协定建设业务连贯。5、如果客户端或者服务器任何一段出现异常,客户端会从新走2-4的流程复原业务连贯。 从上述能够看出客户负载平衡的会有一个绝对简单的过程,然而一旦建设连贯,其性能肯定是最优的。不过客户端负载平衡无奈保障服务器REST服务化,一旦服务器产生故障,会有短暂的服务中断。然而该计划实用于一些实时性要求较高的一些利用(如上述说到的一些利用)。而对于REST的服务来说,采纳L4负载平衡(F5、LVS、nginx、haproxy等)/L7负载平衡(haproxy、nginx、apache、Mysql proxy等)是通用的办法。这次Arch Summit,局部厂商介绍其采纳4层负载平衡计划。咱们来大抵看一下整个分布式系统负载平衡的整体架构及倒退历程。 从负载平衡的倒退来看,依据其利用规模其演进过程大抵如下: API Gateway的现状 随着微服务的风行,API Getway失去蓬勃的倒退。对于API Gateway本职工作是承当音讯散发工作,提供给客户对立的API入口。通常有2种形式:Single API Gateway和Backend for Frontend API Gateway。有沒有第三种模式呢?我之前做的一个产品,其网关根本架构如下: 1、客户端有登录的要求,在登录认证的response里,蕴含了不同服务的api的url列表。2、客户端在不同的api申请是,应用对应的api url,这样客户端来实现了大部分api的散发工作。3、这时候API 网关的次要工作其实曾经不是最后的API转发的性能了。而是为了简化后端服务,实现后端服务的一些公共性能。4、甚至在这种场景下,能够没有API网关,API能够间接面对应用服务,再由应用服务来调度微服务进行业务解决。 回到的API gateway自身,其最外围设计理念是保证数据面的业务不中断。因为对接 API 网关的服务是多样的,客户 API 跟利用的设计不可控,你很难能要求每个接入的服务以及客户端都具备容错能力。这就要求网关尽量保障能失常解决每个申请,且满足较高的 SLA,当初业界的 API 网关的支流应用Nginx系,次要思考如下: 反对热重启数据面的组件降级是一个高风险动作, 一旦出现异常就可能导致连贯中断,零碎异样, 除非你的前端 LB(负载平衡)能具备疾速排水的能力,当然即使如此,还是可能导致正在解决的申请被强制中断。所以数据面的热重启十分要害。反对订阅式动静路由API 路由变动绝对频繁,及时性也要求比拟高,如果采纳定期同步计划,一次性同步几万条的数据会拖慢你的零碎,因而减少一个订阅式的路由服务中心十分要害,咱们能够疾速订阅 ETCD 中的路由数据并实时失效。而且只拿增量数据性能压力不会太大。反对插件化治理Nginx 在插件方面提供了丰盛的生态。不同的 API,不同的用户所须要的解决流程不完全一致,如果每个申请过去都依照雷同流程解决,必然带来相干的冗余操作。插件化治理能够在肯定水平上晋升性能,还能保障在降级过程中能疾速增加解决链。高性能的转发能力API 网关个别工作在多后端 API 反向代理模式,很多自研的 API 网关在性能上容易呈现瓶颈,因而 nginx 优异的性能和高效的流量吞吐是其外围竞争力。无状态可横向扩大API 网关承载的是整个零碎所有申请的汇合,须要依据业务规模进行弹性伸缩,采纳服务中心配合 Nginx 配置管理能够疾速增删已有的集群,并同步到 LVS,实现疾速的横向扩大能力。随着当初的零碎的越来越简单,很多服务模块除了解决本身业务之外,还有承当一些非业务的职责,如认证和受权,限流,缓存,日志,监控,重试,熔断等。这样涌现了一批开源的API网关实现。 Tyk:Tyk是一个开源的、轻量级的、疾速可伸缩的 API 网关,反对配额和速度限制,反对认证和数据分析,反对多用户多组织,提供全 RESTful API(go语言)。Kong:Kong 能够认为是一个 OpenResty 应用程序,而OpenResty 运行在 Nginx 之上,应用 Lua 扩大了 Nginx。(Kong = OpenResty + Nginx + Lua)Orange:Orange 是一个基于 OpenResty 的 API Gateway,提供API及自定义规定的监控和治理,如拜访统计、流量切分、API重定向、API鉴权、WEB防火墙等性能。(腾讯在用)Netflix Zuul:Zuul是一种提供动静路由、监督、弹性、安全性等性能的边缘服务。Zuul是Netflix出品的一个基于JVM路由和服务端的负载均衡器。(Spring Cloud)Ambassador:Ambassador 是一个开源的微服务 API 网关,建设在 Envoy 代理之上,为用户的多个团队疾速公布,监控和更新提供反对,反对解决 Kubernetes ingress controller 和负载平衡等性能,能够与 Istio 无缝集成。(Kubernetes-Native)其余…(例如:apiaxle: Nodejs 实现的一个 API 网关; api-umbrella: Ruby 实现的一个 API 网关。)除了上述性能,随着API网关服务承当了越来越多的职责,其性能瓶颈也越显突出。这次ArchSummit一些公司展现了一些本人的特色性能,还有在产品演变中,本人在架构上做了一些优化,次要有: ...

September 2, 2021 · 1 min · jiezi

关于网关:云小课-网络知识一箩筐NAT网关让IP地址华丽变身轻松实现内外网互通

阅识风波是华为云信息大咖,善于将简单信息多元化出现,其出品的一张图(云图说)、深入浅出的博文(云小课) 或短视频(云视厅)总有一款能让您疾速上手华为云。更多精彩内容请单击此处。 摘要: 网络常识一箩筐:收集分享网络基础知识,轻松把握华为云网络服务。本篇分享NAT网关的相干常识,助您疾速了解。本文分享自华为云社区《【云小课】根底服务第71课 网络常识一箩筐——NAT网关,让IP地址富丽变身,轻松实现内外网互通》,原文作者:阅识风波 在咱们应用华为云服务时,常常会用到NAT网关。那么NAT网关到底是什么呢?NAT网关有什么作用呢? 本节云小课为您解惑NAT网关,供大家学习参考~ 网关:网关(Gateway)又称网间连接器、协定转换器。网关就是一个网络连接到另一个网络的“关口”,也就是网络关卡。网关在网络层以上实现网络互连,是简单的网络互连设施,仅用于两个高层协定不同的网络互连。网关既能够用于广域网互连,也能够用于局域网互连。 网关是一种充当转换重任的计算机系统或设施。网关是一个翻译器,网关对收到的信息要从新打包,以适应目标零碎的需要。网关同时也能够提供过滤和平安性能。网关就像咱们居住小区的大门,小区就是一个局域网,住户就像局域网中的主机。在小区里的住户很不便的就能够送货色到别的住户家,不须要出大门,相应的同一局域网下的主机发送数据包不须要网关;然而想要送物品去其余小区住户家的时候就必须通过本小区的大门,而后通过目标住户小区大门的查验,将物品送达。在网络中也是类似的,假如网络A和网络B分属于不同局域网,网络A里的主机要给网络B里的主机发送数据,网络A中的主机发现数据包的目标主机不在本地网络中,就把数据包转发给它本人的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。网络B中主机向网络A中主机发送数据过程也是如此。示意图如下: 简略的了解连贯两个不同的网络的设施都能够叫网关设施,网关的作用就是实现两个网络之间进行通信与管制。网关设施能够是交互机、路由器、启用了路由协定的服务器、代理服务器、防火墙等。网关也是一个网络通向其余网络的IP地址。 默认网关: 就像一个小区会有多个大门一样,一台主机能够有多个网关。默认网关就是一台主机如果找不到可用的网关,就把数据包发给默认指定的网关,由这个网关来解决数据包。 NAT:在Windows环境下,关上你的命令行输出“ipconfig”查问你的IP地址,如下图: 关上搜索引擎,输出“IP地址查问”,查问你的ip地址,如下图: 是不是发现了一件奇怪的事件,两种形式查问的IP地址怎么不一样?然而咱们又常常说每个主机只有一个IP,这个IP是他的身份标识,这齐全矛盾啊。 其实并不矛盾,这里咱们要用到公网IP和私网IP这两个概念,应用命令行查问到的是咱们PC的私网地址,应用搜索引擎查到的是公网地址。私网地址只能在局域网中应用,不同的局域网能够应用雷同的私网地址,私网地址是不能呈现在互联网上的。那么私网地址是如何拜访互联网呢? NAT(Network Address Translation,网络地址转换)闪亮退场,NAT提供私网IP地址和公网IP地址进行相互转换的性能,就是替换IP报文头部的地址信息。对于有Internet拜访需要而外部又应用公有IP地址的网络,就要在网络的进口地位部署NAT网关,在报文来到私网进入Internet时,将源IP替换为公网地址。一个对外的拜访申请在达到指标当前,体现为由网络进口设施发动,因而被申请的服务端将响应由Internet发回进口网关。进口网关再将目标地址替换为私网的源主机地址,发回外部。这样一次由私网主机向公网服务端的申请和响应就实现了。 NAT有三种类型:动态NAT(Static NAT)、动静地址NAT(Pooled NAT)、网络地址端口转换NAPT(Port-Level NAT)。 动态NAT设置起来最为简略和最容易实现的一种,公有网络中的每个主机ip地址都被永恒映射成一个公网IP地址,造成一对一的固定对应映射关系。 动静地址NAT是指不建设私网IP地址和公网IP地址的一对一的固定对应关系。而通过共享NAT地址池的IP地址动静建设NAT的映射关系。当内网主机须要进行NAT地址转换时,路由器会在NAT地址池中抉择闲暇的公网IP地址进行映射,每条映射记录是动静建设的,在连贯终止时也被发出。 网络地址端口转换NAPT则是将IP地址和端口号一起进行转换,把泛滥私网IP地址映射到一个公网IP地址的不同端口上,私网内的泛滥主机应用同一个公网IP同时与公网通信。 很形象?看一看上面的图解。 主机A(192.168.1.20)和主机B(192.168.1.21)同时与互联网服务器(120.222.223.10)进行通信,并且两个主机的本地端口都是1030。两个主机的公有IP地址都通过NAPT转换为公网IP:178.20.1.168,然而调配不同的端口号进行辨别。生成一个NAPT转换表,正确的转换地址和端口的组合,实现应用公有IP的主机A和B同时与互联网服务器进行通信。 NAT网关:NAT网关(NAT Gateway)顾名思义就是网关和NAT合并起来的产物,应用地址转换的性能联通不同网络。华为云提供NAT网关服务,为虚构公有云内的云主机(弹性云服务器云主机、裸金属服务器物理机、云桌面)或者通过云专线/VPN接入虚构公有云的本地数据中心的服务器,提供最高10Gbit/s能力的网络地址转换服务,使多个云主机能够共享弹性公网IP拜访Internet或使云主机提供互联网服务。如下图所示: NAT网关分为SNAT和DNAT两个性能。 SNAT性能通过绑定弹性公网IP,实现公有IP向私有IP的转换,可实现VPC内跨可用区的多个云主机共享弹性公网IP,平安,高效的拜访互联网。 DNAT性能绑定弹性公网IP,可通过IP映射或端口映射两种形式,实现VPC内跨可用区的多个云主机共享弹性公网IP,为互联网提供服务。 戳这里理解更多华为云NAT网关服务常识,助您业务上云。 有的小伙伴会问,从私网拜访公网华为云NAT网关服务能够办到,然而私网想拜访私网呢? 华为云不会让您悲观,华为云NAT网关服务提供私网NAT网关(Private NAT Gateway),满足您的须要。私网NAT网关可能为虚构公有云内的云主机(弹性云服务器、裸金属服务器、云桌面)提供网络地址转换服务,使多个云主机能够共享私网IP拜访用户本地数据中心(IDC)或其余虚构公有云,同时,也反对云主机面向私网提供服务。 私网NAT网关反对大小网段灵便组网,IP网段可重叠,业务零革新,可升高企业上云的老本和危险。 点击关注,第一工夫理解华为云陈腐技术~

August 13, 2021 · 1 min · jiezi

关于网关:8-月-21-日-Apache-APISIX-Meetup-上海站欢迎报名参加

本次 Meetup 由 API7.AI 发动,并邀请爱奇艺、地面云汇等合作伙伴独特为大家出现。AApache APISIX PMC 成员、贡献者、社区技术专家汇聚一堂,独特探讨 Apache APISIX 社区倒退、行业实际等话题。工夫:2021 年 8 月 21 日 13:30 地点:上海市黄浦区中区广场 6 楼静和岛二期 加入本次 Meetup,你能够独特探讨 Apache APISIX 社区的前世今生听爱奇艺科学家讲述,爱奇艺是如何应用 Apache APISIX 撑持起千万级调用量的服务地面云汇是如何在应用 Apache APISIX 时兼顾用户体验、整洁架构与数据主权理解集中式身份认证的长处以及如何在 APISIX 上进行集中式身份认证如果你感兴趣的话,千万不要错过,扫描流动海报二维码报名吧! tips:疫情防控不放松,咱们将会管制现场流动规模,名额有限,报名从速! 流动安顿 周边福利加入 Meetup,与讲师互动,有机会取得 Apache APISIX 最新周边:超大鼠标垫、粗劣马克杯、Apache APISIX 徽章、定制雨伞。 参加形式现场报名扫描上方流动海报二维码或点击「浏览原文」即可报名! 线上直播如果不能到现场加入 Meetup,关注 Apache APISIX 视频号观看直播。 入群交换欢送关注 Apache APISIX 公众号,在后盾回复关键字“上海”,退出 Apache APISIX 上海交换群。 对于 Apache APISIXApache APISIX 是一个动静、实时、高性能的开源 API 网关,提供负载平衡、动静上游、灰度公布、服务熔断、身份认证、可观测性等丰盛的流量治理性能。Apache APISIX 能够帮忙企业疾速、平安的解决 API 和微服务流量,包含网关、Kubernetes Ingress 和服务网格等。 ...

August 12, 2021 · 1 min · jiezi

关于网关:舍弃Kong和NginxApache-APISIX-在趣链科技-BaaS-平台的落地实践

本文介绍了 Apache APISIX 在趣链科技 BaaS 平台中的落地实际状况,以及趣链科技在泛滥网关利用中抉择 Apache APISIX 的起因。业务背景BaaS(Blockchain as a Service),中文为“区块链即服务”,是指将区块链框架嵌入云计算平台,利用云服务基础设施的部署和治理劣势,为开发者提供便捷、高性能的区块链生态环境和生态配套服务,反对开发者的业务拓展及经营反对的区块链开放平台。 通常状况下,一套残缺的 BaaS 解决方案包含设施接入、访问控制、服务监控和区块链平台四个次要环节。 通过 BaaS 能够疾速灵便地搭建区块链网络,对于企业来说,有了 BaaS 平台就可能对区块链业务进行对立的治理。 置信有不少敌人接触过以太坊下面的合约代码,通过 BaaS 平台,咱们可能很轻松地在 IDE 上编写智能合约,而后把它部署到咱们的创立进去的区块链网络上,最初供下层的服务调用区块链相干的合约来进行业务的流转。 因为链的节点十分多,少则几十个,多则上千个,如果没有 BaaS 平台的反对,咱们很难监控和保护链的运行。通过应用 BaaS 平台,用户不仅可能节约老本,而且能够更加便捷地治理区块链,晋升整个零碎的安全系数。 趣链科技 BaaS 产品的架构总共分为四层,别离为资源层、区块链底层、区块链服务层和应用层。 当初咱们对 Baas 平台有了初步的理解,上面咱们来看看 Apache APISIX 在 BaaS 零碎上的应用场景与播种。 Apache APISIX 的应用场景场景 1:在 BaaS 零碎上的落地实际 从这张图中能够看到,趣链科技 BaaS 平台的架构不仅是微服务化的,而且分为两层,别离是业务接入层和外围服务层。 BFF(Backend For Frontend) 个别对着前端,通过 HTTP 接入。外围服务个别是通过相似 Dubbo 、ETCD 等服务注册,最初应用 gRPC 来拜访。 也就是说,趣链科技的 BaaS 平台前端连贯的都是 BFF 模块,而后 BFF 模块再去连贯前面的微服务模块。BFF 的作用次要就是做业务聚合、格局适配,并把最终的后果数据给到前端。 ...

August 11, 2021 · 2 min · jiezi

关于网关:如何利用-Apache-APISX-提升-Nginx-的可观测性

如何利用 Apache APISX 晋升 Nginx 的可观测性"可观测性"是一种度量伎俩,不便把握基础设施、零碎平台或者应用程序的运行状况。常见的伎俩是收集 metrics、logging 和 tracing 及 events 数据,能够帮忙开发/运维人员检测、考察、预警和纠正零碎问题。本文将从 Nginx 可观测性、Apache APISIX 与 Nginx 的关系、Apache APISIX 可观测性,以及联合 Apache SkyWalking 进一步晋升可观测性这些方面分享对于可观测性的计划与实际。 Nginx 的可观测性 1、Nginx 常见监控形式Nginx 在肯定水平上可能做到可观测,以下列举出 Nginx 的常见监控形式: ngx_http_stub_status_module。VTS module + [exporter] + prometheus + grafana。(如果 Nginx 版本比拟低,须要引入 exporter )Nginx Amplify SaaS。 ngx_http_stub_status_modulengx_http_stub_status_module 次要收集实例级别的统计信息。 VTS moduleVTS module 有三个比拟显著的毛病。 装置简单 尽管 VTS module 可能采集指标,采集的指标类型也比拟多,然而它的装置比较复杂。如果想要采纳 VTS module,须要从新编译 Nginx,在编译 Nginx 之前退出 VTS moudle,实现编译后重新安装 Nginx 才能够失常应用 VTS。扩大能力弱 VTS 扩大能力分为两局部,一是在编译之前给 VTS 减少扩大;二是在编译之后减少扩大 —— 批改 nginx.conf 配置文件。通过批改 nginx.conf 文件来减少扩大会使 Nginx reload,生产环境间接 reload 或多或少会对业务产生一些影响。社区更新迟缓 VTS module 最新的一次更新是在 2018 年,曾经停摆 3 年了。 ...

August 10, 2021 · 3 min · jiezi

关于网关:Apache-APISIX-在移动云的应用

ApacheCon Asia 2021 在北京工夫 8 月 6 日正式开始,在 ASF 中有多个我的项目与 API、微服务相干,比方 Apache APISIX、Apache Dubbo 等。在 ApacheCon Asia 2021 —— API / 微服务专题中,大家不仅能够理解无关 API、微服务的前沿技术,也会学习到这些 Apache 我的项目的最佳实际,来自中国移动云能力核心的陈焱山将在大会上分享《Apache APISIX 在挪动云对象存储 EOS 的利用与实际》。 最近,咱们有幸采访了中国移动云能力核心的陈焱山,在采访中咱们理解到中国移动私有云建设倒退演进历程,明确了为什么挪动云为什么抉择 Apache APISIX 作为负载平衡网关,并且通晓挪动云后续的倒退布局。 中国移动云能力核心,对外也称“中移(苏州)软件技术有限公司”,是中国移动通信集团 2014 年注资成立的全资子公司,公司定位为云设施构建者、云服务提供者、云生态汇聚者,三年内推动中国移动云业务市场份额进入国内云服务商第一营垒。自 2019 年中国移动启动“云改”策略以来,作为助力中国移动 5G+AICDE 策略落地的基石,挪动云通过长足发展,已实现覆盖全国的“N+31+X”整体资源布局。同时,挪动云踊跃打造“云网、云数、云边、云智” 差异化特色劣势,在业务体量、产品种类、可售资源等方面均实现飞跃式晋升。“挪动云”品牌也充分发挥了云网一体、贴身服务、随心定制、平安可控的劣势,打造 5G 时代“你身边的智慧云”,为行业数字化转型倒退提供“强引擎”。Q:非常高兴明天能跟陈焱山老师进行交换,能够麻烦您做下自我介绍,简略陈说下您当初的工作内容吗? 大家好,我叫陈焱山,目前就任于中国移动云能力核心 IaaS 产品部,次要负责分布式对象存储软件的整体架构设计与开发工作,负责对象存储、API 网关的技术选型与计划落地实际工作。在分布式存储畛域这块还是有比拟丰盛的教训的,深度参加了挪动云的建设倒退历程。 以后,我次要关注于对象存储在交互编排、流量治理等方面的能力,促成咱们第四代对象存储产品进一步实现架构降级。同时,咱们也心愿可能基于 Ingress Controller 的能力,来实现对立流量拜访入口,并包含灰度公布、流量管控等性能。这些是咱们以后正在做的一些工作。 Q:您说的这些内容多少都与 Apache APISIX 有关联,您在往年 ApacheCon 亚洲大会上也有一场分享,想问下您会带来哪些精彩分享? 首先,我会给大家介绍一下咱们挪动云对象存储产品 EOS 的整体倒退和演进过程,同时重点介绍咱们是如何基于 Apache APISIX 实现对象存储流量治理的,做了哪些工作,又是如何进行实际。最初对咱们将来的架构演进做了一些布局阐明。咱们对象存储的整体演进过程次要经验了如下四个阶段,对于 Apache APISIX 引入次要是从第三代开始引入的,的确给咱们产品在架构上带来很多便当。 第一代:从 2008 年开始投入自研,同年公布了咱们的第一代对象对象存储产品;第二代:次要基于开源 Ceph 实现深度定制,实现了接口的标准化,反对 AWS 的 S3 标准接口和 Openstack 的 Swift 接口协议,同时丰盛了大量的性能个性;第三代:次要解决外部一些业余公司海量数据上云需要。在第三代产品中,咱们在性能上实现了一个新的逾越,繁多存储桶同时反对百 PB 容量和百亿对象规模,入口带宽达到 Tb/s 级。同时,咱们还引入了很多子模块,包含七层流量治理以及可观测零碎。七层流量治理模块是基于 Apache APISIX 实现的,次要用于实现业务流量的拆散治理;可观测零碎则次要是实现了数据的采集、告警以及日志剖析性能。第四代:也是全新一代架构,反对跨区域全局纠删性能,反对 AZ/Region 级容灾。在流量治理方面,反对基于 Apache APISIX 实现的跨地区申请调度能力,撑持极致的业务连续性;同时零碎可观测性进一步晋升,落地了集中化日志剖析零碎。在可维护性上首次引入了主动驾驶服务和交付编排服务,可能主动无效收敛故障范畴,加重运维压力,实现故障隔离和自愈能力。Q:从您的讲述中能够感触到,这个零碎不仅十分宏大,而且还十分重要。对于这样重要的零碎,为什么会抉择 Apache APISIX?次要出于哪些方面的思考呢? ...

August 10, 2021 · 2 min · jiezi

关于网关:得物技术网关路由匹配性能优化

为了进一步增强网络安全防备工作,近期对网关服务做了相干的平安降级,其中变动最大的一点是,网关不再提供URI含糊匹配的模式,形如 /api/v1/app/order/** 这样的配置曾经不在反对,置信很多小伙伴曾经感触到了日常开发上线的不便,然而须要了解的是,随着公司的体量的迅速倒退,各方面越来越规范化,平安方面增强管控显然还是十分必要的。 首先看下得物流量传递的根本门路: APP网关流量门路:四层高防 --> 阿里云SLB --> Gateway --> 业务服务/业务网关(提供协定转化 &接口聚合) 通常来说与业务方打交道的最多的是gateway 服务,很多萌新可能不是很了解网关具体在干啥,这里做个简要阐明,网关最大的作用是提供流量散发,同时具备流量管控,防爬,黑白名单,根本鉴权,接口超时,灰度等常见性能;小伙伴们日常开发中最长用到的就是流量转发,比方新起一个服务须要对外网裸露接口,此时就须要在网关的路由治理上进行配置。 所以Spring gateway 的路由匹配就成了一个十分外围的要害性能,这里咱们翻阅一下 Spring gateway 的源码。 因为Spring gateway 应用webflux 技术,整体的代码格调较为诡异。 这里简略介绍下webflux的基本概念: flux 示意 1~N 数据元素 mono ,示意 0~1 个数据元素, 针对数据流的所有操作,在没有订阅之前都不会被触发,只有调用了 subscribe办法后才会理论触发。 图一* 这里咱们看下 DispatcherHandler 的handle 办法,该办法会进行webHandler 的适配,对于网关来说这里次要匹配的是RoutePredicateHandlerMapping 这一对象,咱们能够从 hadlerMappings 对象中看到: RoutePredicateHandlerMapping 中的webHandle为 FilteringWebHandler 该handle 中蕴含了gateway 自带的以及网关自定义的共28个 GolobalFilter 讲到这里很多小伙伴可能会好奇,这个路由匹配到底是在哪儿做的呢,别急,咱们缓缓开趴! 依照图一所示,选中mapping后会获取Handler,而获取handler 后优会调用 invokeHandler 办法,那么我么无妨先到 getHandler 办法中看看,点开 RoutePredicateHandlerMapping 源码,咱们郁闷的发现并没有 getHandler 办法,而只有getHandlerInternal 办法,认真看下 RoutePredicateHandlerMapping 的继承关系发现该类继承了 AbstractHandlerMapping, 而AbstractHandlerMapping 中 getHandler 办法早已存在,实现了HandlerMapping 接口同时也做了局部实现 ;废话不多说,源码底下无内鬼!! ...

August 7, 2021 · 1 min · jiezi

关于网关:ApacheCon-Asia-2021-Apache-APISIX-技术议题一览

对于 ApacheCon Asia 2021ApacheCon 是 Apache 软件基金会的官网寰球系列会议。自 1998 年以来,ApacheCon 始终吸引着各个档次的参与者,在 350 多个 Apache 我的项目及其不同的社区中摸索 “明日的技术”。 ApacheCon Asia 是 ApacheCon 组委会针对亚太地区举办的 ApacheCon 在线会议,次要指标在于更好地服务亚太地区快速增长的 Apache 用户和贡献者。ApacheCon Asia 2021 将于往年 8 月 6-8 日在线举办。 近期 ApacheCon Asia 2021 团队正式颁布了大会日程,Apache APISIX 社区积极参与本次年度开源盛会,共提报了 8 个 API/微服务技术相干的议题,内容丰盛,欢送关注。 对于 API / 微服务技术议题API 是服务连贯的基石,通过 API 咱们能够将各种服务进行搭建,并提供给用户应用;随着利用的复杂度越来越高,单体利用逐步被拆分为微服务,产品能够疾速迭代的同时也带来平安、保护和可观测性方面的技术挑战。 Apache APISIX 是 Apache 顶级我的项目,也是寰球最沉闷的开源网关我的项目。在这个专题中,大家不仅能够理解 Apache APISIX 设计理念,也会学习到 Apache APISIX 我的项目的最佳实际。 Apache APISIX 在挪动云对象存储 EOS 的利用与实际议题简介:该演讲主题次要是讲述 Apache APISIX 在中国移动私有云对象存储 EOS 中的利用与实践经验分享。首先介绍了中国移动私有云建设布局及对象存储产品倒退演进历程,而后论述了咱们为什么抉择 Apache APISIX 作为负载平衡网关,并对 EOS 流量治理架构演进三个阶段进行进行了具体介绍。同时,咱们还分享了基于 Apache APISIX 咱们解决了哪些理论生产问题,做了哪些计划及开发工作,最初对咱们将来的演进做了一些布局阐明。 ...

August 3, 2021 · 2 min · jiezi

关于网关:插件编排在-Apache-APISIX-中的应用与实践

本文作者琚致远,Apache APISIX PMC,干流科技企业产品与大前端技术负责人。通过浏览本文,您能够理解 Apache APISIX 与根本应用场景,以及在低代码潮流下,Apache APISIX 是如何集成“拖拽”的插件编排能力的。什么是 Apache APISIX?Apache APISIX 是一个生产可用的七层全流量解决平台,可作为 API 网关解决业务入口流量,具备极高性能、超低提早的显著个性。它内置了 50 多种插件,笼罩身份验证、平安防护、流量管制、Serverless、可观测性等多个方面,可满足企业客户常见的应用场景。 如下方架构图所示,Apache APISIX 分为数据面(左侧)与管制面(右侧)两局部:通过管制面下发配置到 ETCD,数据面借助丰盛的插件解决内外流量。 Apache APISIX 裸露了一组接口,不便咱们为 API 绑定插件。如果咱们心愿为 API 减少限速能力,只需为 API 绑定 limit-req 插件: curl -X PUT http://127.0.0.1:9080/apisix/admin/routes/1 -d ' { "uri": "/get", "methods": ["GET"], "upstream": { "type": "roundrobin", "nodes": { "httpbin.org:80": 1 } }, "plugins": { "limit-req": { "rate": 1, "burst": 2, "rejected_code": 503, "key": "remote_addr" } } }’调用胜利后,当申请达到该 API 时将进行限速管控。该示例应用 limit-req 实现 API 限速(特定性能),若针对“依据某个插件的处理结果,决定后续的申请解决逻辑”这种场景化需要,该怎么做呢?以后,现有的插件机制无奈满足这种需要,这时便引申出插件编排的能力来解决这个问题。 ...

July 28, 2021 · 2 min · jiezi

关于网关:Rancher-×-Apache-APISIX极速部署更好用的开源网关和-Ingress-Controller

Rancher × Apache APISIXRancher 是一个开源的企业级多集群 Kubernetes 治理平台,实现了 Kubernetes 集群在混合云+本地数据中心的集中部署与治理,以确保集群的安全性,减速企业数字化转型。本文将介绍如何在 Rancher 利用商店(Catalog)中装置和部署 Apache APISIX 和Apache APISIX Ingress Controller,进而如何通过它们代理 Kubernetes 服务。 前置条件将现有 Kubernetes 集群已纳入 Rancher 治理。 部署 Apache APISIX 和 Apache APISIX Ingress Controller在 Rancher 的 Tools - Catalogs 页面能够进行利用商店(catalogs)的配置,咱们在这里增加 Apache APISIX 的 Helm 仓库:https://github.com/apache/api... 保留实现后,即可抉择 Apps 页面进行 Apache APISIX 的部署了。抉择 Launch 便可看到 Apache APISIX 的仓库信息了。这里咱们间接抉择 apisix 即可。 接下来只须要在此页面中进行简略的配置即可。因为咱们想要同时部署 APISIX Ingress controller,所以在底部的 Answers 中填入 ingress-controller.enabled=true这个配置项 。保留即可实现部署。 稍等片刻即可实现部署。 部署示例我的项目咱们应用 kennethreitz/httpbin 作为示例我的项目进行演示。这里也间接在 Rancher 中实现部署。 ...

July 26, 2021 · 2 min · jiezi

关于网关:Chaos-Mesh-助力-Apache-APISIX-提升稳定性

Apache APISIX 是 Apache 基金会下的顶级我的项目,目前在生产环境中曾经通过每日几百亿次申请量的考验。随着社区的倒退,Apache APISIX 的性能越来越多,须要与内部组件产生的交互也越来越多,随之而来的不确定性呈指数级增长。在社区中,咱们也收到了用户反馈的一些问题,这里举两个例子。 场景一在 Apache APISIX 的配置核心, etcd 与 Apache APISIX 之间出现意外的高网络提早时,Apache APISIX 是否依然失常运行进行流量过滤转发? 场景二用户在 issue 反馈,当 etcd 集群中的一个节点生效而集群依然能够失常运行时,会呈现与 Apache APISIX admin API 交互报错的状况。 只管 Apache APISIX 在 CI 中通过单元 / e2e / fuzz 测试笼罩了大部分情景,然而尚未笼罩到与内部组件的交互。当产生网络稳定、硬盘故障、或是过程被杀掉等难以预料的异样行为时,Apache APISIX 是否给出适合的错误信息、是否能够放弃或自行复原到失常的运行状态呢?为了测试笼罩到用户提出的场景,以及在投入生产环境前被动发现相似的问题,通过社区探讨决定应用 PingCAP 开源的混沌工程平台 Chaos Mesh 进行测试。 混沌工程是一种在零碎基础设施上进行试验,被动找出零碎中的软弱环节的办法,从而确保零碎具备抵挡生产环境中失控环境的能力。混沌工程最早由 Netflix 提出,用以模仿从而抵挡晚期云服务的不稳定性。随着技术的演进,当初的混沌工程平台提供了更多品种的故障可供注入,依附 Kubernetes 也能够更不便地管制故障半径。这些都是 Apache APISIX 抉择 Chaos Mesh 的重要起因,但作为开源社区,Apache APISIX 深知只有沉闷的社区能力确保软件稳固应用和疾速迭代,而这也是 Chaos Mesh 更加吸引人的特点。 如何在 APISIX 上利用混沌工程混沌工程在单纯的注入故障以外,逐步造成了一套残缺的方法论。依据 Principle of Chaos Engineering 的举荐,部署混沌工程试验须要五个步骤: ...

July 23, 2021 · 2 min · jiezi

关于网关:如何控制工作流中的流程流转工作流流程元素之顺序流和网关的详细解析

程序流形容程序流是连贯两个流程节点的连线流程执行完一个节点后,会沿着节点的所有外出程序流继续执行BPMN 2.0默认的行为就是并发的:两个外出程序流会发明两个独自的,并发流程分支 图形标记程序流显示为从终点到起点的箭头.箭头总是指向起点 XML内容程序流须要流程范畴内惟一的id, 以及对终点与起点元素的援用 <sequenceFlow id="flow1" sourceRef="theStart" targetRef="theTask" />条件程序流形容为程序流定义一个条件来到一个BPMN 2.0节点时,默认会计算外出程序流的条件 如果条件后果为true,就会抉择外出程序流继续执行当多条程序流被选中时,就会创立多条分支,流程会持续以并行形式继续执行==留神:== 不包含网关 ,网关会用特定的形式解决程序流中的条件, 这与网关类型相干 图形标记条件程序流显示为一个失常的程序流,在终点有一个菱形. 条件表达式也会显示在程序流上 XML内容条件程序流定义为一个失常的程序流, 蕴含conditionExpression子元素目前只反对tFormalExpressions, 如果没有设置xsi:type="", 就会默认值反对目前反对的表达式类型 <sequenceFlow id="flow" sourceRef="theStart" targetRef="theTask"><conditionExpression xsi:type="tFormalExpression"> <![CDATA[${order.price > 100 && order.price < 250}]]></conditionExpression></sequenceFlow>以后条件表达式只能应用UEL, 应用的表达式须要返回boolean值,否则会在解析表达式时抛出异样 援用了流程变量的数据,通过getter调用JavaBean <conditionExpression xsi:type="tFormalExpression"><![CDATA[${order.price > 100 && order.price < 250}]]></conditionExpression>通过调用办法返回一个boolean值 <conditionExpression xsi:type="tFormalExpression"><![CDATA[${order.isStandardOrder()}]]></conditionExpression>在activiti公布包中,蕴含以下流程实例,应用了值和办法表达式 默认程序流形容所有的BPMN 2.0工作和网关都能够设置一个默认程序流只有在节点的其它外出程序流不能被选中时,才会应用作为外出程序流继续执行默认程序流的条件设置不会失效 图形标记默认程序流显示为一般程序流, 终点有一个斜线标记 XML内容默认程序流通过对应节点的default属性定义上面的XML代码演示了排他网关设置了默认程序流flow 2.只有当conditionA和conditionB都返回false时,才会抉择它作为外出连线继续执行: <exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" default="flow2" /><sequenceFlow id="flow1" sourceRef="exclusiveGw" targetRef="task1"><conditionExpression xsi:type="tFormalExpression">${conditionA}</conditionExpression></sequenceFlow><sequenceFlow id="flow2" sourceRef="exclusiveGw" targetRef="task2"/><sequenceFlow id="flow3" sourceRef="exclusiveGw" targetRef="task3"><conditionExpression xsi:type="tFormalExpression">${conditionB}</conditionExpression></sequenceFlow>对应图形: 网关网关用来管制流程的流向(流程的tokens),网关能够生产也能够生成token网关显示成菱形图形,外部有有一个小图标.图标示意网关的类型: 排他网关形容排他网关: 异或XOR网关,用来在流程中实现决策当流程执行到这个网关,所有外出程序流都会被解决一遍.其中条件解析为true的程序流(或者没有设置条件,概念上在程序流上定义了一个[true])会被选中,让流程持续运行==留神:== 通常状况下,所有条件后果为true的程序流都会被选中,以并行形式执行,但排他网关只会抉择一条程序流执行. 就是说,尽管多个程序流的条件后果为true,那么XML中的第一个程序流(也只有这一条)会被选中,并用来持续运行流程.如果没有选中任何程序流,会抛出一个异样 图形标记排他网关显示成一个一般网关(比方,菱形图形),外部是一个X图标,示意异或(XOR)语义.没有外部图标的网关,默认为排他网关BPMN 2.0标准不容许在同一个流程定义中同时应用没有X和有X的菱形图形 XML内容用一行定义了网关,条件表达式定义在外出程序流中模型实例: <exclusiveGateway id="exclusiveGw" name="Exclusive Gateway" /><sequenceFlow id="flow2" sourceRef="exclusiveGw" targetRef="theTask1"><conditionExpression xsi:type="tFormalExpression">${input == 1}</conditionExpression></sequenceFlow><sequenceFlow id="flow3" sourceRef="exclusiveGw" targetRef="theTask2"><conditionExpression xsi:type="tFormalExpression">${input == 2}</conditionExpression></sequenceFlow><sequenceFlow id="flow4" sourceRef="exclusiveGw" targetRef="theTask3"><conditionExpression xsi:type="tFormalExpression">${input == 3}</conditionExpression></sequenceFlow>并行网关形容网关也能够示意流程中的并行状况容许将流程分成多条分支,也能够把多条分支汇聚到一起并行网关的性能是基于进入和外出的程序流的: ...

June 3, 2021 · 2 min · jiezi

关于网关:微服务项目服务管理混乱来看这一篇生产者消费者服务实践使用API网关实现服务聚合

API网关的服务聚合通过同一个入口路由到不同的服务上 服务聚合实现因为服务器在集群部署的时候,同一个服务内容存在多个不同的服务IP地址,所以不能间接通过IP地址拜访服务API服务拜访的时候要先获取服务的IP地址,而后再拜访服务进行服务聚合的我的项目要称为服务提供者(实现服务接口),服务提供者的SpringApplication要加Main.main(args)提供近程调用接口给API网关此时能够获取到服务的IP地址如何获取服务IP地址? 上下文信息:上下文中寄存的是以后调用过程中所需的环境信息,所有配置信息都将转换为 URL 的参数.RpcContext 是一个 ThreadLocal 的长期状态记录器,当接管到 RPC 申请,或发动 RPC 申请时,RpcContext 的状态都会变动.比方:A 调 B,B 再调 C,则 B 机器上,在 B 调 C 之前,RpcContext 记录的是 A 调 B 的信息,在 B 调 C 之后,RpcContext 记录的是 B 调 C 的信息服务生产方:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------// 近程调用xxxService.xxx();// 本端是否为生产端,这里会返回trueboolean isConsumerSide = RpcContext.getContext().isConsumerSide();// 获取最初一次调用的提供方IP地址String serverIP = RpcContext.getContext().getRemoteHost();// 获取以后服务配置信息,所有配置信息都将转换为URL的参数String application = RpcContext.getContext().getUrl().getParameter("application");// 留神:每发动RPC调用,上下文状态会变动yyyService.yyy();--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------服务提供方:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------public class XxxServiceImpl implements XxxService { public void xxx() { // 本端是否为提供端,这里会返回true boolean isProviderSide = RpcContext.getContext().isProviderSide(); // 获取调用方IP地址 String clientIP = RpcContext.getContext().getRemoteHost(); // 获取以后服务配置信息,所有配置信息都将转换为URL的参数 String application = RpcContext.getContext().getUrl().getParameter("application"); // 留神:每发动RPC调用,上下文状态会变动 yyyService.yyy(); // 此时本端变成生产端,这里会返回false boolean isProviderSide = RpcContext.getContext().isProviderSide(); } }----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------在配置文件的service中配置上须要聚合的服务以及版本创立路由controller ...

May 21, 2021 · 1 min · jiezi

关于网关:如何为数字化人口普查做好安全保障工作|产业安全专家谈

近日,第七次全国人口普查后果颁布,本次普查首次采纳电子化采集,是一项连贯700多万普查员入户、14亿人参加的盛大工程。宏大的规模波及到海量数据的采集、传输和拜访,且此前没有案例可参考,在安全性和稳定性等方面给我的项目带来了极大的难度。如何为第七次全国人口普查提供平安保障撑持,确保线上零碎稳固运行?本期专家谈,咱们采访了腾讯平安身份平安技术负责人王旭来为咱们解说此次人口普查背地的平安防护。Q:站在平安保障的视角,简略跟咱们介绍一下第七次全国人口普查我的项目的特点,次要的难点有哪些?王旭:这次咱们腾讯承接的第七次全国人口普查我的项目,咱们也简称七人普。它与咱们国家前几次人口普查最显著的不同特点在于,这次在腾讯的技术支持下,首次采纳了电子化形式发展普查注销,而所谓的电子化形式,次要在于摸索应用智能手机终端采集数据,并且推动了大数据在普查中的利用,从而大幅提高了普查数据的采集和解决的效力。也就是说,进步效力实际上是本次普查业务一个外围业务诉求,而咱们从平安保障的视角来看,则须要在保障效力的前提下,对整个普查业务的全流程的增强,不论是对公民个人信息的爱护,还是在采集过程中的稳定性和安全性的保障。首先说安全性,七人普我的项目波及到海量数据传输和拜访爱护的问题,而网关与身份认证实际上是这些数据拜访的爱护的第一道门,确保只有非法的人通过非法的终端能力登录并拜访到零碎中的数据,也是这个我的项目最重要的环节之一。另外说到稳定性,就不得不思考到人口普查的一个规模问题,要晓得本次人口普查是须要采集5.5亿条户记录、17亿条人记录(包含反复统计的流动人口),并且要求全国各级普查机构组织,包含约700万名普查员须要在15天内就实现普查信息采集工作,再加上咱们还有提供一个给公民自主填报的入口,这样总体的并发量就更加难以估计。从咱们以往承接的我的项目上来讲,这的确是一个很常见的规模,能够说难度极大,而且之前没有任何可参考的案例。面对这样的一个挑战,咱们进行了深刻的调研,首先是梳理出七人普中的三大业务场景:• 普查员采集报送:就是指面向咱们的700万人普查员提供的普查信息采集场景;(互联网)• 公民自主填报:面向14亿公众提供的小程序自主填报场景;(互联网)• 平台治理:面向治理端,面向统计局的相干管理人员提供的普查数据的统计,剖析,审计等等这些治理面的场景;(统计局专网)面对这样一个三个不同业务场景下的规模和并发量宏大的挑战,从计划的角度讲,简略说就是,咱们将这三个独立场景,从利用的架构层面就进行拆合成耦,将咱们的平安解决方案,次要就是波及智能网关和身份认证的计划别离按场景部署,将压力扩散的同时,也扩散了危险。 Q:在普查数字零碎需要梳理、框架设计的阶段,平安在外面表演了什么角色?最终采纳的是什么样的计划,是基于哪些考量产生的?王旭:方才讲,七人普我的项目中次要波及到的实际上是包含了三类场景下的三类用户,就是普查员用户,14亿公民用户,以及治理侧的管理员用户;从需要梳理和业务剖析的角度,首先咱们须要把这些用户辨别开来,那么就是B端用户和C端用户,因为这两类用户的业务需要是齐全不同的。B端用户,就以这700万普查人员来讲,实际上这外面波及到的是一个领有700万员工的外部组织机构的治理问题,因为只有提供一个欠缺的组织机构和身份管理系统,能力无效的发展起来基于700万员工的分区,分片的普查工作;而14亿全国公民的C端用户,次要是提供一个平安的身份认证和访问控制能力,以确保C端用户接入的真实性和合法性。具体来讲,这个从平安保障的角度来说,要同时满足B端和C端的用户场景,咱们的平安产品次要有两局部:• 一个是平安网关局部,也就是产品上咱们的RIO智能网关。因为方才咱们讲七人普我的项目特点是有三大场景:普查信息采集、自主填报、平台治理;RIO智能网关理论是这三个场景中连贯客户端和后盾服务端的一个外围枢纽,所有的流量都要通过这个枢纽,这个外围枢纽的作用,就是须要为这些不同的场景进行对立的、规范化的、平安的接入和治理,同时可能提供服务的鉴权、服务路由、服务监控、服务熔断、还包含流量的管制、主动负载平衡以及健康检查等多种平安保障能力,从而确保整体零碎的稳固牢靠。• 另一个是对立身份认证局部,这部分采纳的是咱们腾讯平安IAM产品。通过咱们的这个产品来提供一个全国全网范畴内的对立登录认证和身份治理能力。方才讲的网关,像一个流量的枢纽,而对立身份认证就像是这个枢纽里的一道门禁,确保每一个访问者都是非法的,能力通过。另外从B端用户身份的治理面的角度来讲,就是咱们方才讲的700万普查员的身份,因为这些普查员实际上也散布在全国不同的省市区,分属不同组织机构,所以咱们须要基于这些普查员账号和组织机构等信息,来提供对立的身份治理、标签治理、对立认证、还有单点登录等服务。另外咱们还须要实现分级管理的机制,以便于各级管理员对全国各地区普查员进行分级管理,实现跨地区、跨层级、跨部门的访问控制和用户治理。所以咱们次要就是通过这两局部产品在保障业务安全性的根底上,也晋升人口普查的效力。 Q:七人普的技术解决方案对哪些行业或者哪些客户有标杆意义,能对他们的业务产生帮忙?王旭:首先七人普我的项目最间接的标杆意义当然是对于统计普查畛域,能够说这次腾讯积攒了比拟贵重的教训,并建立了标杆,也就是说对将来的全国范畴内还会发展的其余普查我的项目,例如全国农业普查和全国经济普查等等,都会有重要借鉴和指导意义。另外从身份治理,平安访问控制的角度,本次普查采纳的基于微信和企业微信联动的形式,实现用户和普查员的身份数据信息互通和汇聚,这个能够讲也是为其余行业提供了业务模式上的拓展思路。例如在政务、教育、能源、甚至人工智能等畛域里存在的对多业务混合,多渠道认证以及多类型用户治理的场景都能够说积攒了重要教训,起到了计划借鉴作用。将来,腾讯平安还将持续把身份平安与政企业务进行更加深度的联合,同时集成微信、企业微信和小程序方便快捷的能力,更好地连结民众、企业、政府三大群体,助力政企民三方疾速高效地进行身份平安管控,真正可能做到为数字化转型与降级保驾护航。 Q:这是一项基于专有云部署的数字零碎,它的平安部署有哪些个性?王旭:没错,这次是咱们几个产品通过专有云部署提供的解决方案,从平安的角度就是咱们能够利用到腾讯云提供的弱小的各种平安能力,例如WAF、BGP高防等,这些比起咱们传统部署或者说本地化部署提供的平安能力要强很多。同时在专有云部署的劣势,还在于能够应用专有云分布式数据库存储、对象存储,音讯队列等根底服务能力,这些能力进步了零碎的稳定性和可靠性的同时,也大大加重了运维压力;另外咱们还利用了专有云弹性伸缩扩大能力,充沛满足了七人普我的项目在这种多环境、以及不同业务运行期间的高并发量的要求。最初,平安必定离不开的是审计与监控,所以依靠咱们专有云弱小的云监控能力,也是咱们可能7X24小时不间断的对系统中产生的各种告警进行疾速问题定位和及时应答,能够说起到了至关重要的作用。 Q:业内有一种说法,平安是“三分技术、七分治理”,你是否认同?在这个我的项目中咱们技术和教训各自施展了什么作用?王旭:在这个我的项目中咱们的核心技术和治理教训都起到了十分重要的作用。从我的项目一开始启动的时候,咱们就迅速成立了智能网关+对立身份认证产品的技术架构团队和应急保障反对团队,为我的项目的不同阶段提供全程技术支持和保障:首先,是我的项目规划设计阶段。从去年10月份开始,团队的架构师就参加到了我的项目的架构和方案设计工作。比方,网关产品需依据三大业务场景(平台治理、普查信息采集、自主填报)独立进行架构设计,并涵盖五个环境的部署(开发、测试、培训、预公布、生产)。从咱们对立身份认证产品的角度来讲,为了兼顾治理的便利性,还须要能应答性能的高要求,团队通过具体调研,最终确定了采纳对立治理和分级部署模式,所谓分级部署,就是分了1个国家节点+31个省级节点,一共全国32个节点。凡事预则立,不预则废,所以从项目管理上来讲,为了尽量做到十拿九稳,不管网关和身份认证,咱们都在我的项目布局阶段就做了具体的应急保障计划。之后,是我的项目联调测试阶段。在正式普查摸底工作开始之前,也是依附咱们的多项管理手段施展了很大作用,比方治理团队提前一个月就协调相干人员达到我的项目关闭现场,配合项目组进行联调测试工作。整个联调过程中,须要一直通过利用网关的健康检查、限流配置、自定义申请和响应配置等高级性能,来把整个零碎联调到一个稳固状态;同时通过网关对服务调用全链路的经营监控等能力,可能及时进行问题预警,帮忙我的项目团队疾速定位问题。总体来说,正是因为管理工作比拟到位,我的项目的联调测试工作才得以提前完成,保障了零碎如期上线的指标。最初,是我的项目正式上线后。就更突出咱们一个管理工作的重要性,因为咱们晓得,从开始第一天起,单单在普查信息采集这一个场景中,咱们部署的智能网关的访问量QPS就猛增到7万,峰值一举达到了11万左右。这么大的访问量,这么多的数据,能够说一条都不能丢,零碎也一秒都不能断。这外面除了依赖的此前精心的架构设计、继续的产品优化、还有密集的性能压测,也是很大水平也十分依赖于咱们的项目管理形式,正是因为由专人在现场进行重点保障,才可能100%的保障整个我的项目的安稳运行。

May 18, 2021 · 1 min · jiezi

关于网关:Zuul网关搭建实战教程

接口API技术接口是在面向服务架构(SOA)和微服务的背景下RPC近程调用产生的,目标是为理解耦接口分类: 凋谢接口 在外网进行拜访通过appid+appsecret, 生成accessToken进行通信目标是为了受权接口权限,OAuth2.0协定外部接口 个别只能在局域网中进行拜访服务与服务之间的调用关系都在同一个微服务零碎中目标是为了保障平安 如何设计一套API接口接口权限: 凋谢接口,外部接口接口幂等性接口安全性为了避免篡改数据,要验证签名应用网关拦挡接口,实现黑名单和白名单接口应用RESTful格调:http协定+json格局,目标是为了跨平台思考到高并发的状况,对接口服务实现爱护性能:服务降级,服务熔断,服务爱护最初应用对立的API治理平台:api swagger 网关(API Gateway)客户端申请先对立申请到网关服务器上,再由网关服务器进行转发到理论的服务地址网关作用: 拦挡申请权限管制负载平衡日志治理监控接口网关与过滤器的区别: 网关是拦挡整个微服务的申请过滤器是对单个Tomcat服务器进行拦挡申请网关分为内网网关和外网网关Zuul和Nginx的异同: 相同点: Zuul和Nginx都能够实现负载平衡,反向代理,过滤申请,实现网关成果不同点: 开发语言不同: Zuul采纳Java语言写的,Nginx采纳C语言写的负载平衡实现不同: Zuul中采纳Ribbon+Eureka实现客户端负载平衡,Nginx实现的服务器端负载平衡Nginx比Zuul性能更弱小,因为Nginx整合了脚本语言(Nginx+Lua),更适宜服务器端负载平衡Zuul更适宜Java语言微服务中的网关的实现能够应用Nginx+Zuul作为网关实现:Nginx用于实现反向代理(暗藏服务实在IP地址),Zuul对微服务的实现网关拦挡申请 搭建Zuul网关1.引入Zuul依赖spring-cloud-starter-netflix-zuul2.配置文件:eureka.client.serviceUrl.defaultZoo=http://localhost:8100/eureka #服务注册url地址server.port=80 # 网关端口号spring.application.name=service-zuul # 网关名称zuul.routes.api-a.path=/api-ticket/** #当客户端发送申请127.0.0.1:80/api-ticket/结尾的,都会被发送到app-ticket服务中zuul.routes.api-a.serviceId=app-ticket # ticket服务别名,zuul整合ribbon默认主动实现负载平衡成果zuul.routes.app-b.path=/api-user/** # 当客户端发送申请127.0.0.1/api-user/结尾的,都会被发送到app-user服务中 zuul.routes.app-b.serviceId=app-user # app-b定义转发规定3.在类上标注@EnableZuulProxy注解开启网关代理搭建ZuulFilter过滤器1.创立过滤器类继承ZuulFilter2.获取上下文3.获取Request对象4.从申请头中获取token5.创立过滤器执行逻辑6.实现ZuulFilter中的办法: 过滤类型:filterType() pre-示意在申请之前执行. 过滤器执行程序:filterOrder() 当一个申请在同一阶段存在多个过滤器的时候,规定多个过滤器的执行程序 判断过滤器是否失效:shouldFilter()搭建动静Zuul网关路由转发传统形式将路由规定配置在配置文件中,如果路由地址产生了扭转,须要重启服务器在微服务中应该将路由规定配置在SpringCloud Config分布式配置核心,实现动静路由规定.配置SpringCloud Config分布式配置核心的实时刷新 1.引入actuator依赖spring-boot-starter-actuator2.在配置文件中开启监控端点management.endpoints.web.exposure.include="*" # 开启所有端点3.启动运行configClient4.在须要刷新的controller类中的bean当标注@RefreshScope注解使actuator刷新失效搭建Nginx+Zuul网关集群如何实现集群: 保障每台服务数据统一,应用Nginx实现反向代理和负载平衡Zuul搭建网关: 应用Nginx+Zuul遵循一主一备或者轮询的准则网关是多个网关集群原理: 客户端发送申请,所有申请对立到Nginx上,在Nginx中实现反向代理和负载平衡,再应用轮询机制转发到网关上 1.在host中配置域名2.在Nginx配置文件中配置上游服务器(upstream),默认实现负载平衡3.在过滤器中调用网关接口Nginx和Zuul区别: 微服务网关是针对整个微服务实现对立申请拦挡,因而网关都采纳相干语言(Java)开发

May 9, 2021 · 1 min · jiezi