48 | 微服务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
《OpenResty 从入门到实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(3)
- 最新
- 精选
- FF关于 lua 代码的编译和执行,请个温老师几个问题。 问题一。lua 模块中,用 local 关键字定义在**函数外部**的变量,每个 worker 进程只对其在第一次外部请求时进行初始化吗 ?我验证的时候发现有时输出初始值,有时输出改变后的新值,怀疑是不同 worker 进程的输出 ?有点疑惑在此跟你确认下。 问题二。对于非函数的代码块呢?对同个 worker 进程来讲,每次请求都会执行这种代码吗 ?还是仅第一次请求时执行 ?验证时同样结果不是很确定,有时执行,有时又不执行。困惑 类似 lua 代码编译机制,代码在编译器中缓存刷新机制,温老师有无资料分享下 ?我翻了 lua 的官网没找到类似这方面的介绍。 感谢。
作者回复: 前面两个问题,是否可以提供下具体的示例代码呢?只看文字并不直观。 关于 Lua 编译器的细节,我推荐《自己动手实现 Lua 虚拟机、编译器和标准库》这本书,里面很详细的介绍 Lua 虚拟机和编译器的实现。
2019-09-1331 - 亢(知行合一的路上)老师提到 etcd 作为配置信息的存储,并提供 watch 的功能,这个和消息队列有点类似了,而且是支持持久化的消息队列,如果数据量小的时候,是不是也可以作为 MQ 使用呢?2020-03-2723
- wusiration没有使用过API网关,所以特别买这个课学习一下。2019-09-131
收起评论