你好,我是温铭。
在明白了微服务 API 网关的核心组件和抽象概念后,我们就要开始技术选型,并动手去实现它了。今天,我们就分别来看下,路由、插件、schema 和存储这四个核心组件的技术选型问题。
存储
上节课我提到过,存储是底层非常关键的基础组件,它会影响到配置如何同步、集群如何伸缩、高可用如何保证等核心的问题,所以,我们把它放在最开始的位置来选型。
我们先来看看,已有的 API 网关是把数据存储在哪里的。Kong 是把数据储存在 PostgreSQL 或者 Cassandra 中,而同样基于 OpenResty 的 Orange,则是存储在 MySQL 中。不过,这种选择还是有很多缺陷的。
第一,储存需要单独做高可用方案。PostgreSQL、MySQL 数据库虽然有自己的高可用方案,但你还需要 DBA 和机器资源,在发生故障时也很难做到快速切换。
第二,只能轮询数据库来获取配置变更,无法做到推送。这不仅会增加数据库资源的消耗,同时变更的实时性也会大打折扣。
第三,需要自己维护历史版本,并考虑回退和升级。如果用户发布了一个变更,后续可能会有回滚操作,这时候你就需要在代码层面,自己做两个版本之间的 diff,以便配置的回滚。同时,在系统自身升级的时候,还可能会修改数据库的表结构,所以代码层面就需要考虑到新旧版本的兼容和数据升级。