当前位置: 首页 > news >正文

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

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


地址:
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: 9820tomcat:threads:max: 200spring:application:name: zza-translation-coredatasource:                  # 支持多数据源dynamic:primary: zza_origin      # 主数据源配置为 zza_origin 库,存储 /doc/sql/zza_origin.sql 中的表datasource:zza_origin:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/zza_origin?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTCusername: rootpassword: rootzza_translation_0:    # 翻译结果数据源 zza_origin 库,存储 /doc/sql/zza_translation.sql 中的表type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/zza_translation_0?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTCusername: rootpassword: rootzza_translation_1:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/zza_translation_1?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTCusername: rootpassword: rootzza_translation_2:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/zza_translation_2?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTCusername: rootpassword: rootmybatis:mapper-locations: "classpath:/mybatis-mapper/*Mapper.xml"type-aliases-package: com.zhangziang.translation.common.pojo.dooconfiguration: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: DElanguage-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.LanguageTypecore-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_TOKENcore-9822:address: 127.0.0.1:9822access-token: ZZA_TRANSLATION_CORE_ACCESS_TOKENcore-9823:address: 127.0.0.1:9823access-token: ZZA_TRANSLATION_CORE_ACCESS_TOKEN
6. 使用

参考示例:zza-translation-demo

相关文章:

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

分布式文本多语言翻译存储平台 地址&#xff1a; Gitee&#xff1a;https://gitee.com/dreamPointer/zza-translation/blob/master/README.md 一、提供服务 分布式文本翻译服务&#xff0c;长文本翻译支持流式回调&#xff08;todo&#xff09;分布式文本多语言翻译结果存储服…...

小智机器人CMakeLists编译文件解析

编译完成后&#xff0c;成功烧录&#xff01; 这段代码是一个CMake脚本&#xff0c;用于配置和构建一个嵌入式项目&#xff0c;特别是针对ESP32系列芯片的项目。CMake是一个跨平台的构建系统&#xff0c;用于管理项目的编译过程。 set(SOURCES "audio_codecs/audio_code…...

SOME/IP--协议英文原文讲解11

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2.6 Er…...

python~http的请求参数中携带map

背景 调试 http GET请求的 map 参数&#xff0c;链路携带参数一直有问题&#xff0c;最终采用如下方式携带map 解决 user{"demo":"true","info":"王者"}url encode之后的效果如下所示 user%7B%22demo%22:%22true%22,%22info%22:%22…...

深研究:与Dify建立研究自动化应用

许多个人和团队面临筛选各种网页或内部文档的挑战,以全面概述一个主题。那么在这里我推荐大家使用Dify,它是一个用于LLM应用程序开发的低代码,开源平台,它通过自动化工作流程的多步搜索和有效汇总来解决此问题,仅需要最小的编码。 在本文中,我们将创建“ Deepresearch”…...

ESP32S3:参考官方提供的led_strip组件使用 SPI + DMA 方式驱动WS2812 RGB灯的实现思路 (实现各个平台移植使用该方式)

目录 引言使用SPI + DMA 方式实现思路分析1. 查看WS2812的datasheet手册2. 根据官方的led_strip组件的方式,自己手把手实现一遍3.完整的程序(实现霓虹灯效果)引言 参考官方提供的led_strip组件使用 SPI + DMA 方式驱动WS2812 RGB灯的实现思路,只有明白实现的思路,方能将其…...

Http模块及练习

### 作业 1. 静态文件服务器 js const http await import(http) const fs await import(fs) const proc ((req,res)>{ let file ./public${req.url} let FilePath file.replace(favicon.ico,"") // 检查文件是否存在 if (!fs.existsSync(FilePa…...

计算机视觉行业洞察--影像行业系列第一期

计算机视觉行业产业链的上下游构成相对清晰&#xff0c;从基础技术研发到具体应用场景的多个环节相对成熟。 以下是我结合VisionChina经历和行业龙头企业对计算机视觉行业产业链上下游的拆解总结。 上下游总结 上游产业链分为软硬件两类&#xff0c;视觉的硬件主要指芯片、…...

C语言番外篇(3)------------>break、continue

看到我的封面图的时候&#xff0c;部分读者可能认为这和编程有什么关系呢&#xff1f; 实际上这个三个人指的是本篇文章有三个部分组成。 在之前的博客中我们提及到了while循环和for循环&#xff0c;在这里面我们学习了它们的基本语法。今天我们要提及的是关于while循环和for…...

【NLP 31、预训练模型的发展过程】

人的行为&#xff0c;究竟是人所带来的思维方式不同还是与机器一样&#xff0c;刻在脑海里的公式呢&#xff1f; 只是因为不同的人公式不同&#xff0c;所以人的行为才不同&#xff0c;可这又真的是人引以为傲的意识吗&#xff1f; 人脑只是相当于一个大型、驳杂的处理器&#…...

sqlclchery面对复杂的sql语句怎么办

面对复杂的SQL语句时&#xff0c;可以采取以下步骤来简化和解决问题&#xff1a; 理解需求 明确查询的目标&#xff0c;确保清楚需要获取哪些数据。 分解查询 将复杂查询拆分为多个简单部分&#xff0c;逐步构建最终结果。 使用注释 添加注释&#xff0c;解释每个部分的逻辑&…...

C++/JavaScript ⭐算法OJ⭐下一个排列

题目描述 31. Next Permutation A permutation of an array of integers is an arrangement of its members into a sequence or linear order. For example, for arr [1,2,3], the following are all the permutations of arr: [1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1]…...

《Mycat核心技术》第17章:实现MySQL的读写分离

作者&#xff1a;冰河 星球&#xff1a;http://m6z.cn/6aeFbs 博客&#xff1a;https://binghe.gitcode.host 文章汇总&#xff1a;https://binghe.gitcode.host/md/all/all.html 星球项目地址&#xff1a;https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…...

Windows 11 使用容器(Docker Podman)

文章目录 背景1、相关网站1.1、WSL1.2、Docker1.3、Podman 2、环境3、安装部署3.1、安装 WSL3.2、Docker3.2.1、Docker Desktop3.2.1.1、安装3.2.1.2、拉取镜像3.2.1.3、启动容器 3.3、Podman3.3.1、安装3.3.2、使用3.3.3、异常处理 总结 背景 Windows 系统中使用容器&#xf…...

代码审计入门学习之sql注入

路由规则 入口文件&#xff1a;index.php <?php // ---------------------------------------------------------------------- // | wuzhicms [ 五指互联网站内容管理系统 ] // | Copyright (c) 2014-2015 http://www.wuzhicms.com All rights reserved. // | Licensed …...

2024信息技术、信息安全、网络安全、数据安全等国家标准合集共125份。

2024信息技术、信息安全、网络安全、数据安全等国家标准合集&#xff0c;共125份。 一、2024信息技术标准&#xff08;54份&#xff09; GB_T 17966-2024 信息技术 微处理器系统 浮点运算.pdf GB_T 17969.8-2024 信息技术 对象标识符登记机构操作规程 第8部分&#xff1a;通用…...

element ui的select选择框

我们首先先试一下&#xff0c;这个东西怎么玩的 <el-select v-model"select" change"changeSelect"><el-option value"香蕉"></el-option><el-option value"菠萝"></el-option><el-option value&quo…...

文档检索服务平台

文档检索服务平台是基于Elasticsearch的全文检索&#xff0c;包含数据采集、数据清洗、数据转换、数据检索等模块。 项目地址&#xff1a;Github、国内Gitee 演示地址&#xff1a;http://silianpan.cn/gdss/ 以下是演示角色和账号&#xff08;密码同账号&#xff09;&#xf…...

使用FastAPI进行可视化部署

文章目录 一、FastAPI介绍二、环境配置三、示例代码1.app.py代码如下2.websocket_handler.py 代码如下3.运行app4.遇到的问题与解决 一、FastAPI介绍 FastAPI是一个高性能的Python Web框架&#xff0c;它基于Starlette并利用了 Python类型提示的优势。它可以帮助我们快速构建具…...

设计模式 之 工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)(C++)

文章目录 C 工厂模式引言一、简单工厂模式概念实现步骤示例代码优缺点 二、工厂方法模式概念实现步骤示例代码优缺点 三、抽象工厂模式概念实现步骤示例代码优缺点 C 工厂模式 引言 在 C 编程中&#xff0c;对象的创建是一个常见且基础的操作。然而&#xff0c;当项目规模逐渐…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

MySQL账号权限管理指南:安全创建账户与精细授权技巧

在MySQL数据库管理中&#xff0c;合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号&#xff1f; 最小权限原则&#xf…...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...

嵌入式常见 CPU 架构

架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集&#xff0c;单周期执行&#xff1b;低功耗、CIP 独立外设&#xff1b;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel&#xff08;原始…...

基于单片机的宠物屋智能系统设计与实现(论文+源码)

本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢&#xff0c;连接红外测温传感器&#xff0c;可实时精准捕捉宠物体温变化&#xff0c;以便及时发现健康异常&#xff1b;水位检测传感器时刻监测饮用水余量&#xff0c;防止宠物…...