DII4J是什么?
DII是一个算法在线服务平台,定位于为算法和工程同学提供可定制化的在线服务解决方案。平台提供了数据回流、集群搭建、版本发布、日常运维等算法服务的全生命周期管控能力。DII在线服务框架支持丰富的表结构类型以及强大的多表检索能力,并提供灵活的插件机制,开发者只需专注于算法逻辑的实现,即可以实现一个完整的在线服务。目前DII已经在搜索、推荐、优酷、菜鸟等多个业务线广泛应用,平台的高性能和易用性得到了同学们的一致认可。但是长期以来,由于DII的插件开发只支持C++语言,Java的同学们只能望而却步,无法享受到平台的红利。但是从现在起,用户可以基于我们最新推出的DII4J,直接在DII平台上使用Java来开发插件了。DII4J是DII for Java的简称,是DII平台提供的一种Java插件的运行机制,在Java插件中,用户可以获取与C++插件完全一致的能力。

DII4J怎么玩?
实现一个Java插件,用户只需继承DII4J的插件接口Dii4jModule并实现其中的init、cloneModule和process方法即可。假定有个业务需要一个类目预测服务,并且算法同学已经在离线挖掘出一份常用Query到类目映射的ODPS词表,作为一名资深Java开发,如何利用DII4J来构建出这么一个类目预测的在线服务呢?首先我们需要在DII平台上录入这张ODPS表,平台会自动完成从ODPS到在线KV表的回流,然后再来编写一个简单的DII4J模块,即可以完成整个功能。大致处理流程如下所示:

示例插件的Java代码中,使用用户Query来查询本地KV表,并输出最终查询到的类目信息,如下所示:
import com.taobao.search.dii4j. work.ProcessContext;import com.taobao.search.dii4j. work.ResultManager;import com.taobao.search.dii4j.plugin.Dii4jModule;import com.taobao.search.dii4j.util.AnyContainer;public class SampleModule extends Dii4jModule { private String tableName; @Override public int init(AnyContainer conf) { tableName = conf.get("table").get("name").getAsString(); if (null == tableName || tableName.isEmpty()) { return -1; } return 0; } @Override public Dii4jModule cloneModule() { SampleModule module = new SampleModule(); module.tableName = tableName; return module; } @Override public int process(ProcessContext processContext, ResultManager resultManager) { tracer.info("start process"); String query = processContext.getPara("query"); if (null == query || query.isEmpty()) { tracer.warn("failed to get pare:[query]"); return -1; } String cat = store.getString(tableName, query); if (null == cat) { tracer.warn("failed to get value with tableName:[%s] and query:[%s]", tableName, query); return -1; } AnyContainer result = resultManager.getContainer("result", AnyContainer.Type.MAP); result.add("cat", cat); return 0; }}DII平台上还提供了表数据更新的功能,来满足用户手动干预或实时更新词表的需求。
用户可以借助Store对象访问本地表,实现更加复杂的功能,同时,所有在Java开发环境中支持的二方包、三方包,都可以无障碍在DII4J中集成使用;各种Java调试工具的使用,也都是没有差异的。
DII4J还能怎么玩?
DII平台在推荐算法中有广泛应用,如:猜你喜欢等。一个典型的推荐在线服务架构如下所示:

对于猜你喜欢、手淘首页这样的大规模推荐场景,上面的架构既利用了IGRAPH、BE和RTP各自强大的数据管理和计算能力,又充分发挥了TPP平台快捷访问第三方服务和组装业务逻辑的能力。但对于一些数据规模相对较小的新兴业务场景来说,如果需要分别部署和接入IGRAPH、BE、RTP、TPP多个系统才能搭建起一个类似的推荐在线服务,成本是非常高的。而有了DII4J之后,用户直接在DII平台就可以搭建起一个简单但功能完整的推荐在线服务,结构如下:

如上所述,DII4J提供的Java插件开发能力给DII平台的业务开发增添了许多可能性。DII4J还能怎么玩,期待大家发挥想象力,一起造起来!
继续阅读与本文标签相同的文章
-
面对人工智能的发展,人类未来将扮演怎样的角色?
2026-05-19栏目: 教程
-
2019 DevOps 必备面试题——持续集成篇
2026-05-19栏目: 教程
-
从“人工智障”到“人工智能”,Siri开始说人话了!
2026-05-19栏目: 教程
-
Flink 1.9 实战:使用 SQL 读取 Kafka 并写入 MySQL | 9月4号栖夜读
2026-05-19栏目: 教程
-
历时五天用 SwiftUI 做了一款 APP,阿里工程师如何做的?
2026-05-19栏目: 教程
