【开源项目】分布式文本多语言翻译存储平台
分布式文本多语言翻译存储平台
地址:
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 编程中,对象的创建是一个常见且基础的操作。然而,当项目规模逐渐…...
未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
