- 1、本文档共30页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Orange一个基于OpenResty的APIGatewa
ngx.say(“API Gateway”) with ? by sumory.wu 关于我 读过书、创过业、挖过矿、务过农、做过人民教师、当过中介,现在是一名新闻工作者。 @ 吴兆玉 @ sumory @ 杂烩饭 @ GitHub /sumory 概要 l 问题 需求 l Orange整体架构 l Orange内部实现 l 功能 使用场景 l 不足 TODO l 一些坑 l Q A 问题 需求 问题 需求 一些老生常谈的痛点: ? ? ? ? ? ? ? 又多又杂的Nginx配置文件 历史发版造成的多版本API并存 内网API调用混乱、隔离不清 说好的ABTesting? 畸形数据和API 缓存? Redis? 静态语言变更的痛苦:编译、重启… 问题 需求 一些可能的解决方案: ? ? ? ? ? ? 执行链上挂filter、interceptor、middleware… 往API上打标识、返回值里注入标识 强行插入if/else逻辑分支 Nginx或OpenResty配置里的lua脚本碎片 应用程序里做local cache或Redis cache 手动配置,人肉解决 问题 需求 这是我们想要的解决方案吗? 是否有其它更好那么一些的方式? 是不是应该造个新轮子了? 问题 需求 要解决的问题 需求 WAF ? ? ? 限流 流量甄别 权限控制 API管理 ? ? ? ? 版本管理 统计 重写、变换 监控 Dev/Ops/Test ? ? ? 分流 代理 ABTesting 问题 需求 选型 1024 !!! Orange整体架构 Orange整体架构 Orange整体架构 Orange内部设计实现 Orange内部实现 一些核心概念: ? ? ? ? ? ? plugin rule judge condition selector extractor Orange内部实现 插件设计 Orange内部实现 流量筛选 Orange内部实现 Rule1 Rule2 Rule3 Rule4 Rule5 Rule6 Rule7 Rule8 8步 4步 Plugin = rules Orange内部实现 judge selector2 selector1 selector3 Plugin = selectors with rules Orange内部实现 Get /user/query?id=123field=name Get /user/123/books ${host} = v1 ${uri} = /user/query v2 v1 and (v2 or v3) ${uri} match ^/user/(.*)/books v3 流量筛选(Judge Example) Orange内部实现 Post Headers /user/create?name=sumoryage=18 X-APP-Version: 11 X-APP-Type: android ${method} = post v1 ${uri} = /user/create v2 v1 and v2 and v3 ${header.X-APP-Version} = 10 v3 流量筛选(Judge Example) Orange内部实现 变量提取(extractor example) 功能 使用场景 功能 使用场景 Dashboard API 功能 使用场景 ? ? ? ? ? ? ? ? 节点状态 统计、自定义流量统计 Redirect、Rewrite 分流、ABTesting、代理 访问控制 Rate Limiting 缓存接口 API扩展 不足 Todo 测试?生产经验? l 功能测试:黑盒 l 缺乏局部质量保障:单元测试 l 缺少社区生产反馈 集群? l 关于周边功能:一点小任性 l 存储?一致性? l 服务发现? Zookeeper、consul、etcd, 它应该是足够简单、可 插拔、侵入性足够小的 一些坑 经验 l 读再多次也不够的文档,最佳实践/Github l Lua语言特性 Nginx Worker机制 l 一些编程范式的思考 l 服务前置,前后端分离 l 包管理器的完善(面向工具还是面向应用、 opm scripts支持) l 更加
文档评论(0)