DII4J -- DII平台支持JAVA插件开发

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
OpenSearch LLM智能问答版免费试用套餐,存储1GB首月+计算资源100CU
简介: DII4J是DII for Java的简称,是DII平台提供的一种Java插件的运行机制,在Java插件中,用户可以获取与C++插件完全一致的能力。

DII4J是什么?

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

DII4J_Introduction

DII4J怎么玩?

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

DII4J_example

示例插件的Java代码中,使用用户Query来查询本地KV表,并输出最终查询到的类目信息,如下所示:

import com.taobao.search.dii4j.framework.ProcessContext;
import com.taobao.search.dii4j.framework.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平台在推荐算法中有广泛应用,如:猜你喜欢等。一个典型的推荐在线服务架构如下所示:

DII4J_advance_old

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

DII4J_advance_new

如上所述,DII4J提供的Java插件开发能力给DII平台的业务开发增添了许多可能性。DII4J还能怎么玩,期待大家发挥想象力,一起造起来!

目录
相关文章
|
11天前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
19天前
|
机器学习/深度学习 人工智能 监控
Java与AI模型部署:构建企业级模型服务与生命周期管理平台
随着企业AI模型数量的快速增长,模型部署与生命周期管理成为确保AI应用稳定运行的关键。本文深入探讨如何使用Java生态构建一个企业级的模型服务平台,实现模型的版本控制、A/B测试、灰度发布、监控与回滚。通过集成Spring Boot、Kubernetes、MLflow和监控工具,我们将展示如何构建一个高可用、可扩展的模型服务架构,为大规模AI应用提供坚实的运维基础。
135 0
|
1月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
1月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
57 0
|
2月前
|
安全 Java 数据库
Java 项目实战病人挂号系统网站设计开发步骤及核心功能实现指南
本文介绍了基于Java的病人挂号系统网站的技术方案与应用实例,涵盖SSM与Spring Boot框架选型、数据库设计、功能模块划分及安全机制实现。系统支持患者在线注册、登录、挂号与预约,管理员可进行医院信息与排班管理。通过实际案例展示系统开发流程与核心代码实现,为Java Web医疗项目开发提供参考。
141 2
|
2月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
174 3
|
19天前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
84 1
|
19天前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
72 1
|
1月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案