与第三方系统打通的N种进阶方式

本文详细介绍了不同级别的重试策略,包括简单的内存重试、数据库持久化重试、指数级增加重试时间的方法,以及如何通过分布式任务系统解决单机瓶颈问题。此外,还探讨了业务监控系统的必要性和平台化的解决方案。
第一级别
  1. 使用HTTP协议,来进行交互,对失败的请求进行内存重试3次,3次后丢弃
第二级别
  1. 对失败的数据进行持久化重试,存放于数据库中,用定时任务来对失败的数据进行重新处理,重试3次以后丢弃,3次的间隔时间固定
第三级别
  1. 优化重试策略,考虑到如果重试时间间隔设置得太短,第三方宕机短时间内无法恢复,会跳过3次重试时间隔离。
  2. 如果重试次数太多,比如设置10次,1是耗资源(对方服务短时间内能恢复的就已经恢复了,恢复不了的,短时间内重试这么多次也没有意义),2是定时任务不能很快的处理到新产生的数据
  3. 如果重试时间间隔太长,第三方系统恢复后,又需要很长时间才能接收到。
  4. 折中的方案是优化策略为指数级别的重试方式,第1次失败1分钟,第2次失败2分钟后重试,第3次失败4分钟后重试,以此累加
第四级别
  1. 重试是由定时任务发起,为了不重复执行,所以执行线程只有1个,数据量过大,可能会显得力不从心
  2. 这时候可能考虑多开几个线程并行跑,来加快数据的传输
  3. 想要多开线程,就需要考虑线程之间的任务分配,可以通过取模,范围等方式来做任务分配,来达到加快同步效率的目的
第五级别
  1. 单机情况下的线程任务,存在线程中断,阻塞与单机瓶颈问题,
  2. 线程中断是指,程序业务逻辑出现未知异常导致线程中断,中断后该线程所负责的任务不能得到执行(比如该线程负责的1-100条之间的记录)
  3. 线程阻塞是指,HTTP网络阻塞(比如 restTemplate的超时时间会导致此问题),或者CPU未分配到执行此任务的片短,CPU在忙着搞其他具有更高优先级的事情,或者有其他线程一直占用着CPU使用权导致该任务线程一直挂起
  4. 单机瓶颈是指该服务一台
### 集成第三方系统 Label Studio 的方法 Label Studio 提供了灵活的接口和扩展功能,允许第三方系统进行集成。以下是一些常见的集成方式和步骤: #### 1. 使用 Label Studio ML 后端 Label Studio 提供了 `label-studio-ml` 工具,可以将机器学习模型集成到 Label Studio 中,从而实现自动化标注。通过定义模型脚本并启动后端服务,可以实现 Label Studio 的无缝集成。 - **步骤**: - 安装 `label-studio-ml`:`pip install label-studio-ml` - 创建模型脚本:定义一个 Python 脚本,包含模型的预测逻辑。 - 初始化后端:使用命令 `label-studio-ml init <backend_name> --script <path_to_script>` 初始化后端。 - 启动后端服务:使用命令 `label-studio-ml start <backend_name>` 启动服务。 #### 2. 使用 API 接口 Label Studio 提供了 RESTful API 接口,可以通过 HTTP 请求 Label Studio 进行交互。通过 API,可以实现数据的导入、导出、项目管理等功能。 - **步骤**: - 获取 API 密钥:在 Label Studio 的用户设置中获取 API 密钥。 - 使用 HTTP 客户端发送请求:通过 `requests` 库或其他 HTTP 客户端发送请求,操作 Label Studio 中的项目和数据。 #### 3. 集成云存储 Label Studio 支持云存储服务(如 AWS S3、Google Cloud Storage、Azure Blob Storage)集成。通过配置云存储设置,可以直接从云存储中加载数据进行标注,并将标注结果保存回云存储。 - **步骤**: - 配置云存储:在 Label Studio 的项目设置中配置云存储的访问密钥和存储桶信息。 - 导入数据:从云存储中导入数据到 Label Studio 项目。 - 导出数据:将标注结果导出到云存储。 #### 4. 使用 Webhooks Label Studio 支持通过 Webhooks 实现事件驱动的集成。当特定事件(如标注完成)发生时,Label Studio 可以向指定的 URL 发送 HTTP 请求,通知第三方系统。 - **步骤**: - 配置 Webhook:在 Label Studio 的项目设置中配置 Webhook 的 URL 和事件类型。 - 处理请求:在第三方系统中实现处理 Webhook 请求的逻辑。 #### 示例代码:使用 API 导出数据 ```python import requests # 获取 API 密钥 api_key = 'your_api_key' project_id = 'your_project_id' # 导出数据 url = f'http://localhost:8080/api/projects/{project_id}/export/' headers = {'Authorization': f'Token {api_key}'} response = requests.get(url, headers=headers) # 保存导出的数据 with open('exported_data.json', 'wb') as f: f.write(response.content) ``` ###
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值