热门标签 | 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 托管云产品

在这里插入图片描述

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

接入层场景选择 Kong,性能高 SSL 安全能力匹配;
业务分支选择 Zuul,自定义扩展方便还有很强的服务发现能力;
或者如果你是 Spring Cloud 技术体系,那么赶紧把 Spring Cloud Gateway 加入你的全家桶吧。


推荐阅读
  • 朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上)【下载本文PDF进行阅读】设计模式是前人通过大量的实践总结出来的一些经验总结和最佳实践。在经过多年的软件开发实践之后,回过头 ... [详细]
  • k8s+springboot+Eureka如何平滑上下线服务
    k8s+springboot+Eureka如何平滑上下线服务目录服务平滑上下线-k8s版本目录“上篇介绍了springboot+Euraka服务平滑上下线的方式,有部分小伙伴反馈k ... [详细]
  • 分布式大型互联网企业架构!
    2019独角兽企业重金招聘Python工程师标准摘要:开发工具1.EclipseIDE:采用Maven项目管理,模块化。2.代码生成: ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • 14亿人的大项目,腾讯云数据库拿下!
    全国人 ... [详细]
  • 什么是网关服务器初学linux服务器开发时,我们的服务器是很简单的,只需要一个程序完成与客户端的连接,接收客户端数据,数据处理,向客户端发送数据。但是在处理量很大的情况下,一 ... [详细]
  • Kubernetes(k8s)基础简介
    Kubernetes(k8s)基础简介目录一、Kubernetes概述(一)、Kubernetes是什么(二& ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 单点登录原理及实现方案详解
    本文详细介绍了单点登录的原理及实现方案,其中包括共享Session的方式,以及基于Redis的Session共享方案。同时,还分享了作者在应用环境中所遇到的问题和经验,希望对读者有所帮助。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
author-avatar
mobiledu2502873927
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有