随着项目发展,现有模块不再符合需求,重构后端服务必要性拉满。👨💻 重构过程中,明确重构目标如引入新功能、性能提升、增强系统可用性等是前提条件,此外也必须考虑功能一致性和数据一致性这两大关键问题。 后台重构可以根据服务的不同需求划分为以下几类: 1️⃣逻辑模块重构:专注于优化代码逻辑和业务流程。 2️⃣存储模块重构:改进数据存储和检索机制。 3️⃣逻辑与存储模块联合重构:同 […]
随着项目发展,现有模块不再符合需求,重构后端服务必要性拉满。👨💻 重构过程中,明确重构目标如引入新功能、性能提升、增强系统可用性等是前提条件,此外也必须考虑功能一致性和数据一致性这两大关键问题。 后台重构可以根据服务的不同需求划分为以下几类: 1️⃣逻辑模块重构:专注于优化代码逻辑和业务流程。 2️⃣存储模块重构:改进数据存储和检索机制。 3️⃣逻辑与存储模块联合重构:同 […]
1 结论 2 问题背景及现象 3 排查过程 3.1 初次分析 3.2 问题再次出现 3.3 解决方案 4 总结与反思 1 结论 结论先行:事务+MQ的使用场景,使用方式一定得正确,稍有不慎,可能就会带来数据不一致问题。 2 问题背景及现象 商业退款业务,每周都会有几笔退款订单自动处理失败,究其直接原因,是因为数据表里的一个字段cost更新失败导致。抽象一下,业务场景大概是这 […]
在实际的业务开发中,我们经常会碰到VO、BO、PO、DTO等对象属性之间的赋值,当属性较多的时候我们使用get,set的方式进行赋值的工作量相对较大,因此很多人会选择使用spring提供的拷贝工具BeanUtils的copyProperties方法完成对象之间属性的拷贝。通过这种方式可以很大程度上降低我们手动编写对象属性赋值代码的工作量,既然它那么方便为什么还不建议使用呢? […]
Tech 导读 性能对提高用户体验,保证系统可靠性,降低资源使用率,甚至增强市场竞争力等方面,都有着很大的影响,性能优化是程序开发过程中绕不过去一个课题。本文聚焦代码和设计两个方面,从CPU硬件到JVM容器,从缓存设计到数据预处理,全面的展现了性能优化的实施方向和落地细节,希望能启发您的思考,为您带来帮助。 01 前言 在今年的敏捷团队建设中,我通过Suite执行器实现了 […]
为优化淘宝带宽成本,我们在网关 SDK(Java)统一使用 ZSTD 替代 GZIP 压缩以获取更高的压缩比,从而得到更小的响应包。具体实现采用官方推荐的 zstd-jni 库。zstd-jni 会调用 zstd 的 c++ 库。 背景 在性能压测和优化过程中,遇到了以下三个问题: GC 次数不变,但耗时翻倍 进程内存泄漏,极限情况下会出现 OOM Killer 杀掉进程的 […]
在第一个专题中已经比较系统地介绍了JVM三种常见的垃圾回收器算法和相关实践,这篇文章会在此基础上分场景将GC相关问题再梳理一番,一方面希望能够在发生GC问题的时候可以比较系统地指导问题分析的方向,另一方面也是希望通过这篇文章介绍一些关于使用GC日志分析GC问题的思路。如果在阅读的时候需要更加深入了解背后的机制,可以回头阅读公众号前期相关GC理论文章。 场景一: 没有发生GC […]
问题背景 Lombok使⽤ 同时使⽤@Data和@Builder ,构建无参构造器报错!编译不通过。如下图: 图片 Lombok @Data和@Builder分别单独分析用法 Lombok使⽤@Data可以⽣成⽆参构造和类⾥⾯所有属性的getter/setter⽅法。可以简化我们代码的开发。(需要安装Lombok插件和引⼊Lombok依赖)。 例如下⾯的⼀个实体类,引⼊Lo […]
本系列共三篇文章, 本文是系列第2篇——进阶篇,详细讲解 MAT 各种工具的核心功能、用法、适用场景,并在具体实战场景下讲解帮大家学习如何针对各类内存问题。 《JVM 内存分析工具 MAT 的深度讲解与实践——入门篇》 介绍 MAT 产品功能、基础概念、与其他工具对比、Quick Start 指南。 《JVM 内存分析工具 MAT 的深度讲解与实践——进阶篇》 展开并详细讲 […]
在金融、保险、电商等涉及金额计算的领域,常常需要高精度计算。但是由于计算机原理受限,普遍存在精度丢失问题。 例如,使用 JavaScript 在浏览器控制台输入: (0.1+0.2) == 0.3 我们会得到一个 false 的计算结果。 如果使用编程语言原生的计算方法会遇到大量精度问题。一般来说,我们可以优先考虑使用整数计算,例如在电商领域为了简单往往以分为单位计算金额。 […]
Tech 导读 随着Java开发者社区对Spring框架的深入使用,我们越来越认识到在大型应用中,启动速度和性能优化的重要性。本文将深入探讨如何通过专业分析和优化技术,显著提升Spring应用程序的启动速度和运行性能,解决了开发过程中的效率瓶颈和线上服务的快速扩容需求。 01 引言 在今年的敏捷团队建设中,我通过Suite执行器实现了一键自动化单元测试。Juint除了Su […]
了解 Eclipse MAT 中 incoming and outgoing 引用之间的区别。 Eclipse MAT(内存分析器工具)是分析 JVM 堆 Dump 文件的强大工具。它具有几个非常有效分析内存问题的强大功能。“Incoming references”和“Outgoing references”就是其中一种功能。在本文中,我们来探讨 Incoming refe […]
有没有想过 Shallow 和 Retained heap 之间的区别? Eclipse MAT(内存分析器工具)是分析 JVM 堆 Dump 文件的强大工具。当尝试分析内存相关的问题时,它非常方便。在 Eclipse MAT 内存分析的报告中会显示对象两种类型的 Heap 信息: Shallow Heap Retained Heap 在本文中,我们主要讨论它们之间的区别, […]
在应用系统中,使用缓存不算非常难的事,但是设计好一套缓存策略比较麻烦,这样既能起到好的缓存效果也能在合适的时候更新缓存。 今天我们聊聊缓存。 不过,在计算机科学中,有很多种缓存。我们先聊聊缓存的类型,再谈应用系统中的缓存。 我们会涉及哪些缓存知识? 这里我把缓存分为两类: 非应用缓存:难以被程序员干预、控制和使用的缓存,但是我们能通过选择合适的数据结构,写出缓存友好的代码。 […]
本系列共三篇文章, 本文是系列第2篇——进阶篇,详细讲解 MAT 各种工具的核心功能、用法、适用场景,并在具体实战场景下讲解帮大家学习如何针对各类内存问题。 《JVM 内存分析工具 MAT 的深度讲解与实践——入门篇》 介绍 MAT 产品功能、基础概念、与其他工具对比、Quick Start 指南。 《JVM 内存分析工具 MAT 的深度讲解与实践——进阶篇》 展开并详细讲 […]
笔者在一线互联网公司,经历过数次大型系统的重构项目,也多次担任技术负责人,经历的重构项目包含:日吞吐量数万亿的计算型系统、基础架构中间件系统、高并发高稳定性要求的C端系统、业务复杂性较高的B端系统等。 同时了解到大型重构项目风险高、难度大、易流产,因此总结了本文供大家参考学习交流。 任何系统在持续的演进迭代的历程中,都难免因各类因素导致迈向重构,比如:系统可塑性与业务需求无 […]
BeanUtils (1) BigDecimal (1) CDC (1) ETL (1) github (1) heap (1) LLaMa (1) MAT (5) MDM (1) Sora (1) TCP (1) 业务图 (1) 企业应用 (1) 停机迁移 (1) 内存泄露 (4) 协议 (1) 可用性 (1) 基础设施层 (1) 堆内存 (1) 堆外存 (1) 大事记 (1) 实时协作 (1) 对象转换 (1) 应用架构 (1) 异常 (3) 技术规范 (1) 技术选型 (4) 提示工程 (1) 数据交换 (1) 数据共享 (1) 数据双写 (1) 日期 (1) 时间 (1) 时间线 (1) 术语 (1) 架构方案 (14) 流程图 (1) 精度 (1) 线程模型 (1) 经验分享 (1) 网络编程 (2) 解耦 (1) 软件复杂性 (1) 软件工程 (1) 重构 (4) 重试 (1) 隔离级别 (1) 集群扩容 (1) 领域层 (3) 领域模型 (1)
COPYRIGHT © 2014-2024 verysu.com . ALL RIGHTS RESERVED.
Theme Kratos Made By Seaton Jiang