OpenResty 从入门到实战
温铭
OpenResty 软件基金会第一任主席,Apache APISIX 项目 VP
20903 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 52 讲
结束语 (1讲)
OpenResty 从入门到实战
15
15
1.0x
00:00/00:00
登录|注册

48 | 微服务API网关搭建三步曲(二)

优先级
获取配置的变更
挂载
lua-rapidjson
lua-resty-radixtree
libr3
lua-resty-libr3
lua-resty-r3
router.lua
lua-resty-route
etcd
Orange
Kong
插件
schema
路由
存储
写在最后
架构
技术选型
微服务API网关搭建三步曲(二)

该思维导图由 AI 生成,仅供参考

你好,我是温铭。
在明白了微服务 API 网关的核心组件和抽象概念后,我们就要开始技术选型,并动手去实现它了。今天,我们就分别来看下,路由、插件、schema 和存储这四个核心组件的技术选型问题。

存储

上节课我提到过,存储是底层非常关键的基础组件,它会影响到配置如何同步、集群如何伸缩、高可用如何保证等核心的问题,所以,我们把它放在最开始的位置来选型。
我们先来看看,已有的 API 网关是把数据存储在哪里的。Kong 是把数据储存在 PostgreSQL 或者 Cassandra 中,而同样基于 OpenResty 的 Orange,则是存储在 MySQL 中。不过,这种选择还是有很多缺陷的。
第一,储存需要单独做高可用方案。PostgreSQL、MySQL 数据库虽然有自己的高可用方案,但你还需要 DBA 和机器资源,在发生故障时也很难做到快速切换。
第二,只能轮询数据库来获取配置变更,无法做到推送。这不仅会增加数据库资源的消耗,同时变更的实时性也会大打折扣。
第三,需要自己维护历史版本,并考虑回退和升级。如果用户发布了一个变更,后续可能会有回滚操作,这时候你就需要在代码层面,自己做两个版本之间的 diff,以便配置的回滚。同时,在系统自身升级的时候,还可能会修改数据库的表结构,所以代码层面就需要考虑到新旧版本的兼容和数据升级。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了微服务API网关搭建的关键步骤和技术特点。首先,选择etcd作为存储的优势在于其能满足API网关的配置数据变化、集群和动态伸缩的需求。在路由方面,作者介绍了使用C语言实现前缀树以及基于压缩前缀树的lua-resty-radixtree库。此外,对于插件的实现,作者提到了插件挂载、配置变更获取和插件优先级等方面需要考虑的问题。整体而言,本文以技术选型为主线,为读者详细阐述了微服务API网关搭建的关键步骤和技术特点。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《OpenResty 从入门到实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • FF
    关于 lua 代码的编译和执行,请个温老师几个问题。 问题一。lua 模块中,用 local 关键字定义在**函数外部**的变量,每个 worker 进程只对其在第一次外部请求时进行初始化吗 ?我验证的时候发现有时输出初始值,有时输出改变后的新值,怀疑是不同 worker 进程的输出 ?有点疑惑在此跟你确认下。 问题二。对于非函数的代码块呢?对同个 worker 进程来讲,每次请求都会执行这种代码吗 ?还是仅第一次请求时执行 ?验证时同样结果不是很确定,有时执行,有时又不执行。困惑 类似 lua 代码编译机制,代码在编译器中缓存刷新机制,温老师有无资料分享下 ?我翻了 lua 的官网没找到类似这方面的介绍。 感谢。

    作者回复: 前面两个问题,是否可以提供下具体的示例代码呢?只看文字并不直观。 关于 Lua 编译器的细节,我推荐《自己动手实现 Lua 虚拟机、编译器和标准库》这本书,里面很详细的介绍 Lua 虚拟机和编译器的实现。

    2019-09-13
    3
    1
  • 亢(知行合一的路上)
    老师提到 etcd 作为配置信息的存储,并提供 watch 的功能,这个和消息队列有点类似了,而且是支持持久化的消息队列,如果数据量小的时候,是不是也可以作为 MQ 使用呢?
    2020-03-27
    2
    3
  • wusiration
    没有使用过API网关,所以特别买这个课学习一下。
    2019-09-13
    1
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部