Fizz Gateway 官方入门教程 —— 快速聚合多接口

<h2>#背景介绍</h2><p>先看一张图,页面一共调用了 20 多个后端接口,页面出现了明显的卡顿,而且每 6 个请求一组,只有前一组返回后才执行下一组。看到请求是 pending 状态,很容易以为是后端接口的问题,有经验的同学可能一眼看出这是浏览器的并发限制导致的,而非后端接口问题。</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-b3f957f32efb70a2.jpeg" img-data="{"format":"jpeg","size":127784,"height":851,"width":1047}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>主流浏览器一般对同一个服务器的并发连接个数都是有限制的,</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-e3685fc52b8362d0.jpeg" img-data="{"format":"jpeg","size":51699,"height":698,"width":1502}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>浏览器为什么要请求并发数限制?</p><p>1. 对操作系统端口资源考虑 PC 总端口数为 65536,那么一个 TCP(http 也是 tcp)链接就占用一个端口。操作系统通常会对总端口一半开放对外请求,以防端口数量不被迅速消耗殆尽。</p><p>2. 过多并发导致频繁切换产生性能问题 一个线程对应处理一个 http 请求,那么如果并发数量巨大的话会导致线程频繁切换。而线程的上下文切换有时候并不是轻量级的资源。这导致得不偿失,所以请求控制器里面会产生一个链接池,以复用之前的链接。所以我们可以看作同域名下链接池最大为 4~8 个,如果链接池全部被使用会阻塞后面请求任务,等待有空闲链接时执行后续任务。</p><p>3. 避免同一客服端并发大量请求超过服务端的并发阈值 在服务端通常都对同一个客户端来源设置并发阀值避免恶意攻击,如果浏览器不对同一域名做并发限制可能会导致超过服务端的并发阀值被 BAN 掉。</p><p>4. 客户端良知机制 为了防止两个应用抢占资源时候导致强势一方无限制的获取资源导致弱势一方永远阻塞状态。</p><h2>#服务编排适用场景</h2><p>服务编排主要基于现有的业务微服务使用在线配置的方式快速的生成一个聚合接口。</p><p>举例说明:</p><p>订单详情页面需要展示订单信息、商品信息和用户信息。可通过配置的方式生成一个接口先后调用底层微服务的订单详情接口、商品信息接口和用户信息接口,再从这 3 个接口的返回结果里提取需要的字段返回给前端页面。</p><p>Fizz 网关的服务编排的适用场景:</p><h3>#前端场景</h3><p>1、一个页面调用多个接口时,可以编排好返回聚合结果,提高页面数据的加载速度</p><p>2、移动设备计算能力有限,可以把数据计算或业务处理逻辑放到服务端完成,加快页面响应</p><h3>#后端场景</h3><p>1、替换应用层的聚合接口,减少应用层的胶水代码</p><p>2、快速生成透传数据类型的接口</p><p>3、数据转换和映射</p><h2>#快速聚合接口</h2><p>上面问题可通过 Fizz 网关的服务编排的聚合功能解决,简单说就是把前端页面要调用的多个接口改为由 Fizz 网关调用,然后把各接口的结果聚合后返回给前端。这样前端只需调用一个简单的聚合接口就可以了。</p><h2>#资料准备</h2><h3>#Fizz 网关安装</h3><p>可参考: https://www.fizzgate.com/fizz/guide/installation</p><h3>#echo 接口</h3><p>后端接口通过一个延时的 echo 接口模拟,模拟前端页面调用 10 个接口</p><p>http://127.0.0.1:8080/echo?latency=1000&echo = 接口 1</p><p>http://127.0.0.1:8080/echo?latency=1000&echo = 接口 2</p><p>...</p><p>http://127.0.0.1:8080/echo?latency=1000&echo = 接口 10</p><p>echo 接口源码:fizz-examples-rest-api</p><h3>#聚合接口</h3><ol><li><p>聚合接口路径:/fast-aggr/aggregate</p></li><li><p>请求方法:POST</p></li><li><p>入参格式:(格式可根据需要自行调整)</p></li></ol><p>{
"params1": {
"latency": 1000,
"echo": "接口1"
},
"params2": {
"latency": 1000,
"echo": "接口2"
},
// ... 省略
"params10": {
"latency": 1000,
"echo": "接口10"
}
}
</p><ol><li>返回结果:(格式可根据需要自行调整)</li></ol><p>{
"result1": "接口1",
"result2": "接口2",
// ... 省略
"result3": "接口10"
}
</p><h3>#新增接口</h3><p>菜单位置:服务编辑 -> 接口列表,点击新增</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-f3fe148282f47582.jpeg" img-data="{"format":"jpeg","size":33745,"height":598,"width":1069}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h3>#配置输入</h3><p>在配置输入 tab 可以定义接口的入参和请求头等信息,如果不配置入参或请求头,网关会原样接收调用方传过来的所有入参或请求头,但不会对接收到的参数做任何校验。在本例子中我们使用约定的入参格式,就不定义入参数了,全留空。</p><h3>#配置步骤</h3><p>因为要并发调用 10 个接口,只需新增 1 个步骤,然后在步骤里新增 10 个 request, 服务选择我们预先准备好的 fizz-examples-rest-api 服务。入参我们使用 * 星号来透传前端传过来的参数,在这里使用了引用值的方式来引用入参,相关引用值的使用方式可参考文档:数据转换使用文档 。配置响应部分留空,网关会原样接收接口的返回结果。 按此方式我们分别配置好 10 个接口。</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-d5d5964d8413dda5.jpeg" img-data="{"format":"jpeg","size":65951,"height":830,"width":1351}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-3bfc749f7b2c28a0.jpeg" img-data="{"format":"jpeg","size":71911,"height":821,"width":1341}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h3>#配置输出</h3><p>配置要返回给前端的响应报文,这里直接引用步骤里的结果</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-f817fb1714fea72a.jpeg" img-data="{"format":"jpeg","size":79385,"height":858,"width":1347}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h2>#测试</h2><p>配置完接口后,点击测试</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-ed53c5f6f17a68e0.jpeg" img-data="{"format":"jpeg","size":61528,"height":842,"width":1191}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><h2>#访问正式接口</h2><p>接口配置好后需要发布并配置路由才可以对公网开放。菜单:编排审核 --> 我的申请,点击新增提交发布申请单。审核通过后即可发布。</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-44ea8b5750f60550.jpeg" img-data="{"format":"jpeg","size":148284,"height":1708,"width":2524}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>发布后配置路由,菜单:网关管理 --> 路由管理</p><div class="image-package"><img src="https://upload-images.jianshu.io/upload_images/5924885-9affd721d58a2748.jpeg" img-data="{"format":"jpeg","size":184132,"height":1650,"width":2520}" class="uploaded-img" style="min-height:200px;min-width:200px;" width="auto" height="auto"/>
</div><p>正式接口访问 URL: http://[网关 IP]:8600/proxy/fast-aggr/aggregate</p><p>前端页面由原来调用多个接口改为调用一个聚合接口即可,大大降低了网络 IO 带来的延时,提高页面访问速度。</p><h2>#Fizz 网关介绍</h2><p>Fizz Gateway 是一个基于 Java 开发的微服务聚合网关,能够实现热服务编排聚合、自动授权选择、线上服务脚本编码、在线测试、高性能路由、API 审核管理、回调管理等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界面,能够快速帮助企业进行 API 服务治理、减少中间层胶水代码以及降低编码投入、提高 API 服务的稳定性和安全性。</p><p>官网:https://www.fizzgate.com</p><p>GitHub: https://github.com/wehotel/fizz-gateway-community</p><p>码云:https://gitee.com/fizzgate/fizz-gateway</p><p>入门教程:https://www.fizzgate.com/fizz/guide/GettingStarted/</p>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容