Soul 网关开源的前世今生

Soul网关是为了解决多语言交互、接口不统一等问题而开发的中间件,提供了动态配置、可视化管理、高性能API网关等功能。支持HTTP、RESTful、WebSocket、Dubbo、SpringCloud等协议,具备插件、选择器和规则的动态配置能力,适合企业级应用。文章详细介绍了Soul的由来、架构、功能、使用和未来展望。
内容简介:Soul网关是我在任职某大型电商公司中间件技术部的时候所开发的。开源以后,针对不同的用户需求,进行了功能的升级,比如 支持了首先我们调研了市场上的一些API网关

本文转载自:https://mp.weixin.qq.com/s/92TFLGy_q1e15W3kwtiSWw,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。

Soul网关由来?

Soul网关是我在任职某大型电商公司中间件技术部的时候所开发的。开源以后,针对不同的用户需求,进行了功能的升级,比如 支持了 springcloud websocket restful风格 get请求 ,插件可以定制化开发等等,感谢开源。

当时我们面对什么问题呢?

  • 首先公司有很多语言,java,net,php,Python等等,相互之间的交互只能通过http,调用很不统一,尤其是 java 为主以后,php等语言要调用dubbo服务,dubbo服务者必须提供http服务出来,增加了java后端人员的工作量。

  • 接口鉴权,限流,代理等等很多基本的需求,如果由每个业务系统开发人员开发,增加了成本,风险不可控。

  • 所有的配置没有统一化的管理页面,不利于管理。

  • 接口的性能没有监控,不利于横向扩展。

  • 业务系统进行灰度发布,需要运维进行 nginx 负载,增加了运维的工作量。

  • 等等很多很多的因素,我们需要一个可配置的,可视化,高性能的API网关,做为公司的公用服务。

当时我们怎么解决的呢?

首先我们调研了市场上的一些API网关 zuul kong sc-gateway

  • zuul 是一个中间件产品,完全可以由业务系统自己去引入,性能没达到我们的预期,没有动态化的配置,不利于管理,和我们中间件技术部好像没啥关系。

  • kong kong确实是好,好到它的某些功能是收费的,而且它是 

### Soul 网关概述 Soul 网关是一款高性能、可扩展的微服务网关,其设计灵感来源于 Kong 和 Spring Cloud Gateway 等优秀开源项目[^2]。它支持多种协议和插件化功能,能够满足复杂的业务需求。 #### 特点 Soul 网关具有以下显著特点: - **高可用性和性能**:基于 WebFlux 框架构建,提供异步非阻塞的能力,从而提升系统的吞吐量和响应速度[^4]。 - **灵活的插件机制**:通过插件形式实现各种中间层逻辑处理,例如限流、熔断、日志记录等功能[^1]。 - **多协议支持**:除了 HTTP 协议外,还支持 Dubbo、gRPC 等其他通信协议[^5]。 #### 架构图 以下是 Soul 网关的核心架构概览: ```plaintext +-------------------+ | Admin UI | +---------+--------+ | v +---------+--------+ | Data Sync | -----> Redis/MQ (消息队列) +---------+--------+ | v +---------+--------+ | Plugin | +---------+--------+ | v +---------+--------+ | Gateway Engine | +---------+--------+ ``` 该架构展示了如何通过管理界面配置规则并实时同步到网关引擎中执行相应操作[^3]。 #### 安装与部署指南 为了快速上手 Soul 网关,可以按照如下方式准备开发环境: 1. 下载官方发布的最新版本源码或者二进制包; 2. 配置必要的依赖组件(如 MySQL 数据库用于存储元数据;Redis 或 Kafka 实现动态更新推送); 3. 启动应用后访问默认端口 `8080` 查看运行状态。 #### 示例代码片段 下面是一个简单的 Spring Boot 应用集成 Divide 插件的例子来展示如何定义路由规则: ```java import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Component; @Component public class SoulConfig { @Bean public DivideRule divideRule() { DivideRule rule = new DivideRule(); rule.setContextPath("/example"); rule.setUrlList(Collections.singletonList("http://localhost:9090")); return rule; } } ``` 此段程序设置了当匹配路径 `/example` 的请求会转发给目标服务器监听于 `http://localhost:9090` 地址的服务实例上去完成后续调用过程。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值