【开源项目】分布式文本多语言翻译存储平台

news/2025/2/24 20:45:43

分布式文本多语言翻译存储平台


地址:
Gitee:https://gitee.com/dreamPointer/zza-translation/blob/master/README.md

一、提供服务

  • 分布式文本翻译服务,长文本翻译支持流式回调(todo)
  • 分布式文本多语言翻译结果存储服务,提供可定制化的数据源分片存储方案
  • 文本翻译结果后台管理服务,提供翻译结果可视化、修改支持(todo)

二、特点

  • 分布式部署:zza-translation-core 服务支持集群部署,zza-translation-client 客户端采用轮询策略实现(CoreServerSelector.java)
  • 高度并行化:文本翻译、已翻译文本获取/存储等操作按数据源分片策略并行执行
  • 并行自适应性调整(todo):当并行执行的线程数量较高时,可自适应调整为串行,减少线程上下文切换开销
  • 高效网络传输:客户端(TransClient.java)与服务端(TransService.java)之间的数据传输使用 ProtoBuf 进行压缩(todo),服务端网络应用(CoreServer.java)采用 Netty 实现
  • 翻译失败重试:开启失败担保策略下,当依赖的第三方翻译服务不可用或请求翻译失败,将翻译失败的请求存储,由后台线程 retry 处理(TextTranslateFailedGuarantor.java),默认支持最大重试次数为 5 次,失败则丢弃
  • 高效缓存:使用 LRU 策略的 Caffeine 作为本地缓存,以单条翻译结果为单位进行存储
  • 定制化存储:翻译文本数据库支持自定义分库分表数量,以及语言类型与数据源关系映射

三、软件架构

1. 网络应用层:Netty
  • CoreServer.java
    支持 token 身份验证
2. 数据存储层:MySQL
  • DynamicDatasourceInterceptor.java:
    基于动态数据源实现分库分表检索

  • 原文本数据库:zza_origin

    • text_origin_${0…9}
  • 翻译文本数据库:zza_translation_${0…n}

    • text_translation_KaTeX parse error: Expected group after '_' at position 15: {languageType}_̲{0…n}
3. 本地缓存:Caffeine
  • TranslationCache.java:
    采用Caffeine LRU策略实现,未指定长度时,默认为5000
4. 翻译失败担保
  • TextTranslateFailedGuarantor.java:
    支持自适应的失败重试策略,根据失败数量动态调整重试并行度
5. 第三方翻译服务

第三方服务支持:

  • 百度翻译:BaiduTranslator.java
  • 阿里云翻译:AliyunTranslator.java

四、模块介绍

  • zza-translation-core:文本多语言翻译与存储服务,支持集群部署
  • zza-translation-client:文本多语言翻译存储服务客户端,采用轮询策略
  • zza-translation-console:文本翻译结果控制台,支持对翻译结果的修改(todo)
  • zza-translation-demo:客户端应用示例

五、安装教程

1. 配置MySQL数据库,导入SQL语句

导入 doc/sql 目录下的SQL

创建 zza_translation.sql 下 text_translation_* 相关的表,需要修改表名。

格式:text_translation_KaTeX parse error: Expected group after '_' at position 15: {languageType}_̲{idx}

  • ${languageType}: 支持的语言类型,com.zhangziang.translation.common.constant.LanguageType.CN.name().toLowerCase()
  • ${idx}: 分片索引,与 zza-translation-core 服务下 application.yml 配置中的 zza-trans.language-table-sharding 对应, 开始索引为0,最大值为 zza-trans.language-table-sharding - 1

比如:支持语言类型为中文(CN)、英文(EN),翻译结果表分片为10(zza-trans.language-table-sharding = 10),则需要创建 text_translation_cn_{0…9}、text_translation_en_{0…9}

2. 配置 zza-translation-core
  1. 配置application.yml
server:
  port: 9820
  tomcat:
    threads:
      max: 200

spring:
  application:
    name: zza-translation-core
  datasource:                  # 支持多数据源
    dynamic:
      primary: zza_origin      # 主数据源配置为 zza_origin 库,存储 /doc/sql/zza_origin.sql 中的表
      datasource:
        zza_origin:
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/zza_origin?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
          username: root
          password: root
        zza_translation_0:    # 翻译结果数据源 zza_origin 库,存储 /doc/sql/zza_translation.sql 中的表
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/zza_translation_0?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
          username: root
          password: root
        zza_translation_1:
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/zza_translation_1?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
          username: root
          password: root
        zza_translation_2:
          type: com.alibaba.druid.pool.DruidDataSource
          driver-class-name: com.mysql.cj.jdbc.Driver
          url: jdbc:mysql://localhost:3306/zza_translation_2?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC
          username: root
          password: root

mybatis:
  mapper-locations: "classpath:/mybatis-mapper/*Mapper.xml"
  type-aliases-package: com.zhangziang.translation.common.pojo.doo
  configuration:
    map-underscore-to-camel-case: true
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # Mybatis Log

# zza-trans-config
zza-trans:
  core-server:
    port: 9821                # CoreServer 端口
    access-token: ZZA_TRANSLATION_CORE_ACCESS_TOKEN # 请求身份验证标识
  datasource-language:        # "数据源名称"与"对应语言类型"存储分片映射关系
    zza_translation_0: CN,EN  # 语言类型:com.zhangziang.translation.common.constant.LanguageType.name()
    zza_translation_1: JA,FR  
    zza_translation_2: DE
  language-table-sharding: 10 # 翻译结果存储表分片数
  cache-size: 5000            # 本地缓存大小
  failed-guarantee: true      # 是否开启翻译失败重试机制
  translator:                 # 第三方翻译工具
    baidu:
      app-id: "20231130001896326"
      secret-key: "prEilA7caZpzDluJmV2j"
      qps-limit: 1
3. 部署 zza-translation-core
4. 服务中引入 zza-translation-client 依赖
    <dependency>
        <groupId>com.zhangziang</groupId>
        <artifactId>zza-translation-client</artifactId>
        <version>${zza-trans.version}</version>
    </dependency>
5. 配置CoreServer服务地址
zza-trans:
  languages: CN,EN,JA,DE,FR   # com.zhangziang.translation.common.constant.LanguageType
  core-server: # 服务名称以及对应地址、访问身份校验(access-token需与该zza-translation-core服务中配置的 zza-trans.core-server.access-token 值相同)
    core-9821: # 服务名称(可以任意命名,但多个服务名不可重复)
      address: 127.0.0.1:9821 # 服务地址IP与CoreServer端口(端口需与该zza-translation-core服务中配置的 zza-trans.core-server.port 值相同)
      access-token: ZZA_TRANSLATION_CORE_ACCESS_TOKEN
    core-9822:
      address: 127.0.0.1:9822
      access-token: ZZA_TRANSLATION_CORE_ACCESS_TOKEN
    core-9823:
      address: 127.0.0.1:9823
      access-token: ZZA_TRANSLATION_CORE_ACCESS_TOKEN
6. 使用

参考示例:zza-translation-demo


http://www.niftyadmin.cn/n/5864802.html

相关文章

亲测Win11电脑可以安装LabVIEW的版本,及2015、2018、2020版本直接的区别

下面是我电脑的信息 设备名称 DESKTOP-04HHS8S 处理器 13th Gen Intel(R) Core(TM) i5-13500H 2.60 GHz 机带 RAM 16.0 GB (15.7 GB 可用) 设备 ID 82798104-C565-4167-A21E-5EB5DEFAA541 产品 ID 00331-20300-00000-AA678 系统类型 64 位操作系统, 基于 …

【mysql中mvcc的含义和作用及原理】

MySQL中的MVCC&#xff08;多版本并发控制&#xff09;是一种用于提高数据库并发性能的机制&#xff0c;通过维护数据的多个版本&#xff0c;实现读写操作的无锁并发。以下是其核心要点&#xff1a; 1. MVCC的含义 全称&#xff1a;Multi-Version Concurrency Control&#xf…

基于ffmpeg+openGL ES实现的视频编辑工具-添加背景音乐(十一)

在视频编辑领域,为视频添加背景音乐并实现音频的完美融合是一项关键任务。在上一篇文章中,我们大体介绍了添加背景音乐的整体逻辑,而本文将深入探讨其中音频合并所依赖的滤镜逻辑,通过对相关代码的详细解读,揭示音频合并的核心技术。 一、音频合并滤镜类的初始化 AudioA…

新能源汽车核心元件揭秘:二极管、三极管结构与工作原理解析(2/2)

上一节我们讲了二极管的原理, 原文章: https://zhuanlan.zhihu.com/p/25252117833 看了的朋友应该很容易懂这节课 这篇文章我们来说说三极管的工作原理啊 这里要说下几个概念 1 半导体的导通, 就是说里面的负电荷电子和正电荷空穴可以大量的从 一个地方达到我们想要的地方…

Flink JobManager不稳定的典型情景

概述 Flink JobManager作为作业调度的核心组件&#xff0c;其不稳定性通常由作业设计、资源分配或运行时的极端场景引发。 本文介绍可能导致 JobManager 不稳定的典型场景。 情景1&#xff1a; 大规模作业的元数据压力 场景描述&#xff1a; 如果作业的拓扑结构过于复杂&…

【Linux】基于UDP/TCP服务器与客户端的实现

目录 一、UDP &#xff08;一&#xff09;Server.hpp &#xff08;二&#xff09;Server.cpp &#xff08;三&#xff09;Client.hpp &#xff08;四&#xff09;Client.cpp &#xff08;五&#xff09;User.hpp 二、TCP &#xff08;一&#xff09;多进程版本的服务器与…

Leetcode 3464. Maximize the Distance Between Points on a Square

Leetcode 3464. Maximize the Distance Between Points on a Square 1. 解题思路2. 代码实现 题目链接&#xff1a;3464. Maximize the Distance Between Points on a Square 1. 解题思路 说来惭愧&#xff0c;这道题我也没有自力搞定&#xff0c;也是问了一下DeepSeek R1之…

模型思维 - 领域模型的应用与解析

文章目录 引言模型的核心作用与价值四大模型类型UML建模工具UML类图的核心价值类关系深度剖析企业级建模实践 领域模型&#xff08;推荐&#xff09; vs 数据模型&#xff08;不推荐&#xff09;区别联系错把领域模型当数据模型错误方案 vs 正确方案对比正确方案的实现1. 数据库…