- 博客(22)
- 收藏
- 关注
原创 异步任务框架的监控、运维与故障排查实战
级别使用场景示例ERROR任务执行失败、租约续期失败、数据库异常租约续期失败,中断任务执行WARN租约过期恢复、慢任务告警、配置异常任务执行超过慢任务阈值INFO任务提交、开始执行、完成、取消异步任务执行完成DEBUG领取任务、心跳续约、进度上报心跳续约成功一个成熟的异步任务框架不仅要功能完善,更要具备强大的可观测性和可维护性。
2026-08-27 17:27:02
183
原创 从需求到上线:异步任务框架实战指南
*** 医保信息导入任务* 任务类型:MEDICAL_INSURANCE.IMPORT* 所属模块:患者管理* 执行时长:预计 10-60 分钟* 并发限制:单类型最多 2 个并发(避免打满医保接口)✅需求分析:明确业务场景和技术要求✅方案设计:定义任务类型、数据模型、接口设计✅代码实现:Handler、Controller、前端页面✅配置调优:并发控制、动态策略、索引优化✅上线验证:功能、性能、容错、权限✅监控告警:业务指标、系统指标、告警规则。
2026-08-27 17:26:29
152
原创 从需求到上线:异步任务框架实战指南
*** 医保信息导入任务* 任务类型:MEDICAL_INSURANCE.IMPORT* 所属模块:患者管理* 执行时长:预计 10-60 分钟* 并发限制:单类型最多 2 个并发(避免打满医保接口)✅需求分析:明确业务场景和技术要求✅方案设计:定义任务类型、数据模型、接口设计✅代码实现:Handler、Controller、前端页面✅配置调优:并发控制、动态策略、索引优化✅上线验证:功能、性能、容错、权限✅监控告警:业务指标、系统指标、告警规则。
2026-08-26 07:30:49
205
原创 异步任务框架的监控、运维与故障排查实战
级别使用场景示例ERROR任务执行失败、租约续期失败、数据库异常租约续期失败,中断任务执行WARN租约过期恢复、慢任务告警、配置异常任务执行超过慢任务阈值INFO任务提交、开始执行、完成、取消异步任务执行完成DEBUG领取任务、心跳续约、进度上报心跳续约成功一个成熟的异步任务框架不仅要功能完善,更要具备强大的可观测性和可维护性。
2026-08-26 07:28:05
178
原创 构建企业级异步任务框架:从零到一的架构设计之旅
在现代分布式系统中,异步任务处理是一个常见且重要的需求。无论是大文件导入导出、批量数据处理,还是定时报表生成,都需要一个稳定、可靠的异步任务框架来支撑。本文将深入介绍我们自研的框架,分享从架构设计到实现细节的完整思路。构建一个企业级异步任务框架需要在简单性和完备性之间找到平衡。✅依赖最小化:只依赖 MySQL,无需额外中间件✅设计可扩展:支持自定义 Handler、失败分类器、生命周期监听器✅运维友好:支持动态配置、健康检查、指标暴露✅容错优先:租约机制 + 乐观锁 + 自动恢复。
2026-08-25 21:19:47
366
原创 异步任务框架
《企业级异步任务框架设计与实践》系列文章全面解析了基于Spring Boot的异步任务处理系统。该框架采用轻量级设计,仅依赖MySQL数据库,通过租约机制实现分布式任务调度,具备状态机驱动、三级并发控制等核心特性。系列包含5篇文章:从架构设计、租约机制原理、任务执行引擎解析,到业务接入实战和监控运维指南,覆盖异步任务处理全生命周期。针对不同读者提供分层学习路径,并总结框架的9大核心特性和完整技术栈。该方案特别适合需要构建高可靠、易扩展异步任务系统的企业,已在实际业务场景中验证其有效性。
2026-08-25 21:18:18
150
原创 把动态扩展做成基础设施: 基于 PF4J 与 Spring 子容器的插件化实践
本文介绍了基于PF4J和Spring子容器的插件化实践,主要解决业务系统在稳定平台能力与可替换业务实现之间的矛盾。该方案通过PF4J管理插件生命周期,利用Spring子容器实现插件Bean的依赖注入,并采用定制ClassLoader确保类型一致性。文章详细阐述了系统架构、启动链路、Spring子容器的作用以及ClassLoader隔离机制,强调了该方案适用于可信代码在同一JVM内的动态扩展场景,但不提供进程隔离或安全沙箱功能。该实践通过两种隔离(ClassLoader和Spring容器)和两座桥(Sprin
2026-07-28 17:06:46
388
原创 大文件上传后端落地方案
本文介绍了一种工程化的大文件上传后端实现方案。该方案采用分层架构设计,支持GB级文件上传、断点续传、秒传等功能。核心包括:1) 拆分初始化、分片上传、进度查询等接口;2) 设计任务状态机和数据库表结构;3) 实现异步合并与幂等控制;4) 集群部署建议使用对象存储;5) 强调安全校验和监控告警。方案解决了同步上传的超时、磁盘堆积等问题,适合作为企业级文件上传服务的参考实现。
2026-07-22 11:52:28
372
原创 es环境搭建集群搭建
单机版本关闭防火墙firewall-cmd --statesystemctl stop firewalld.servicesystemctl disable firewalld.service 修改 hostnamevim /etc/hostnamesystemctl restart systemd-hostnamed1、禁止内存交换1.1.1编辑sysctl.confvim /etc/sysctl.conf #执行命令1.1.2添加禁止内存交换 和设置虚拟内存大小
2021-12-02 16:28:19
1647
原创 电商系统开发实战-用户微服务基础模块开发
电商系统开发实战-用户微服务基础模块开发1.用户微服务项目开发之收货地址查询接口开发1.1 配置文件配置 application.ymlserver: port: 9001spring: application: name: sundablog-user-service #数据库配置 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306
2021-12-02 16:12:43
834
2
原创 电商系统开发实战-用户微服务注册模块之验证码开发
电商系统开发实战-用户微服务注册模块之验证码开发1、介绍微服务注册功能和流程介绍功能需求使用邮箱注册,已经注册的邮箱不能重复注册密码不能使用简单的MD5加密用户上传头像需要用文件存储功能演示手机号 18211102098邮箱 18211102098@163.com安全需求高并发下邮箱唯一性注册邮箱或者手机验证码不能被恶意调用头像文件存储访问方便扩容和管理1.2 图形验证码开发之谷歌kaptcha引入1.2.1 谷歌开源kaptcha图形验证码开发K
2021-12-02 16:12:20
2234
原创 电商系统开发实战-基本环境搭建
电商系统开发实战1、数据库搭建1.1 各个微服务独立数据库,到搭建每个微服务的时候再介绍用户服务数据库 sundablog_user商品服务数据库 sundablog_product优惠券服务数据库 sundablog_coupon订单服务数据库 sundablog_order1.2用户服务数据库 (其他用到再增加)1.2.1用户表CREATE TABLE `user` ( `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT, `na
2021-12-02 16:11:56
1443
原创 Netty源码阅读之调试环境搭建
Netty源码阅读之调试环境搭建1、依赖工具MavenGitJDKIntelliJ IDEA2、源码拉取从官方仓库 https://github.com/netty/netty Fork 出属于自己的仓库。为什么要 Fork ?既然开始阅读、调试源码,我们可能会写一些注释,有了自己的仓库,可以进行自由的提交。使用 IntelliJ IDEA 从 Fork 出来的仓库拉取代码。本文使用的 Netty 版本为 4.1.58.Final-SNAPSHOT 。3、编译Netty3.1 重要
2021-01-19 14:12:14
906
2
原创 死磕设计模式-工厂模式
死磕设计模式-工厂模式工厂模式的由来 在现实生活中我们都知道,原始社会自给自足(没有工厂)、农耕社会小作坊(简单工厂,民间酒坊)、工业革命流水线(工厂方法、自采自销)、现代产业链工厂(抽象工厂、富士康)我们项目代码同样也是由简而繁一步一步迭代而来,但对于调用者来说确是越来越简单化。简单工厂模式简单工厂模式是指由一个工厂对象决定创建哪一种产品类实例,但他不属于GOF23种设计模式.简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂参数,对于如果创建
2020-05-20 15:13:51
244
原创 死磕设计模式-设计模式总览
死磕设计模式-设计模式总览为什么要学习设计模式1、能够写出优雅的代码2、能够帮助我们更好的重构代码如果用好了设计模式就是架构师,如果用不好设计模式就是码农回顾一下设计原则开闭原则对扩展开放,对修改关闭单一职责原则 一个类一个接口或者是一个方法,自干一件事依赖倒置原则 通过抽象使各个类或者模块之间相互不影响,实现松耦合接口隔离原则定义 尽量保证接口的纯洁性,客户端不应该依赖不需要的接口迪米特法则 又叫最少知道原则,一个类对其所依赖的类知道的越少越好
2020-05-19 11:48:39
314
原创 死磕设计模式-为什么要从设计模式开始
死磕设计模式-为什么要从设计模式开始设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式
2020-05-19 10:53:34
367
原创 Docker基础篇
Docker基础篇01 初识Docker1.1 什么是Docker1.1.1 官网首页https://www.docker.com/Modernize your applications, accelerate innovationSecurely build, share and run modern applications anywhere1.1.2文档https:/...
2019-11-05 11:11:54
511
原创 Redis实战篇
Redis实战篇1 Redis 客户端1.1 客户端通信 原理客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 。客户端和服务器发送的命令或数据一律以 \r\n (CRLF 回车+换行)结尾。如果使用 wireshark 对 jedis 抓包:环境:Jedis 连接到虚拟机 202,运行 main,对 VMnet8 抓包。过滤条件:ip.dst==1...
2019-10-22 22:49:54
1346
原创 Redis分布式篇
Redis分布式篇1 为什么 需要 Redis 集群1.1 为什么需要集群?1.1.1 性能 Redis 本身的 QPS 已经很高了,但是如果在一些并发量非常高的情况下,性能还是会受到影响。这个时候我们希望有更多的 Redis 服务来完成工作。1.1.2 扩展 第二个是出于存储的考虑。因为 Redis 所有的数据都放在内存中,如果数据量大,很容易受到硬件的限制。升级硬件收效和成...
2019-10-22 21:13:21
496
原创 Redis原理篇
Redis原理篇1.发布 订阅模式1.1列表 的局限 前面我们说通过队列的 rpush 和 lpop 可以实现消息队列(队尾进队头出),但是消费者需要不停地调用 lpop 查看 List 中是否有等待处理的消息(比如写一个 while 循环)。为了减少通信的消耗,可以 sleep()一段时间再消费,但是会有两个问题:1、如果生产者生产消息的速度远大于消费者消费消息的速度,List 会占用...
2019-10-22 19:36:51
571
原创 Redis基础
Redis基础1.1 Redis 诞生历程1.1.1从一个故事开始08 年的时候有一个意大利西西里岛的小伙子,笔名 antirez(http://invece.org/),创建了一个访客信息网站 LLOOGG.COM。有的时候我们需要知道网站的访问情况,比如访客的 IP、操作系统、浏览器、使用的搜索关键词、所在地区、访问的网页地址等等。在国内,有很多网站提供了这个功能,比如 CNZZ,百度统...
2019-10-11 21:25:28
590
原创 CentOS7 Redis5.0.5环境搭建
CentOS7 Redis5.0.5环境搭建1基本环境配置CentOS Linux release 7.6.1810 (Core) redis 5.0.5 1.下载解压redis、通过wget在官网下载最新的5.0.5版本wget http://download.redis.io/releases/redis-5.0.5.tar.gz 注意出现下面这个 是wget没有安装-bas...
2019-10-11 21:23:00
453
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅