php网关-5种微服务网段

2024-05-01 0 1,142 百度已收录

大家好,我是苏三。

1 API 网段基础知识 1.1 什么是 API 网段?

API网段是服务器,是系统唯一入口。 从面向对象设计角度来看,它与外观模式类似

API部分封装了系统的内部架构,并为每个客户端提供定制的API。 它还可能具有其他职责例如身份验证监控负载平衡缓存协议转换、限流和断路以及静态响应处理

API网段方式核心点是所有客户端和消费者都通过统一网段访问服务,并在网段层处理所有非业务功能。 一般该网段也提供REST/HTTP访问API。

1.2 网段主要功能

微服务网段作为微服务前端服务的统一入口,可以协调前端服务的管理,主要分为数据平面控制平面:

2API网段选择 2.1 常用API网段

我们先简单了解一下市场上常用的API网段:

nginx

Nginx 是一个高性能的 HTTP 和反向代理服务器。 Nginx一方面可以用作反向代理php网关,另一方面可以用作静态资源服务器。 socket使用Lua动态语言完成灵活的定制功能。

Nginx启动后,会有一个Master进程和多个Worker进程。 Master进程和Worker进程通过进程间通信进行交互如图所示。 Worker进程的阻塞点是在select()、epoll_wait()等I/O复用函数调用处,等待数据读/写。 Nginx 使用异步非阻塞的方式来处理请求php网关,这意味着 Nginx 可以同时处理数千个请求

祖尔

Zuul是Netflix的开源API网段组件。 它可以与Eureka、Ribbon、Hystrix等组件一起使用。 社区活跃并融入完整的 Spring Cloud 生态系统。 是微服务系统中建后端网段服务的最佳选择之一。

Zuul的核心是一系列过滤器,可以完成以下功能:

Zuul目前有两个主要版本:Zuul1和Zuul2

Zuul1是基于Servlet框架构建的。 如图所示,它采用阻塞、多线程的方式,即一个线程处理一个连接请求。 这些方法导致存活连接的增加以及严重的内部延迟设备故障。 发生线程降级。

Netflix 发布的 Zuul2 有重大更新。 它在异步和非阻塞框架上运行,每个 CPU 核心有一个线程,处理所有请求和响应。 请求和响应的生命周期是通过波次和反弹来处理的。 这些方法减少线程数量,因此开销更小。

SpringCloudGetWay

SpringCloudGateway是SpringCloud全新的API网段项目目的替代Zuul1。 它基于Spring5.0+SpringBoot2.0+WebFlux(基于高性能Reactor模式响应式通信框架Netty,异步非阻塞模型)等技术开发,性能高于Zuul,官方测试,SpringCloudGateWay的1.6倍Zuul,为微服务架构提供了简单有效的统一API路由管理方法。

SpringCloudGateway可以与SpringCloudDiscoveryClient(如Eureka)、Ribbon、Hystrix等组件配合使用,实现路由转发负载均衡、熔断、鉴权、路径重绘、日志监控等功能。不过Gateway还有一个外接的限流过滤器实现 提供限流功能。

Kong是Mashape基于OpenResty(Nginx+Lua模块编译的一个高可用、易扩展的开源APIGateway项目。 Kong 构建于 NGINX 和 Apache Cassandra 或 PostgreSQL 之上。 它可以提供易于使用的RESTful API来操作配置API管理系统,因此可以水平扩展多个Kong服务器,并通过负载均衡后的配置将请求均匀分配到每个服务器。 ,处理大量网络请求。

Kong具有三个主要组成部分:

Kong采用插件机制进行功能定制。 插件集(可以是0或N)在API请求响应周期的生命周期内执行。 该插件使用Lua编译,目前有几个基本功能:HTTP基本认证密钥认证、CORS(Cross-Origin ResourceSharing,跨域资源共享)、TCP、UDP、文件日志、API请求限流、请求转发和Nginx监控。

Kong网段具有以下特点

拉菲

Træfɪk 是一个现代的 HTTP 反向代理和负载均衡工具,其诞生是为了让部署微服务更加方便。 它支持多个后端(Docker、Swarm、Kubernetes、Marathon、Mesos、Consul、Etcd、Zookeeper、BoltDB、RestAPI、file...)来手动动态应用配置文件设置

重要特点:

关于Traefik的更多信息,您可以查看官方网站

2.2 API网段对比

有网段对比截图。 如果你比较懒,可以重点关注Kong、Traefik和Zuul:

以下是其他网友的想法和推论,供参考

3 基于Traefik自研的微服务网段

这是我公司基于Traefik开发的自主微服务网段。 下面对技术选型、网关框架、网关后端、协议转换进行说明。 绝对有用!

3.1 技术栈选择

3.3 网段框架

整个网段框架分为3块:

3.4 网段背景

它主要由3大模块组成:

一个应用程序只能绑定一个服务,可以绑定多个插件。 通过后台完成网段配置后,将此配置信息生成为Config文件并发布到ETCD。 配置文件需要遵守严格的数据格式。 例如,Traefix配置需要符合官方的文件配置格式,并且能够被Traefik识别

3.5 合约转换模块

hal-proxy模块是整个微服务网段中最复杂、技术最密集的模块,所以我给大家详细讲解一下。

问题介绍

在讲这个模块之前,我们先看以下几个问题:

实现原理

我们先来看看hal-proxy内部都有哪些模块。 第一个是解析器模块。 这个模块的功能是什么? 这里我简单介绍一下。 目前公司内部通过服务获取机器列表的方式有很多种,比如MIS平台、服务树等,即有的通过平台配置,有的直接挂在服务树下。 无论哪种方法,我们都是通过服务名称和某种方法来查找该服务下的所有主机

因此,Resolver模块的作用就是通过服务名找到该服务下所有机器的IP和服务端口,然后持久化到显存中并定期更新

合约模块支持不同的合约转换。 每个合约类型转换都需要单独实现。 这个合约转换无非就是通过机器IP和端口初始化Client,然后转换数据直接发送给下游。 机器。

最后就是连接池。 虽然之前我们使用了Go自带的pool,并且在更新pool数据时需要加锁,所以性能依然无法提升。 后来改成环形队列,然后更新数据。 所有操作均通过原子操作方式完成,从而实现无锁操作,大大提高并发性能。 环形队列的代码也已经为您安排好了。 您可以直接阅读这篇文章

实施逻辑

这是hal-proxy的逻辑实现图。 画了2天。 它包含了所有核心对象的交互方法。 我这里就不详细说了。 你能理解多少取决于你自己。 如果有疑问(或者看不清图片)),可以关注我的公众号,在陌陌上加我交流

欢迎大家加入苏三的知识星球Java突击,一起学习

星球中有很多独家的干货内容,比如:Java后端学习路线分享实战项目,源码分析,百万级系统设计,系统上线的一些坑,MQ专题真实面试题,每天都回答大家提出的问题。

这几天星球开通了3个优质专栏:痛点问题、高频面试题 和 性能优化

每一个专栏都是大家非常关心,和非常有价值话题,我相信在专栏中你会学到很多东西,值回票价。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 php php网关-5种微服务网段 https://www.wkzy.net/game/201636.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务