热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

[SpringCloudTask]6SpringBatch批处理应用设计原则

2019独角兽企业重金招聘Python工程师标准概述本文是SpringCloudTask系列的第五篇文章,如果你尚未使用过SpringCloudTask

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

概述

本文是Spring Cloud Task系列的第五篇文章,如果你尚未使用过Spring Cloud Task,请 移步spring cloud task1 简介与示例。 本文主要讲述的是Spring的另一个核心子项目 Spring Batch 批处理应用的一些设计技巧和原则。这些技巧分别涉及

原则与技巧

应用数据库设计原则

多分区批处理应用通常会用到数据库表分表。分表的设计是选取某个索引列作为分表的关键字,将有不同关键字的数据分别存储在不同物理数据库(表)。数据分表架构应有一个中心数据仓库(表),存储表分区参数等元数据。中心数据仓库(表)一般由单个表(非分区)组成,记录所有表分区的信息。有了中心数据仓库(表),数据分表架构才具有灵活性和可维护性。

中心数据仓库(表)的分区信息表所存储的数据通常是静态的,且只有DBA才有维护的权限。分区信息表的每行都包含一个表分区的信息(或者批处理应用实例的信息),分区信息表应该有代表应用编号的列(program_id ),分区逻辑编号( logical _id)以及要处理的数据分区主键最大值和分区主键最小值等信息。

在应用启动时,控制程序会把应用编号和分区编号传递给应用。如果使用关键列分表的方法,控制程序则会将要处理的数据范围传递给应用。另外下面两种处理还会用到分区编号:

  1. 需要将多个数据处理应用的结果合并并输出到文件或数据库中。
  2. 将分区应用的正常工作日志上报到控制器或将分区发生的错误上报到错误处理器。

极小死锁原则

在并行或分片批处理应用中,数据库资源可能会发生竞争或死锁。在设计数据库时请谨记下面这句话,减少数据竞争条件与完成业务需求同样重要。

死锁或访问热点常常发生在控制表或架构核心表中,如日志表,控制表,锁标识表。系统的瓶颈往往发生在这里,故而在架构设计时应该着重考虑这些表的性能需求。

为降低数据访问冲突所造成的影响,架构中应该设计类似 等待-重试 的周期服务,当访问数据库或发生死锁时,等待-重试 服务能减少数据冲突所造成的影响。这种机制对数据库的错误码并不立即响应,而是在经过预定时间和重试后,如果还发生错误,再向上层抛出错误。

参数解析与验证

分区应用架构应对开发人员相对透明,分区架构应确保下列3个与应用分区相关的任务能够执行:

  1. 在应用启动前检索分区参数
  2. 在应用启动前验证分区参数
  3. 在应用启动时解析参数

验证任务确保参数能满足以下两点:

  1. 确保应用有足够的分区示例覆盖到整个数据集区间
  2. 分区与分区之间没有遗漏的数据

如果应用数据库也采用分表分库的方式来设计,那么还应该有一个表分区检测任务,确保一个应用分区不会跨越多个数据库分区。

分区架构还应该考虑分区的一致性问题,如:

  1. 在进行下一步操作之前确认当前操作完全完成
  2. 如何处理任务分区失败

关于

示例源码

Spring Cloud Task learning 的 task-demo-with-datasource 子项目

后记

Spring Cloud Task是一个优秀的项目,但是我找遍网络,也难以找出系统的、准确的中文相关文档。本系列文章以保证对Spring Cloud Task相关概念和设计理解的正确性为标准,尽量采用通俗易懂的语言,希望能给各位带来一些便捷。

本文内容主要是对 Spring Cloud Task 1.2.2-RELEASE 官方文档的翻译,不过作者水平有限,有不尽然的地方敬请指出。本项目和文档中所用的内容仅供学习和研究之用,转载或引用时请指明出处。如果你对文档有疑问或问题,请在项目中给我留言或发email到 weiwei02@vip.qq.com 我的github: https://github.com/weiwei02/ 我相信技术能够改变世界 。

链接

  • 上篇文章Spring Cloud Task 5 Spring Batch数据分片探究
  • 下篇文章正在准备中

转载于:https://my.oschina.net/weiwei02/blog/1825632


推荐阅读
  • 朱晔的互联网架构实践心得S1E7:三十种架构设计模式(上)【下载本文PDF进行阅读】设计模式是前人通过大量的实践总结出来的一些经验总结和最佳实践。在经过多年的软件开发实践之后,回过头 ... [详细]
  • 寻求更强大的身份和访问管理(IAM)平台的企业正在转向云,并接受身份即服务(IDaaS)的灵活性。要为IAM选择正确的场外解决方案,业务管理人员和IT专业人员必须在实施之前评估安全 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 学习笔记(34):第三阶段4.2.6:SpringCloud Config配置中心的应用与原理第三阶段4.2.6SpringCloud Config配置中心的应用与原理
    立即学习:https:edu.csdn.netcourseplay29983432482?utm_sourceblogtoedu配置中心得核心逻辑springcloudconfi ... [详细]
  • 关于我们EMQ是一家全球领先的开源物联网基础设施软件供应商,服务新产业周期的IoT&5G、边缘计算与云计算市场,交付全球领先的开源物联网消息服务器和流处理数据 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • MateCloud 3.5.8 发布,基于 Spring Cloud Alibaba 的微服务框架
    基于SpringCloudAlibaba的微服务框架MateCloud3.5.8已经发布。此版本更新内容包括:功能升级针对MybatisPlus3.4.3新特性进行微调依赖升级升级至SpringCloud2020.0.3升级至Mybatis-Plus3.4.3详 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • 服务网关与流量网关
    一、为什么需要服务网关1、什么是服务网关传统的单体架构中只需要开放一个服务给客户端调用,但是微服务架构中是将一个系统拆分成多个微服务,如果没有网关& ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
保卫祖国666
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有