【开源项目】分布式文本多语言翻译存储平台
分布式文本多语言翻译存储平台
地址:
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
- 配置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
相关文章:
【开源项目】分布式文本多语言翻译存储平台
分布式文本多语言翻译存储平台 地址: Gitee:https://gitee.com/dreamPointer/zza-translation/blob/master/README.md 一、提供服务 分布式文本翻译服务,长文本翻译支持流式回调(todo)分布式文本多语言翻译结果存储服…...
小智机器人CMakeLists编译文件解析
编译完成后,成功烧录! 这段代码是一个CMake脚本,用于配置和构建一个嵌入式项目,特别是针对ESP32系列芯片的项目。CMake是一个跨平台的构建系统,用于管理项目的编译过程。 set(SOURCES "audio_codecs/audio_code…...
SOME/IP--协议英文原文讲解11
前言 SOME/IP协议越来越多的用于汽车电子行业中,关于协议详细完全的中文资料却没有,所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块: 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2.6 Er…...
python~http的请求参数中携带map
背景 调试 http GET请求的 map 参数,链路携带参数一直有问题,最终采用如下方式携带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…...
计算机视觉行业洞察--影像行业系列第一期
计算机视觉行业产业链的上下游构成相对清晰,从基础技术研发到具体应用场景的多个环节相对成熟。 以下是我结合VisionChina经历和行业龙头企业对计算机视觉行业产业链上下游的拆解总结。 上下游总结 上游产业链分为软硬件两类,视觉的硬件主要指芯片、…...
C语言番外篇(3)------------>break、continue
看到我的封面图的时候,部分读者可能认为这和编程有什么关系呢? 实际上这个三个人指的是本篇文章有三个部分组成。 在之前的博客中我们提及到了while循环和for循环,在这里面我们学习了它们的基本语法。今天我们要提及的是关于while循环和for…...
【NLP 31、预训练模型的发展过程】
人的行为,究竟是人所带来的思维方式不同还是与机器一样,刻在脑海里的公式呢? 只是因为不同的人公式不同,所以人的行为才不同,可这又真的是人引以为傲的意识吗? 人脑只是相当于一个大型、驳杂的处理器&#…...
sqlclchery面对复杂的sql语句怎么办
面对复杂的SQL语句时,可以采取以下步骤来简化和解决问题: 理解需求 明确查询的目标,确保清楚需要获取哪些数据。 分解查询 将复杂查询拆分为多个简单部分,逐步构建最终结果。 使用注释 添加注释,解释每个部分的逻辑&…...
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的读写分离
作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀,…...
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 系统中使用容器…...
代码审计入门学习之sql注入
路由规则 入口文件:index.php <?php // ---------------------------------------------------------------------- // | wuzhicms [ 五指互联网站内容管理系统 ] // | Copyright (c) 2014-2015 http://www.wuzhicms.com All rights reserved. // | Licensed …...
2024信息技术、信息安全、网络安全、数据安全等国家标准合集共125份。
2024信息技术、信息安全、网络安全、数据安全等国家标准合集,共125份。 一、2024信息技术标准(54份) GB_T 17966-2024 信息技术 微处理器系统 浮点运算.pdf GB_T 17969.8-2024 信息技术 对象标识符登记机构操作规程 第8部分:通用…...
element ui的select选择框
我们首先先试一下,这个东西怎么玩的 <el-select v-model"select" change"changeSelect"><el-option value"香蕉"></el-option><el-option value"菠萝"></el-option><el-option value&quo…...
文档检索服务平台
文档检索服务平台是基于Elasticsearch的全文检索,包含数据采集、数据清洗、数据转换、数据检索等模块。 项目地址:Github、国内Gitee 演示地址:http://silianpan.cn/gdss/ 以下是演示角色和账号(密码同账号)…...
使用FastAPI进行可视化部署
文章目录 一、FastAPI介绍二、环境配置三、示例代码1.app.py代码如下2.websocket_handler.py 代码如下3.运行app4.遇到的问题与解决 一、FastAPI介绍 FastAPI是一个高性能的Python Web框架,它基于Starlette并利用了 Python类型提示的优势。它可以帮助我们快速构建具…...
设计模式 之 工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)(C++)
文章目录 C 工厂模式引言一、简单工厂模式概念实现步骤示例代码优缺点 二、工厂方法模式概念实现步骤示例代码优缺点 三、抽象工厂模式概念实现步骤示例代码优缺点 C 工厂模式 引言 在 C 编程中,对象的创建是一个常见且基础的操作。然而,当项目规模逐渐…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
Yolov8 目标检测蒸馏学习记录
yolov8系列模型蒸馏基本流程,代码下载:这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中,**知识蒸馏(Knowledge Distillation)**被广泛应用,作为提升模型…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释
以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块࿰…...
