上篇说要介绍APISIX的插件,插件模块化管理,配置可插拔。APISIX目前已发布了 70 多个插件,不一一介绍啦,官网已经说的很清楚。如果现有插件不能满足当前业务需求也可以自行开发插件。为了满足不同需求的自主开发,APISIX 还支持多语言开发插件Java、Go、Python 等多种编程语言(配合Plugin Runner插件运行器)。APISIX 对插件进行了模块化管理,通过插件机制来实现各种流量处理和分发的功能,比如限流限速、日志记录、安全检测、故障注入等,支持用户编写自定义插件来对数据面进行扩充。
APISIX架构图上,分为数据面和控制面,控制面:使用etcd来存储和同步网关的配置数据,管理员可以通过Admin API或者Dashboard可以在毫秒级别内通知到所有的数据面节点。因为APISIX使用了使用etcd作为配置中心,当然也支持Console、Eureka、Nacos等服务作为注册中心。
etcd能干什么?
分布式系统中的数据分为控制数据和应用数据。etcd的使用场景默认处理的数据都是控制数据,对于应用数据,只推荐数据量很小,但是更新访问频繁的情况。常见的etcd使用场景包括: 服务发现、分布式锁、分布式队列、分布式通知和协调、主备选举等
为什么要选择etcd?
- etcd更加稳定可靠,它的唯一目标就是把分布式一致性KV存储做到极致,所以它更注重稳定性和扩展性。
- 在服务发现的实现上,etcd使用的是节点租约( Lease),并且支持Group(多key);而ZooKeeper使用的是临时节点,临时节点存在不少的问题。
- etcd支持稳定的 watch,而不是ZooKeeper一样简单的单次触发( one time trigger )watch。因为在微服务的环境下,通过调度系统的调度,一个服务随时可能会下线,也可能为应对临时访问压力而增加新的服务节点,而很多调度系统是需要得到完整节点历史记录的,在这方面,etcd可以存储数十万个历史变更
- etcd支持MVCC(多版本并发控制),因为有协同系统需要无锁操作。
- etcd支持更大的数据规模,支持存储百万到千万级别的key。相比ZooKeeper,etcd 的性能更好。在一个由3台8核节点组成的云服务器上,etcd v3版本可以做到每秒数万次的写操作和数十万次的读操作。
网关需要在etcd的加持下,可以实现配置下发实时到达所有的网关节点,而且必须要保证强一致性,保证各网关节点的配置一样,即CP模型。