热门标签 | 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


推荐阅读
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 深入解析Spring Cloud微服务架构与分布式系统实战
    本文详细介绍了Spring Cloud在微服务架构和分布式系统中的应用,结合实际案例和最新技术,帮助读者全面掌握微服务的实现与优化。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 该平台旨在为大型企业提供一个高效、灵活且可扩展的分布式微服务架构解决方案。它采用模块化、微服务化和热部署的设计理念,结合当前最先进且无商业限制的主流开源技术,如Spring Cloud、Spring Boot2、MyBatis、OAuth2和Element UI,实现前后端分离的系统管理平台。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • PostgreSQL 最新动态 —— 2022年4月6日
    了解 PostgreSQL 社区的最新进展和技术分享 ... [详细]
  • 本文详细介绍了如何在 Android 中使用值动画(ValueAnimator)来动态调整 ImageView 的高度,并探讨了相关的关键属性和方法,包括图片填充后的高度、原始图片高度、动画变化因子以及布局重置等。 ... [详细]
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社区 版权所有