本文介绍了 Apache APISIX 在趣链科技 BaaS 平台中的落地实际状况,以及趣链科技在泛滥网关利用中抉择 Apache APISIX 的起因。
业务背景
BaaS(Blockchain as a Service),中文为“区块链即服务”,是指将区块链框架嵌入云计算平台,利用云服务基础设施的部署和治理劣势,为开发者提供便捷、高性能的区块链生态环境和生态配套服务,反对开发者的业务拓展及经营反对的区块链开放平台。
通常状况下,一套残缺的 BaaS 解决方案包含设施接入、访问控制、服务监控和区块链平台四个次要环节。
通过 BaaS 能够疾速灵便地搭建区块链网络,对于企业来说,有了 BaaS 平台就可能对区块链业务进行对立的治理。
置信有不少敌人接触过以太坊下面的合约代码,通过 BaaS 平台,咱们可能很轻松地在 IDE 上编写智能合约,而后把它部署到咱们的创立进去的区块链网络上,最初供下层的服务调用区块链相干的合约来进行业务的流转。
因为链的节点十分多,少则几十个,多则上千个,如果没有 BaaS 平台的反对,咱们很难监控和保护链的运行。通过应用 BaaS 平台,用户不仅可能节约老本,而且能够更加便捷地治理区块链,晋升整个零碎的安全系数。
趣链科技 BaaS 产品的架构总共分为四层,别离为资源层、区块链底层、区块链服务层和应用层。
当初咱们对 Baas 平台有了初步的理解,上面咱们来看看 Apache APISIX 在 BaaS 零碎上的应用场景与播种。
Apache APISIX 的应用场景
场景 1:在 BaaS 零碎上的落地实际
从这张图中能够看到,趣链科技 BaaS 平台的架构不仅是微服务化的,而且分为两层,别离是业务接入层和外围服务层。
BFF(Backend For Frontend)个别对着前端,通过 HTTP 接入。外围服务个别是通过相似 Dubbo、ETCD 等服务注册,最初应用 gRPC 来拜访。
也就是说,趣链科技的 BaaS 平台前端连贯的都是 BFF 模块,而后 BFF 模块再去连贯前面的微服务模块。BFF 的作用次要就是做业务聚合、格局适配,并把最终的后果数据给到前端。
这些业务模块须要把相干信息存到注册核心(ETCD),当要应用的时候,再通过网关模块把信息读取进去。
在整个流程中,咱们次要用到了 Apache APISIX 的四个个性:
- 路由转发
- 流量管制
- 安全控制
- 动静加载
咱们上面再来理解下这些个性在趣链 BaaS 零碎上是如何应用的。
路由转发
趣链科技应用 Apache APISIX 官网提供的 Proxy-rewrite 插件执行路由转发服务。
当一个申请拜访 8080 端口,通过 Proxy-rewrite 插件,申请会被转发到对应服务的 API 下来。
上图为 Proxy-rewrite 的操作界面,咱们能够看到能够通过正则匹配来匹配本人的转发规定,当然也能够通过写 HOST 或者通过 URL 来匹配。
限流治理
在趣链 BaaS 平台中,客户能够依据本人的须要构建任何链。此时,BaaS 平台须要疾速地反对创立这些链,并对它们进行生命周期治理。
这些联盟链的创立,并不是通过硬代码间接写在代码上,而是通过驱动组件来解决的。在私有化场景中,咱们须要有这样驱动组件来疾速地提供反对,并须要管制驱动过程的拜访频率。
在没有 Apache APISIX 之前,平台须要本人写逻辑代码,有 Apache APISIX 当前,咱们能够间接应用官网提供的 Limit-req 插件来限度输入输出,以达到爱护零碎的目标。通过 Limit-req 插件的操作界面,咱们能够很不便地配置速度、桶低等参数。
安全控制、权限治理
在趣链科技的私有化场景,有不少用户不喜爱用平台所提供的账号体系,要求平台对接他们现有的账户零碎,所以趣链科技应用了 Apache APISIX 的 Access-Auth 插件来适配第三方的鉴权服务地址。
在趣链科技的 Baas 平台中,所有的 Web 申请都会通过 Apache APISIX 的 Access-Auth 插件,实现 cookie 解析和鉴权,而后在 HEAD 头中携带用户信息,传给后端的微服务来解决业务。这样做的益处是,微服务的开发者不须要去解析 Cookie,而是能够间接把用户信息发送到微服务模块,十分不便。
动静加载
上图右边是趣链科技 Baas 平台的客户端界面,下面没有“商店”的按钮;但在上图的左边,趣链科技的 Baas 公共平台上却有一个“商店”的按钮。在某些私有化场景中不须要“商店”按钮,但二者的后盾服务是共享的,只有后端服务一启动,平台界面就会依据需要进行不同的显示。
趣链科技利用 Apache APISIX 与服务中心协同运作,保障前端微服务业务模块的新增和调整,这让趣链科技 Baas 平台的线上公布流程变得非常简单。
场景 2:在区块链节点上的落地实际
通过上图能够看到有 A、B、C 三条链,这三条链是怎么创立进去的呢?
当用户通过 BaaS 平台购买了一条链,它的下层业务或开发者客户端就能够直连节点,比方某银行连左三个,某保险连右三个,或者有的用户就拜访一整条链。这样会带来一个很大的问题,因为基本上每个节点都会被拜访到,所以咱们须要在公网环境上把所有的区块链上的节点全副都裸露进去。
节约公网端口
以这张图为例,咱们能够看到 6 个节点,那这条链就至多须要有 6 个公网 IP 和 6 个端口。
这种状况对私有化的用户来说可能还能够承受,然而对于像趣链这样全副对互联网用户凋谢的 BaaS 平台,少则须要几十个,多则须要上百个、上千个公网 IP。这样不仅老本十分高,也对公网 IP 资源造成了节约。
为了解决这个问题,趣链科技的 Baas 平台应用了 Apache APISIX 对立对外提供服务,无需联盟链全量节点裸露外网拜访端口,能够无效节约老本。
拜访权限管制
对于传统软件来说,因为不同的异构链拜访都有本人非常复杂的 RBAC 权限管制,所以用户须要在客户端加很多证书,十分令人头疼。
为了解决这个痛点,趣链科技 BaaS 平台通过 Apache APISIX 的 Key-auth 插件让有权限的用户间接可能拜访,并且对立所有链的权限管制。
集群化晋升节点稳定性
区块链的一个个性是:实质上,拜访任何一个节点都是一样的。就像比特币一样,咱们拜访任何一个节点都能拿到数据,所以很多用户间接对着某个节点进行操作。
然而,间接拜访单节点的模式很容易受到攻打。比如说,银行的并发量十分高,TPS 能够达到 4-5W/ 秒,每一次交易都会冲击这个节点。
为了可能达到疾速动静扩容的成果,趣链科技 BaaS 平台利用 Apache APISIX 在 Kubernetes 上的 HPA 部署模式,依据流量动静地扩大,无效解决了单点流量冲击问题。
多协定反对
趣链科技 BaaS 平台应用了很多的异构链,这导致应用到的协定十分多样,如 HTTP、RPC、WebSocket 等。而 Apache APISIX 能很好地反对多协定,齐全能满足趣链科技 BaaS 平台在相干场景中的应用,能显著缩小开发的老本。
为什么抉择 Apache APISIX?
在 Apache APISIX 之前,趣链科技 BaaS 平台曾经在应用 Kong 了,然而起初 Kong 被放弃了。
为什么放弃 Kong?
Kong 应用 PostgreSQL 来存储它的信息,这显然不是一个好形式。
在软件行业,数据库的高可用配置非常复杂。不仅须要装备专门的 DBA,施行难度也十分大。
趣链科技 BaaS 零碎自身曾经在应用 MySQL,如果这里还须要搭建一个 PostgreSQL 数据库的话,意味着趣链科技的 BaaS 零碎须要有两套关系型数据库。这会给施行难度、运维老本带来更多麻烦,引入更多危险。
同时,因为趣链科技 BaaS 平台也有不少中央用到了 etcd,所以最初趣链科技抉择放弃 Kong,全面投向了基于 etcd 的 Apache APISIX。
为什么不应用 Nginx?
可能会有敌人会想,那为什么不应用 Nginx?
其实趣链科技 BaaS 平台以前用的就是 Nginx,然而起初发现,Nginx 与 Apache APISIX 相比还是有很多不欠缺的中央。
- 热启动、热插件问题
在趣链 BaaS 平台中,咱们不仅须要对联盟链进行治理,而且要可能随时对节点进行新增、删除。如果应用 Nginx,不仅存在扩展性问题,调整配置后还须要重启。而且在插件的编写上,Nginx 上须要配置非常复杂的规定代码。
- 集群化艰难
Nginx 的集群化十分艰难,而 Apache APISIX 能够通过 etcd 集群的加强性能来实现。
- 无奈间接代理 TCP、UDP
Nginx 在默认状况下只能实现七层网络的代理,如果要反对四层网络,须要把 Stream 模块从新编译,而 Apache APISIX 能同时反对四 / 七层的代理。
- 没有良好的 Dashboard
Nginx 没有 Dashboard,而 Apache APISIX Dashboard 能让开发、运维人员对于治理节点的难度变小。
将来布局
1. 使用 Apache APISIX 提供或自研的日志插件
Apache APISIX 官网已提供了不少日志插件,比方对 HTTP、UDP 的反对,包含 Kafka 等,但像趣链 BaaS 这样须要管控成千上万区块链网络的平台,当每次问题产生的时候,在日志中翻找故障痕迹都是一件十分头痛的事件。
在不久的未来,趣链科技会在 BaaS 零碎和区块链零碎之间,基于 Apache APISIX 减少一些 APM 性能,晋升多链场景下的运维管理效率。
2. 开发监管插件,实现操作留痕及溯源
国内对于区块链的监管十分严格,所有操作都须要留痕和溯源。将来,趣链科技会基于 Apache APISIX 开发监管插件来晋升监管能力,减少 VIP、白名单、回放等性能。
3. 应用 APISIX Ingress Controller,代替 Kubernetes 默认的 Nginx-Ingress
在部署 Kubernetes 的时候,咱们个别都会抉择 Nginx-Ingress 来解决外网申请,但因为下面提到的一些 Nginx 的问题,趣链科技正在调研应用 APISIX Ingress Controller。
4. 摸索 Service Mesh
趣链科技之前尝试过 traffic-mesh,将来会尝试应用 APISIX Mesh。
作者介绍:
盛威锋,现趣链科技区块链服务平台(BaaS)架构师。长期从事国产自主区块链服务平台技术的研发,相干成绩服务于包含建设银行、光大银行等国内多个大中型银行的总行级区块链建设项目,对区块链运行机制、联盟跨域组网、区块链利用落地等方面有深刻理解与实际。
对于 Apache APISIX
Apache APISIX 是一个动静、实时、高性能的开源 API 网关,提供负载平衡、动静上游、灰度公布、服务熔断、身份认证、可观测性等丰盛的流量治理性能。Apache APISIX 能够帮忙企业疾速、平安的解决 API 和微服务流量,包含网关、Kubernetes Ingress 和服务网格等。
寰球已有数百家企业应用 Apache APISIX 解决要害业务流量,涵盖金融、互联网、制作、批发、运营商等等,比方美国航空航天局(NASA)、欧盟的数字工厂、中国航信、中国移动、腾讯、华为、微博、网易、贝壳找房、360、泰康、奈雪的茶等。
200 余位贡献者,一起缔造了 Apache APISIX 这个世界上最沉闷的开源网关我的项目。聪慧的开发者们!快来退出这个沉闷而多样化的社区,一起来给这个世界带来更多美妙的货色吧!
- Apache APISIX GitHub:https://github.com/apache/apisix
- Apache APISIX 官网:https://apisix.apache.org/
- Apache APISIX 文档:https://apisix.apache.org/zh/…