Aerospike - 开发 UDF 的正确方法

Aerospike - proper way to develop UDFs

UDF开发背景
我使用的是 Aerospike 3.5.12。最初,我远程编写 UDF,然后通过 Java 客户端的 UDF 注册方法将其注册到 Aerospike。这个方法有点麻烦(每次更改都需要重新注册),但是很管用。

后来发现直接在Aerospike服务器上编辑文件比较方便,地址是/aerospike_dir/usr/udf/lua/myUdf.lua。这很方便。所做的更改是永久性的,甚至在集群重启后仍然存在(如果我没记错的话)。

最近升级到了3.6.1。我发现直接对 /aerospike_dir/usr/udf/lua/myUdf.lua 所做的更改会被 Aerospike 识别,直到集群重新启动。重新启动后,所有更改都将丢失,文件将恢复为原始版本。

问题
这是正常行为吗?如何禁用此自动还原?或者,如果我没有正确开发 UDF,我应该如何处理它?

您不应该直接编辑在“/opt/aerospike/usr/udf/lua”维护的文件。您应该始终通过注册机制。它在初始开发过程中很麻烦。但是一旦开发稳定下来,您就不会那么频繁地推出对 lua 文件的更改。不直接编辑文件有多种原因。

  1. 当您使用 lua 缓存(默认情况下启用)来提高 udf 的性能时,您直接在文件中所做的更改将不会被选取,除非 aerospike 服务器决定引用其缓存。你无法预测这什么时候会发生。你不应该依赖于此。注册会刷新缓存
  2. 在多节点集群场景中,如何保持 lua 文件的同步?你会更新所有节点上的文件吗?如果你添加一个新节点怎么办?不是更麻烦吗?注册机制负责在集群的所有节点上分发 lua 文件。它还负责分发到稍后可能加入集群的新节点。