热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微服务“大门”如何选择?

使用微服务网关作为微服务面向客户端的单一入口,是目前普遍采用的微服务架构模式。企业组织通过良好定义的API将内部系统向内部和外部用户公开,通常都会采用A

使用微服务网关作为微服务面向客户端的单一入口,是目前普遍采用的微服务架构模式。企业组织通过良好定义的 API 将内部系统向内部和外部用户公开,通常都会采用 API (微服务)网关来处理横向的关注点,包括访问控制、速率限制、负载均衡等等,来实现安全可控的 API 开放。广泛实践的微服务架构中,似乎有很多产品具有这些能力,那如何更好的根据我们的业务场景选择最合适自己的“大门”呢?

性能选择-Nginx


Nginx 应该是 Web 应用的标配组件,使用场景包括负载均衡、反向代理、代理缓存等。Nginx 的内核的设计非常微小和简洁,实现的功能也相对简单,仅仅通过查找配置文件与请求进行 URL 匹配,用于启动不同的模块去完成相应的工作。

Nginx 在启动后,会有一个 Master 进程和多个 Worker 进程,Master 进程和 Worker 进程之间是通过进程间通信进行交互的。Worker 工作进程的阻塞点是在像 select()、epoll_wait() 等这样的 I/O 多路复用函数调用处,以等待发生数据可读 / 写事件。Nginx 采用了异步非阻塞的方式来处理请求,是可以同时处理成千上万个请求的。

服务亲和-Zuul & Sping Cloud Gateway


Zuul 是 Netflix 开源的微服务网关组件,其可以配合 Eureka、Nacos 等开源产品实现不错的服务发现能力,同时集成Ribbon、Hystrix 或 Sentinel 等组件实现对整个链路的流控。

Zuul 的核心是一系列的过滤器,这些过滤器许多功能,例如:


• 鉴权与访问控制:识别每次请求的合法性,并拒绝那些没有在授权列表中的来源请求。


• 审计与监控:记录每次请求/响应的内容,以及 RT/错误率等,从而分析出 API 的动态质量、安全情况。


• 动态路由负载:动态地将请求路由分流到不同的服务、应用或者集群。


• 统一上下文:在请求转发前根据业务需求设置公共的上下文信息向后传递。


• Mock 响应:针对简单请求可以组合配置中心,直接在网关层直接响应,从而避免其转发到内部。

上面提及的这些特性是 Nginx 所没有的,Netflix 公司研发 Zuul 是为了解决微服务场景的诸多问题,而不仅仅是做一个类似于 nginx 的反向代理。

Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cloud 2.0 以上版本中,没有对新版本的 Zuul 2.0 以上最新高性能版本进行集成,仍然还是使用的 Zuul 2.0 之前的非 Reactor 模式的老版本。而为了提升网关的性能,SpringCloud Gateway 是基于 WebFlux 框架实现的,而 WebFlux 框架底层则使用了高性能的 Reactor 模式通信框架 Netty。

Spring Cloud Gateway 的目标,不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。

两者兼得-Kong


Kong 是一款基于 Nginx_Lua 模块写的高可用服务网关,由于 Kong 是基于 Nginx 的,所以可以水平扩展多个 Kong 服务器。通过前置的负载均衡配置把请求均匀地分发到各个 Server,来应对大批量的网络请求。

Kong 主要有三个组件:


• Kong Server:基于 nginx 的服务器,用来接收 API 请求。
• Apache Cassandra/PostgreSQL:用来存储操作数据。
• Kong dashboard:官方推荐 UI 管理工具,当然,也可以使用 restfull 方式管理 admin api。

Kong 采用插件机制进行功能定制,插件集(可以是 0 或 N 个)在 API 请求响应循环的生命周期中被执行。插件使用 Lua 编写,基础功能包括:HTTP 基本认证、密钥认证、CORS(Cross-Origin Resource Sharing,跨域资源共享)、TCP、UDP、文件日志、API 请求限流、请求转发以及 Nginx 监控等。

Kong 网关具有以下的特性:


• 可扩展性:通过简单地添加更多的服务器,可以轻松地进行横向扩展,这相较于 nginx 能让你省心不少,但可能相对于 Zuul 稍稍弱些;
• 模块化:可以通过添加新的插件进行扩展,这些插件可以通过 RESTful Admin API 轻松配置;
• 在任何基础架构上运行:Kong 网关可以在任何地方都能运行,可以在云或内部网络环境中部署 Kong。

自建 OR 云产品


但是!有过使用经验的同学应该会发现,真正用起来我们还需要更多的服务发现能力、更全面的监控可观测能力、更高的稳定性保障,那么到底是自己手工打造还是购买成本更合适呢?我们先来看下自建和云产品的比较:

自建 VS 托管云产品

能力

自建

托管

弹性扩缩容

需要自建维护K8s

产品控制台直接操作

多种开发语言

Kong 使用 Lua 来扩展(可能还需要掌握 nginx ),Zuul 用 Java 实现

全都要,不用关注

服务发现

Kong 不支持,Zuul 支持部分需要开发

支持 Eureka、Nacos 等

监控大盘

需要一个团队支持,且要二次开发

控制台一键创建

协议转换

需要服务框架团队开发

支持 Http、Dubbo 等

微服务治理

需要中间件团队支持

集成 MSE 支持无损上下线、金丝雀发布、标签路由、离群实例摘除等

对比可以看到,这些能力使用托管的 MSE 微服务网关就相当于省去了一个运维团队、一个中间件团队、一个多语言开发能力的研发团队。现在,您只要结合自己的业务场景选择合适的引擎即可:

  • 接入层场景选择 Kong,性能高 SSL 安全能力匹配;

  • 业务分支选择 Zuul,自定义扩展方便还有很强的服务发现能力;

  • 或者如果你是 Spring Cloud 技术体系,那么赶紧把 Spring Cloud Gateway 加入你的全家桶吧。

云产品的各引擎对比

更多内容了解: 

https://www.aliyun.com/product/aliware/mse

总结


微服务网关作为微服务流量的“大门”,它的稳定性、安全性、功能完备性上的要求是要远远高于我们业务自身的,我们往往需要投入非常大的人力和时间在他的运维和开发上,并还未必能保证有非常好的效果;BaaS 化的服务型(全托管)云产品,帮助我们的用户坚持开源技术栈这一大方向不变的基础上,更稳定、更便捷、更专注的为我们业务保驾护航。

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

长按订阅更多精彩▼如有收获,点个在看,诚挚感谢


推荐阅读
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在ElasticStack日志监控系统中,Logstash编码插件自5.0版本起进行了重大改进。插件被独立拆分为gem包,每个插件可以单独进行更新和维护,无需依赖Logstash的整体升级。这不仅提高了系统的灵活性和可维护性,还简化了插件的管理和部署过程。本文将详细介绍这些编码插件的功能、配置方法,并通过实际生产环境中的应用案例,展示其在日志处理和监控中的高效性和可靠性。 ... [详细]
  • 在探讨Hibernate框架的高级特性时,缓存机制和懒加载策略是提升数据操作效率的关键要素。缓存策略能够显著减少数据库访问次数,从而提高应用性能,特别是在处理频繁访问的数据时。Hibernate提供了多层次的缓存支持,包括一级缓存和二级缓存,以满足不同场景下的需求。懒加载策略则通过按需加载关联对象,进一步优化了资源利用和响应时间。本文将深入分析这些机制的实现原理及其最佳实践。 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
  • 在拉斯维加斯举行的Interop 2011大会上,Bitcurrent的Alistair Croll发表了一场主题为“如何以云计算的视角进行思考”的演讲。该演讲深入探讨了传统IT思维与云计算思维之间的差异,并提出了在云计算环境下应具备的新思维方式。Croll强调了灵活性、可扩展性和成本效益等关键要素,以及如何通过这些要素来优化企业IT架构和运营。 ... [详细]
  • 本文探讨了使用Python进行微服务架构设计的合理性和适用性。首先,介绍了微服务的基本概念及其在现代软件开发中的重要性。接着,通过具体的业务场景,详细分析了Python在微服务架构设计中的优势和挑战。文章还讨论了在实际应用中可能遇到的问题,并提出了相应的解决方案。希望本文能够为从事Python微服务开发的技术人员提供有价值的参考和指导。 ... [详细]
  • 第二章:Kafka基础入门与核心概念解析
    本章节主要介绍了Kafka的基本概念及其核心特性。Kafka是一种分布式消息发布和订阅系统,以其卓越的性能和高吞吐量而著称。最初,Kafka被设计用于LinkedIn的活动流和运营数据处理,旨在高效地管理和传输大规模的数据流。这些数据主要包括用户活动记录、系统日志和其他实时信息。通过深入解析Kafka的设计原理和应用场景,读者将能够更好地理解其在现代大数据架构中的重要地位。 ... [详细]
  • 本文深入解析了Spring Cloud路由网关Zuul的核心功能及其典型应用场景。通过对方志朋老师教材的学习和实践,详细探讨了Zuul在微服务架构中的重要作用,包括请求路由、过滤器链管理以及服务动态扩展等关键特性。同时,结合实际案例,展示了Zuul在高并发和复杂业务场景下的应用优势,为读者提供了全面的技术参考。 ... [详细]
  • 近年来,BPM(业务流程管理)系统在国内市场逐渐普及,多家厂商在这一领域崭露头角。本文将对当前主要的BPM厂商进行概述,并分析其各自的优势。目前,市场上较为成熟的BPM产品主要分为两类:一类是综合型厂商,如IBM和SAP,这些企业在整体解决方案方面具有明显优势;另一类则是专注于BPM领域的专业厂商,它们在特定行业或应用场景中表现出色。通过对比分析,本文旨在为企业选择合适的BPM系统提供参考。 ... [详细]
  • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 本文探讨了利用Python实现高效语音识别技术的方法。通过使用先进的语音处理库和算法,本文详细介绍了如何构建一个准确且高效的语音识别系统。提供的代码示例和实验结果展示了该方法在实际应用中的优越性能。相关文件可从以下链接下载:链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ,提取码:p57s。 ... [详细]
  • 利用Python与Android进行高效移动应用开发
    通过结合Python和Android,可以实现高效的移动应用开发。首先,需要安装Scripting Layer for Android (SL4A),这是一个开源项目,旨在为Android系统提供脚本语言支持。SL4A不仅简化了开发流程,还允许开发者使用Python等高级语言编写脚本,从而提高开发效率和代码可维护性。此外,SL4A还支持多种其他脚本语言,进一步扩展了其应用范围。通过这种方式,开发者可以快速构建功能丰富的移动应用,同时保持较高的灵活性和可扩展性。 ... [详细]
author-avatar
ccer
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有