手机网站一年费用吗,常用的seo工具的是有哪些,网页设计论文提纲,做网站需要注意哪些“灵魂拷问分布式系统需要统一的网关吗#xff1f;网关会带来哪些优势#xff1f;引入网关会带来灾难吗#xff1f;分布式系统的设计大体上分为中心化和非中心化#xff0c;像现在流行的微服务模式#xff0c;本质上是把各种业务拆分为独立的进程来实现业务的扩展性。伴随… “灵魂拷问分布式系统需要统一的网关吗网关会带来哪些优势引入网关会带来灾难吗分布式系统的设计大体上分为中心化和非中心化像现在流行的微服务模式本质上是把各种业务拆分为独立的进程来实现业务的扩展性。伴随着业务的不断被拆分整体的系统性能也有所提高但是系统又往往面临着中心化的需求这个世界就是这么有趣我们不但要非中心化的优势还要保证中心化的优势。统一的需求说到非中心化需求最简单最常见的就是鉴权简单来说就是判断用户是否有执行某种动作的权限。以鉴权为例当有N个微服务有同样的鉴权需求的时候有以下几种解决方案每个服务自己实现一遍写一个公共的服务接口每个服务都调用这个接口写到统一的流量入口处只需要实现一次有人说第一种方案没人用是吗在服务数量不是太多的情况下据我所知有很多公司初期都是每个服务都实现自己的鉴权不要说这种做法一无是处首先在各个团队技术栈不同的情况下这是一个团队可以快速实现功能的一种解决方案而且不依赖于任何其他服务这意味着这个服务不会受到别的服务的影响这体现的是非中心化最核心的价值之一。至于第二种解决方案是典型的集中式处理的方案之一他按照业务功能把鉴权独立成单独的服务所有使用鉴权服务的系统都依赖于这个服务所以这个统一的鉴权服务需要保证高可用而且对性能比较敏感稍有不慎流量高峰就有可能对整个系统造成致命打击。但是还是有不少公司在用这种架构模式你说奇怪不奇怪正所谓存在即合理。至于第三种使用网关模式可以说是目前市面上文章吹捧最多的解决方案。当然得到广大程序员的吹捧自然有它的优势但是请记住它并非没有劣势。image从上图清晰的可以看到来自于客户端的所有流量都经过网关所以理论上来讲所有统一化的需求都可以在网关进行实现这样每个后端的业务服务代码都不会有任何的侵入性。至于这些需求最常见的有网关可以屏蔽后端服务的协议细节比如有的服务可能采用的rpc方式有的服务采用的restful方式有的甚至可能采用的比较古老的web Service在网关这一层我们可以统一通信协议这样客户端调用起来会方便很多。可以统一整个系统的认证和授权功能甚至可以统一不同的客户端采用的不同认证方式比如Cookie认证Session认证等。可以统一设置后端服务的保护策略比如不同的服务可以设置不同的白名单系统不同的服务可以采用不同的限流策略等。在网关这个统一的入口更容易做日志的收集工作。虽然网关很香但是一旦整个系统引入网关就会随之带来一些问题增加了网关在请求的整个过程中就至少多了一层转发性能会有稍微下降。网关如果出现问题降造成整个系统不稳定甚至down机这就是网关的单点问题。所以一般网关都会有多个节点。如何引入网关在没有网关的时候系统一般都会有一个无状态的web层这一层的主要作用是根据业务组织后端服务结果来响应客户端的请求例如一个订单详情的请求web层会同时请求订单服务来查询订单信息请求用户服务来查询下单人信息请求商户服务来查询商家信息然后把这些信息组合成客户端想要的数据格式然后返回客户端数据。image如果做鉴权限流等操作同样也是做在这个web层在引入了网关之后这个web层到底还要不要呢不同的公司有不同的做法不过我还是建议保留web层用它来做服务的聚合层这样整体架构就变成了这样image网关和负载均衡通过以上阐述可以看到网关在部署架构上和负载均衡器很像但是它们其实是两种东西。虽然它们都会承载统一的入口流量但是负载均衡器只是单纯的对请求的转发而网关除了对请求的转发之外更重要的职责是统一的业务处理就像鉴权限流降级等。所以从功能角度来说网关几乎可以代替负载均衡器。写在最后你的系统是否需要网关不仅仅要看系统的需求还要看公司的整体技术运维能力毕竟一旦引入网关它对技术上的要求比较高而且对高可用和性能比较敏感。但是网关对于那些统一化的需求有着天然的优势无论是鉴权还是服务的治理所以很多公司引入了网关。无论是采用自建还是开源来实现网关我们都要考虑它的扩展性。现在比较流行的网关有KongZuulTyk 等详细信息可以参见它们的官网。