大家好,我的网名是二多屋的陈浩。今天我们要讲的是网关模式。
前面我们讨论了两种设计模式:侧车和服务网格,这两种设计模式都在不影响业务逻辑的情况下组合和分离控制平面和数据平面处理。
然而,这两种模式的运营和维护成本都非常高。
每个服务都需要一个插件,使得本来就很复杂的分布式系统架构变得更加复杂和难以管理。
当我谈到服务匹配时,我提到了Get Ghost。
个人觉得没必要为每个服务都配置一个SID车。事实上,您可以为一个服务集群配备一个网关,或者使用get Leg 配置一组类似的服务。
这样,网关模式架构就可以按照参考文献:https://51gx.top/detail/248进行详细配置。您可以为每种服务强度配置网关,或为每组服务配置一个网关。这简化了整个系统架构的复杂性并使其可控。
本文使用图片来说明多层网关架构。
有一个总网关,访问所有流量并将其分发到各个子系统,还有一个二级网关,作为每个子系统的访问网关。您可以看到网关管理服务强度。熟悉。
通过网关,分布式架构还可以组织成星型架构,形成服务匹配或适应特定服务的网格架构。另请注意,在这种情况下,插头不会那么透明并且可能很重。
一般来说,网关就是一个服务器,也可以认为是进入系统的唯一节点。
这与面向对象设计模式的for set模式非常相似,网关封装了内部系统架构,并为每个客户端提供API。它还可能具有其他功能,例如授权监控、负载平衡和缓存。断路器降级、限流请求、分片和管理、静态响应处理等。
现在我们来谈谈一个好的网关应该具备哪些设计特点。
网关需要几个功能。
首先,请求路由。既然不再是堆栈卡,那么网关就必须具备请求路由的能力。
这样对于发件人来说也非常方便。
调用者不需要知道它需要使用的其他服务的地址,因此它们都被集成并传递给网关进行处理。
第二件事是立即将请求路由到正确的位置,以便后续的服务可以被代理。
网关需要服务注册功能。这意味着后端服务实例可以注册和取消注册它们所服务的地址。
注册一般是指注册一些API接口。
例如,对于HTTP RESTFUL请求,您可以为相应的API注册URI方法HTTP请求头。
这样,网关就可以根据收到的请求中的信息来决定路由到哪个后端服务。
三是负载均衡。
由于网关可以接收多种服务,因此网关还必须根据每个对等体的服务能力实施负载均衡策略。
更简单的方法是直接运行robbin,但更复杂的方法允许您设置分配权重。
如果您更多地参与,您也可以实现连续的会话。
四是设计灵活。网关还可以进行异物、重装修、秘密文件、流控、融合、监控等功能,设计灵活。
在这种情况下,您还可以使用服务混搭,让应用服务只考虑自己的业务逻辑而不是控制逻辑。
最后,还有安全功能,例如SSL 加密和证书管理、筛选、验证、影响授权数据以及防止对请求者的恶意攻击。
错误处理越多越好。
因此,网关可以作为保障后端服务安全的全栈接入组件。
当然,网关还可以做更多有趣的事情。
首先,灰度发布网关可以完全重新利用同一服务的不同版本的实例,并收集相关数据。
这对于提高软件质量甚至产品试错都有非常积极的影响。
现在,第二件事是年利率统计。
网关允许您将多个单独的请求聚合为一个请求。
微服务系统架构的一个明显问题是,由于服务较小,客户端可能需要多个请求才能检索所有数据。
在这种情况下,客户端和后端之间的频繁通信会对应用程序性能和规模产生非常负面的影响。
因此,网关可以帮助客户端请求多个后端服务并将后端服务响应组装回客户端。
当然,这个过程可以是可选的,但需要客户的配合。
另一个有趣的方面是API 编排。
微服务架构还需要调用一组API,类似于工作流程,来完成完整的业务流程。
对此,所有的业务流程都可以通过网页来安排。
您可以通过DRCR 定义和协调不同的API,也可以像AWS Ramnav 一样串联不同的API。从前面的讨论中我们可以看出,三种设计模式分别是Gateway、Automotive和Service Mesh。它们很容易混淆,因为它们看起来很相似。
那么这里我想澄清一下这三种设计模式的特点、场景以及区别。
首先,套卡方式主要用于改造现有业务。
我们知道,如果我们想要对架构进行任何更改,我们的服务提供商将需要共同努力进行更改。
然而,还有许多较低的业务优先级,例如架构更改。
改变架构的政治复杂性可能会非常高。
通过set car,它可以适应应用程序服务并成为应用程序服务传入和传出请求的代理。
这样你就可以做很多对业务方完全透明的事情。
随着建筑物内边车数量的增加,有必要对边车进行集中管理。
于是我们在边车上增加了一个全局中央控制器,Service Match就应运而生了。中央控制器出现后,我们意识到所有非业务功能都可以在SID卡和控制器上实现。
企业只需将此服务集成到他们的网格中,而不必担心与其他服务或服务的弹性文件的通信,就像服务路径平台一样。
但Service Match的架构和部署过于复杂,增加了运维层面的复杂性。
我认为为了简化这种架构的复杂性,侧卡的强度需要更粗或更细。这样比较方便。
不过,我认为最好使用网关。网关只负责传入的请求,类似于SID汽车,也负责外部的请求。
由于网关可以聚合服务组,因此可以将某个服务的外部请求移交给其他服务的网关,因此您只需使用处理传入请求并负责的网关即可。同时处理传入和传出请求的卡的复杂性。
作为51zkw编辑的总结,我认为gateway方式比sidecar或者service match要好。
当然,具体问题需要具体分析。
最后说一下网关的设计重点。
第一点,高性能高度依赖于技术设计,不应该也不可能成为性能瓶颈。
为了高性能,最好使用c、CI加go、或者Java等高性能编程语言来服务后端和前端请求。后端必须始终使用异步、非阻塞IO。延迟不会给您的应用程序带来性能问题。
对于c和c plus,可以参考Linux上的eppo和Windows上的IO的一步IO模型,比如Java中的netty root x spring Reactor的NIO框架。
当然,我还是更喜欢go语言的goroutine和channels方式。
第二点是高可用性。网关必须是一个高科技的技术组件,因为所有流量或呼叫都必须经过它。
它的稳定性直接关系到所有服务的稳定性。
如果网关设计不当,就会成为单点故障。
因此,一个好的网关至少要满足三个条件:
首先,集群网关必须成为集群。最好组建自己的集群并同步集群数据,而不是依赖第三方系统来同步您的数据。
其次,面向服务的网关还必须能够不间断地更改配置。
哪种索引重新加载配置可以提供无中断服务?
还有一个就是最好是服务型的。这意味着服务需要自己的上下文,并且API 可以在运行时更改自己的配置。
第三是可持续性。
例如,restart 是像n 和x 一样的优雅重启。有一个主进程负责分发请求。
如果需要重新启动,新的请求将被分配给新的进程。
当旧进程完成处理它正在处理的请求时,它就会终止。
网关设计注重高性能和可用性以及高可扩展性。
网关需要处理所有的业务流量和请求,因此需要或多或少的业务逻辑。
我们都知道业务逻辑是不稳定且不确定的。例如,你需要在你的网关中添加业务相关的东西,那么良好的基础应该考虑到可扩展性和二次开发。
当然,用n jxson这样的模型做二次开发是可以的,但我觉得还是应该用所谓的serverless或者快速的方式来完成,比如AWS Lambda。
另外,从运维的角度来说,广关城需要一些设计原则。
首先,业务是松耦合的,协议是紧耦合的。
从业务设计的角度来看,网关不应该形成与后续服务结合的服务,也不应该具有任何业务逻辑。
网关必须是网络应用层的组件,并且只能解析和处理通信协议头,而不是通信协议体。
另一方面,应相应隔离由协议解析引起的性能问题。
三是异常访问检测。
网关必须检测某种异常访问,例如在相对较短的时间内超过一定数量的请求。
另一个例子是集成客户端的4路请求错误率太高。
网站所有者必须阻止此类访问请求。
另一方面,我们必须警告您,因为它可能会导致严重的安全问题,例如黑客的攻击。
好了,我们来总结一下今天分享的主要内容。
首先,网关模式可以替代汽车制造模式。不同的是,我们用集中式网关取代了每个服务器上的分布式汽车制造。
网关不必管理所有服务节点;您可以选择为指定的服务集群设置一个网关,或者在网关前面添加一个网关来创建新的结构。
接下来我们列出了网关模式的功能特点。
现在,我们已经介绍了网关模式的设计要点,但是由于网关的功能较多,所以设计时需要考虑的点也很多,必须慎重考虑。
在下一课中,我们将讨论部署和升级策略。我们期待着帮助您。
您还可以分享一下是否有任何公开的分布式系统使用该网关?它是否具有灵活的内置服务设计?我们提供了一系列文章的目录。关于系统设计模式。从此列表中找到您感兴趣的内容。
以上#左耳听风_057_56_管理设计篇网关模式相关内容摘自网络,仅供大家参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92400.html