API网关框架ShenYu正式毕业成为Apache顶级项目

《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的是Java Reactor 开发的响应式 API 网关——ShenYu。

Apache ShenYu 一款使用 Java Reactor 开发的响应式 API 网关。以其高性能,动态灵活的流量管控,热插拔,易部署等特性,开箱即用为用户提供整套全生命周期的 API 网关,包含 API 注册、服务代理、协议转换与 API 治理等功能。


功能特性

  • 支持各种语言(http 协议),支持 Dubbo、 Spring Cloud、 gRPC、 Motan、 Sofa、 Tars 等协议
  • 插件化设计思想,插件热插拔,易扩展
  • 灵活的流量筛选,能满足各种流量控制
  • 内置丰富的插件支持,鉴权,限流,熔断,防火墙等等
  • 流量配置动态化,性能极高
  • 支持集群部署,支持 A/B Test,蓝绿发布

架构

脑图

模块

  • shenyu-admin : 插件和其他信息配置的管理后台
  • shenyu-bootstrap : 用于启动项目,用户可以参考
  • shenyu-client : 用户可以使用 Spring MVC,Dubbo,Spring Cloud 快速访问
  • shenyu-disruptor : 基于disruptor的封装
  • shenyu-register-center : shenyu-client提供各种rpc接入注册中心的支持
  • shenyu-common : 框架的通用类
  • shenyu-dist : 构建项目
  • shenyu-metrics : prometheus(普罗米修斯)实现的 metrics
  • shenyu-plugin : ShenYu 支持的插件集合
  • shenyu-spi : 定义 ShenYu spi
  • shenyu-spring-boot-starter : 支持 spring boot starter
  • shenyu-sync-data-center : 提供 ZooKeeper,HTTP,WebSocket,Nacos 的方式同步数据
  • shenyu-examples : RPC 示例项目
  • shenyu-web : 包括插件、请求路由和转发等的核心处理包


快速启动

运行ShenYu管理员:

> docker pull apache/shenyu-admin> docker network create shenyu> docker run -d -p 9095:9095 --net shenyu apache/shenyu-admin

运行引导程序:

> docker network create shenyu> docker pull apache/shenyu-bootstrap> docker run -d -p 9195:9195 --net shenyu apache/shenyu-bootstrap

设置路由器:

  • 真实请求: http: //127.0.0.1 :8080/helloworld
{  "name" : "Shenyu",  "data" : "hello world"}
  • 设置路由规则

添加localKey: 123456到header。如果需要自定义localKey,可以使用sha512工具根据明文生成key并更新shenyu.local.sha512Key属性。

curl --location --request POST 'http://localhost:9195/shenyu/plugin/selectorAndRules' \--header 'Content-Type: application/json' \--header 'localKey: 123456' \--data-raw '{    "pluginName": "divide",    "selectorHandler": "[{\"upstreamUrl\":\"127.0.0.1:8080\"}]",    "conditionDataList": [{        "paramType": "uri",        "operator": "match",        "paramValue": "/**"    }],    "ruleDataList": [{        "ruleHandler": "{\"loadBalance\":\"random\"}",        "conditionDataList": [{            "paramType": "uri",            "operator": "match",            "paramValue": "/**"        }]    }]}'
  • 代理请求:http://localhost:9195/helloworld
{  "name" : "Shenyu",  "data" : "hello world"}


数据缓存和数据同步

由于所有数据都已在 JVM 中使用 ConcurrentHashMap 进行缓存,因此速度非常快。

当用户在后台管理中更改配置信息时,Apache ShenYu 通过监听 ZooKeeper 节点(或 WebSocket 推送、HTTP 长轮询)来动态更新缓存。


—END—

开源协议:Apache2.0

开源地址:https://github.com/apache/shenyu

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章