自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(2338)
  • 资源 (1)
  • 收藏
  • 关注

转载 服务端高并发分布式架构演进之路

1. 概述本文以淘宝作为例子,介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。特别说明:本文以淘宝为例仅仅是为了便于说明演进过程可能遇到的问题,并非是淘宝真正的技术演进路径2. 基本概念在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍:分布式 系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部署

2021-05-25 17:47:54 458

转载 警惕软件复杂度困局

简介:对于大型的软件系统如互联网分布式应用或企业级软件,为何我们常常会陷入复杂度陷阱?如何识别复杂度增长的因素?在代码开发以及演进的过程中需要遵循哪些原则?本文将分享阿里研究员谷朴关于软件复杂度的思考:什么是复杂度、复杂度是如何产生的以及解决的思路。较长,同学们可收藏后再看。写在前面软件设计和实现的本质是工程师相互通过“写作”来交流一些包含丰富细节的抽象概念并且不断迭代过程。另外,如果你的代码生存期一般不超过6个月,本文用处不大。一 软件架构的核心挑战是快速增长的复杂性越是...

2021-05-19 18:17:58 658

转载 常见代码重构技巧,非常实用

关于重构为什么要重构项目在不断演进过程中,代码不停地在堆砌。如果没有人为代码的质量负责,代码总是会往越来越混乱的方向演进。当混乱到一定程度之后,量变引起质变,项目的维护成本已经高过重新开发一套新代码的成本,想要再去重构,已经没有人能做到了。造成这样的原因往往有以下几点:编码之前缺乏有效的设计 成本上的考虑,在原功能堆砌式编程 缺乏有效代码质量监督机制对于此类问题,业界已有有很好的解决思路:通过持续不断的重构将代码中的“坏味道”清除掉。什么是重构重构一书的作者Martin..

2021-05-13 10:01:52 980

转载 JAVA线上故障排查全套路

线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。一、CPU一般来讲我们首先会排查cpu方面的问题。cpu异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用js

2020-09-22 17:45:24 462

转载 图解+代码|常见限流算法以及限流在单机分布式场景下的思考

大家好,我是 yes。今天来说说限流的相关内容,包括常见的限流算法、单机限流场景、分布式限流场景以及一些常见限流组件。当然在介绍限流算法和具体场景之前我们先得明确什么是限流,为什么要限流?。任何技术都要搞清它的来源,技术的产生来自痛点,明确痛点我们才能抓住关键对症下药。限流是什么?首先来解释下什么是限流?在日常生活中限流很常见,例如去有些景区玩,每天售卖的门票数是有限的,例如 2000 张,即每天最多只有 2000 个人能进去游玩。题外话:我之前看到个新闻,最不想卖门票的景区“

2020-09-22 13:06:08 577

转载 springboot实现定时任务,异步操作,统一结果返回,全局异常处理,拦截器及事务处理

本文都是springboot的常用和实用功能,话不多说开始吧定时任务1.启动类开启注解@EnableScheduling //开启基于注解的定时任务@MapperScan("com.pdzx.dao")@SpringBootApplicationpublic class VideoApplication { public static void main(String[] args) { SpringApplication.run(VideoApplicatio

2020-08-26 20:22:41 1927

原创 聊聊微服务架构及分布式事务解决方案

分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布式事务的最好办法其实就是不考虑分布式事务,将一个大的业务进行拆分,整个大的业务流程,转化成若干个小的业务流程,然后通过设计补偿流程从而考虑最终一致性。什么是事务事务(Transaction)及其ACID属性事务是由一组SQL语句组成的逻...

2020-04-21 22:34:45 648

转载 Java线程池实现原理及其在美团业务中的实践

随着计算机行业的飞速发展,摩尔定律逐渐失效,多核CPU成为主流。使用多线程并行计算逐渐成为开发人员提升服务器性能的基本武器。J.U.C提供的线程池ThreadPoolExecutor类,帮助开发人员管理线程并方便地执行并行任务。了解并合理使用线程池,是一个开发人员必修的基本功。本文开篇简述线程池概念和用途,接着结合线程池的源码,帮助读者领略线程池的设计思路,最后回归实践,通过案例讲述使用线程...

2020-04-03 14:58:43 698

转载 Synchronized 和 Lock 锁在JVM中的实现原理以及代码解析

一、深入JVM锁机制:synchronizedsynrhronized关键字简洁、清晰、语义明确,因此即使有了Lock接口,使用的还是非常广泛。其应用层的语义是可以把任何一个非null对象作为"锁",当synchronized作用在方法上时,锁住的便是对象实例(this);当作用在静态方法时锁住的便是对象对应的Class实例,因为Class数据存在于永久带,因此静态方法锁相当于该类的一个全局锁...

2020-04-01 16:00:25 579

转载 一文带你理解Java中Lock的实现原理

当多个线程需要访问某个公共资源的时候,我们知道需要通过加锁来保证资源的访问不会出问题。java提供了两种方式来加锁,一种是关键字:synchronized,一种是concurrent包下的lock锁。synchronized是java底层支持的,而concurrent包则是jdk实现。关于synchronized的原理可以阅读再有人问你synchronized是什么,就把这篇文章发给他。在这里...

2020-04-01 15:04:40 926

转载 业务复杂=if else?刚来的大神竟然用策略 工厂彻底干掉了他们!

对于业务开发来说,业务逻辑的复杂是必然的,随着业务发展,需求只会越来越复杂,为了考虑到各种各样的情况,代码中不可避免的会出现很多if-else。一旦代码中if-else过多,就会大大的影响其可读性和可维护性。首先可读性,不言而喻,过多的if-else代码和嵌套,会使阅读代码的人很难理解到底是什么意思。尤其是那些没有注释的代码。其次是可维护性,因为if-else特别多,想要新加一个分...

2019-10-24 13:41:06 887

转载 Mysql是如何存储一行记录

Mysql是我们平时用的比较多的数据存储工具,那么当执行insert向Mysql中插入一条数据的时候,Mysql是如何存储这条的数据的呢?下面我们来聊聊这个话题。

2025-06-03 18:46:30 9

转载 Kafka如何处理消息积压(4大解决方案)

Kafka 消息堆积(Message Backlog),指的是在 Kafka 系统中,生产者生产的消息数量超过了消费者已经成功消费的消息数量,导致 Broker 中存在大量尚未被消费的消息。简单来说,想象一个传送带(Kafka Topic),生产者不断地将物品(消息)放到传送带上,而消费者则从传送带上取走物品进行处理。当传送带上的物品越积越多,消费者来不及处理时,就发生了消息堆积。Kafka 消息堆积的根本原因在于生产速度超过了消费速度,比如:1.生产者速度过快。

2025-06-03 18:40:06 15

转载 新来的小伙伴上来就搞 JVM 调优,还将接口吞吐量提高了 22.5%,被狠狠夸了!

小伙伴也可以这样算下自己的服务可用性,非 STW GC 时间应该达到 99.99% 才是健康的,不然还是有优化空间的,又学到了偷偷进步的方法。在 IO 交互型应用(例如互联网服务接口)中,大多数对象都是存活极短时间,在使用了分代收集的情况下(例如 CMS),Old 的大小应当为活跃对象(Full GC 后存活的)的 2~3 倍左右,考虑到浮动垃圾问题最好在 3 倍左右,剩下的都可以分给 Young 区,这样可以减少过早晋升带来的 GC 频繁 和 Full GC 问题。

2025-06-03 18:34:50 7

转载 人心惶惶:pod“内存使用率”一直99%告警,JVM竟然还在运行

本文提供一个真实的特殊生产案例,接下来带你 “云排查”。

2025-06-03 18:29:11 29

转载 MySQL MVCC快照机制的简易模型

MVCC的快照机制可以简化成的模型来理解。查询的功能是:根据时间点,查询到指定时间点之前的数据,而不会看到该时间点之后的变更(提交)。事务的四个隔离级别中,与快照有关的有两个:RC(Read Committed)和RR(Repeatable Read)。• RC级别下:每次快照读创建一个快照(时间点)。• RR级别下:第一次查询创建快照(时间点)。图中需要注意的点:• 时间点是以commit为分界的,也就是说,每个commit会出现一个新的数据版本。

2025-06-03 15:14:42 6

转载 如何有效提升研发质量(供参考)

关于研发质量相关,《建设系统化的研发管理流程》中第四部分“质量链”的内容也建议阅读。总结下我的完整思路:团队与团队之间的差异很大的,万金油形式的方案固然可行,但早晚要走到深水区去解决本质问题,不如早早下定决心去啃硬骨头没有调查就没有发言权,需要从结果指标(事故)来反向找团队中的病症所在分析问题不能只看表面,要用好5W2H更深层的分析,要有更多关联性的思考,努力做到举一反三。

2025-06-03 15:09:19 32

原创 长期熬夜,身体受损怎么办?看这篇就够了

2025-06-03 15:01:45 88

转载 架构设计技巧—代码与架构复用

复用有多种形式,它可以分为技术复用和业务复用两大类。技术复用包括代码复用和技术组件复用;业务复用包括业务实体复用、业务流程复用和产品复用。从复用的程度来看,从高到低,我们可以依次划分为产品复用 > 业务流程复用 > 业务实体复用 > 组件复用 > 代码复用。

2025-06-03 14:57:25 8

转载 架构设计技巧-容量

一方面是为了保证公司的正常运营和业务增长,及时地提供足够的容量,来满足未来所需。另一方面,也是希望空闲的容量越少越好,因为每一台空闲的服务器,都消耗公司的运营成本。现代的互联网服务规模的扩展,主要是用“水平扩展”而不是“垂直扩展”(通过增加服务器的数量和网络的带宽来提供更多的容量,而不是通过升级服务器)。相对于垂直扩展,水平扩展的优点显而易见,就是成本相对较低、调整容易、扩展性好。在确保系统可靠性的同时,尽可能地减少资源的投入 系统设计整体至少考虑应对5到10倍或近1到3年系统规模增长,要保障后续通过

2025-06-03 14:51:43 8

转载 RocketMQ之消息丢失的场景以及解决方案

但在消息消费时,路由信息仅返回 4,在具体拉取消息时,就只会消费 0、1、2、3 这 4 个队列中的消息,而 4、5、6、7 队列中的消息则完全不会被消费。需要注意的是,如果同时缩容写队列和读队列,可能会导致部分消息未被消费,因为写队列中可能还有消息,但读队列已被缩容,此时写队列中的消息将永远无法被消费到。在系统中部署一套消息零丢失方案,旨在无论何种场景下都能确保消息传输的绝对可靠性,这听起来无疑颇具吸引力,而这也正是该方案的一大显著优势——它能保障系统数据的准确无误,杜绝消息丢失情况的发生。

2025-06-03 14:40:30 17

转载 DataGrip基本使用

当我们想在数据库创建一个表时,右击这个数据库,点击新建,点击表。鼠标右击mysql,点击新建,点击架构。如果想设置字段,鼠标右击列,点击新建,输入完后点击确定。如果想修改表,鼠标右击然后点击修改就会出现修改页面。然后输入自己的用户名和密码,第一次要下载驱动文件。然后点击应用,再点击确定,那么这个连接就建立好了。然后点击测试连接,出现这样的界面就说明成功了。然后点击+号,点击数据源,点击mysql。然后输入自己的项目名称,点击确定。进入到主页,点击新建项目。那么这个表就创建成功了。然后输入数据库的名字。

2025-05-21 00:37:06 77

转载 用户画像:怎么做才有意义

用户画像是用户增长、数据分析、用户运营、产品设计、市场研究、广告投放、智能定价等永远绕不开的话题。当然,尤其有两个地方关于用户画像及其泛滥,一个是在数据分析师的招聘JD里,另外一个是数据服务和营销咨询类的公司里,本文就从一个数据分析师的角度,集中梳理一下用户画像有关的底层逻辑和实践方法论。Again,讲清楚这个问题最重要,因为现实中有太多的用户画像是为了做而做,往往是老板“觉得”要干,产品、运营、数据等一众部门花了大量的人力和财力,但最后成果往往在墙角吃灰,例如下面这个例子。

2025-04-22 20:15:49 149

原创 架构师如何避免从入门到忘记

本文介绍了架构师在学习过程中常见的困境以及应对方法,并详细阐述了海绵学习法、Play学习法和Teach学习法的原理、技巧和应用场景。实践是学习过程中非常重要的环节,通过亲身实践,能够更深入地理解和掌握所学知识,提高学习内容的留存率。教是最好的学,通过教授他人,能够更深入地理解和巩固所学知识,提高学习内容的留存率。海绵学习法强调时间的“挤”出来,就像海绵里的水一样,只要愿意挤,总是有的。学习是一个飞轮效应的过程,积累越多,学得越快。贵在坚持,遵循二十英里法则,避免突击学习,保持学习的连续性。

2025-04-22 20:04:04 598

转载 销售运营中的生成式人工智能:发展现状、典型用例与未来展望

在销售领域,生成式人工智能能够帮助销售团队克服诸多挑战。此外,随着客户对个性化体验的需求不断攀升,通用的推广方式逐渐失去效果,生成式人工智能为销售团队提供了打造超个性化沟通的工具,使他们能够预测客户需求,并在竞争对手之前提供解决方案。通过周密的规划和遵循最佳实践,销售团队能够充分发挥生成式人工智能的潜力,提高生产力,增强客户互动,实现长期增长。潜在客户资格评分代理会根据参与度和数据自动对潜在客户进行评分,并结合人工反馈进行调整,优先筛选出高价值潜在客户,让销售团队能够专注于有意义的互动,促进更好的转化。

2025-04-22 19:59:59 88

转载 复杂的事情简单化,简单的事情标准化,标准的事情流程化,流程的事情自动化

复杂的事情简单化,简单的事情标准化,标准的事情流程化,流程的事情自动化。好几年前听到了这句话,觉得特别有道理,然后就一直有道理了好多年。直到去年公司做转盘项目,老大一直要标准化,才真正理解“标准化一直觉得这句话只对企业管理者适用,实践下来,发现这句话适用于所有人。

2025-04-22 19:57:30 113

转载 一文搞懂:信息化,数字化,智能化是三种不同的概念

信息化相对来说是最基础的。它强调的是通过硬件设施(计算机)和信息技术(在线平台),将企业在生产经营过程中产生的业务信息在电子端记录、储存和管理,常见的有办公自动化系统、企业资源计划(ERP)系统等。信息化的核心是“信息的流通与共享”,让不同部门、不同岗位清楚地了解到:“业务状态是怎样的”,“流程走到了哪一步”等。这样一来,信息孤岛减少了,企业人员更能做出有利于生产要素组合优化的决策,增强应变能力。

2025-04-22 19:52:48 117

转载 行业案例:12306亿级流量架构分析

从2012年首日瘫痪引发全民质疑,到如今支撑起世界最高并发量的铁路售票体系,12306的技术演进堪称中国互联网基础设施发展的缩影。本文从系统设计的『不可能三角』切入,解析12306如何在业务复杂性(20+种售票规则)、数据一致性(毫秒级锁票时效)、系统可用性(99.99% SLA)之间达成平衡。通过拆解其『三级缓存+流量削峰+柔性降级』的复合型架构,。

2025-04-22 19:46:57 142

转载 业务流、工作流、审批流如何区分

审批流一般会在企业中无序扩张,是流程优化重点关注的对象,如果所在价值流所创造的价值还覆盖不了管控成本,那这个审批流是绝对要被砍掉的。,是对工作过程中经过多个角色的操作“步骤”的衔接完成某个任务,工作流也是嵌入到业务流中的。比如下面这种横向流程画法,就先对业务流程分级,业务流程分解出子流程,然后对每个子流程再做细化到活动,活动下面是阶段、步骤。,等同于业务流程,业务流程,是为达到特定的价值目标而由不同的人分别共同完成的一系列活动。[ 业务流 ]是企业实际运转的过程最本源的,也是客观存在的。

2025-04-22 19:40:29 103

转载 不懂这五个系统,还敢做数字化?ERP、SCM、CRM、MES、BI一文搞懂!

零代码平台,以伙伴云为例,是指不懂技术、没有开发经验的业务人员,通过拖拽各种功能模块,就能快速构建各类企业管理系统的一种开发平台。对于中小企业来说,性价比特别高,不用再承担高试错成本的压力。

2025-04-22 19:34:59 89

转载 如果单表数据量大,只能考虑分库分表吗

下次遇到数据量大,先默念三遍:

2025-04-21 01:11:43 32

转载 如何进行SQL调优

SQL调优是一个复杂的过程,需要根据具体情况进行具体分析。本文介绍的11个问题只是SQL调优中的冰山一角,实际工作中还会遇到各种各样的问题。我们需要不断学习和积累经验,才能成为一名优秀的SQL调优专家。

2025-04-21 01:09:02 36

转载 编程性能调优——字符串与集合

所以,如果你需要额外的精度,或者如果你的数字超出一个较长的范围,最好要三思。除非是必须的,否则应该避免使用split,split由于支持正则表达式,使用不恰当会引起回溯问题,很可能导致 CPU 居高不下,如果确实需要频繁的调用split,可以考虑使用apache的StringUtils.split(string,char),频繁split的可以缓存结果。如果调用 intern 方法,会去查看字符串常量池中是否有等于该对象的字符串的引用,如果没有,jdk1.8只是会把首次遇到的字符串的引用添加到常量池中;

2025-04-21 01:04:41 45

转载 性能调优方案制定模板

三个“要”的原则之间,其实是步步递进的关系。也就是首先需要查找最大性能瓶颈,然后确诊性能瓶颈产生的原因,最后针锋相对地提出最好的解决方案。而这个最优解,往往是在考虑各种情况之后提出来,并最终被选中的。(1)要优先查最大的性能瓶颈 任何一个应用程序或者系统,总会有很多地方可以优化。永远都要优先从最大的性能瓶颈入手。一般来讲,如果找到最大的性能瓶颈,并且解决了它,那这个系统的性能会得到最大的提升。(2)要确诊性能问题的根因 当确定了最大的性能瓶颈后,就需要对这一性能瓶颈做彻底的性能分析,找出资源

2025-04-21 00:58:22 57

转载 性能分析全面介绍

在完成性能测试之后,需要输出一份性能测试报告,分析系统性能测试的情况。其中测试结果需要包含测试接口的平均、最大和最小吞吐量,响应时间,服务器的 CPU、内存、I/O、网络 IO 使用率,JVM 的 GC 频率等。通过观察这些调优标准,可以发现性能瓶颈,然后我们可以通过自下而上的方式分析查找问题。首先从操作系统层面,查看系统的 CPU、内存、I/O、网络的使用率是否存在异常,再通过命令查找异常日志,最后通过分析日志,找到导致瓶颈的原因;

2025-04-21 00:53:41 199

转载 JVM性能调优实战指南

本文通过几个比较经典的示例演示了JVM进行垃圾回收的过程以及如何进行JVM内存调优,关于更多JVM调优的案例,可以参考下面几篇文章:从实际案例聊聊Java应用的GC优化:https://tech.meituan.com/2017/12/29/jvm-optimize.htmlJava中9种常见的CMS GC问题分析与解决:https://tech.meituan.com/2020/11/12/java-9-cms-gc.html听说 JVM 性能优化很难?今天我小试了一把!

2025-04-21 00:41:23 83

转载 JVM故障排查实战指南

jstack是JVM自带的工具,用于追踪Java进程线程id的堆栈信息、锁信息,或者打印core file,远程调试Java堆栈信息等。# 打印对应java进程的堆栈信息对应的option-F 当正常输出的请求不被响应时,强制输出线程堆栈-m 如果调用到本地方法的话,可以显示C/C++的堆栈-l 除堆栈外,显示关于锁的附加信息,在发生死锁时可以用jstack -l pid来观察锁持有情况。

2025-04-21 00:38:10 33

转载 并发编程利器Java CAS原子类全解

CAS全称,是一种无锁编程算法,即比较当前的值与旧值是否相等若相等则进行修改操作(乐观锁机制),该类常用于多线程共享变量的修改操作。而其底层实现也是基于硬件平台的汇编指令,JVM只是封装其调用仅此而已。而本文会基于以下大纲展开对CAS的探讨。: 原子更新布尔类型。: 原子更新整型。AtomicLong: 原子更新长整型。

2025-04-21 00:33:37 26

转载 简明的Arthas入门教程

有时候我们测试难免会遗漏一些情况,如下所示,我们业务要求id小于1才抛出异常,但是我们因为粗心而将判断条件写成id<2,结果懵懵懂懂的就将这段代码部到了生产环境,导致业务查询出了问题。此时控制台会出现下面几个选项,它通过不同序号标明不同的Java程序,我们看到我们的目标程序ArthasExampleApplication,序号为1,所以我们输入1按回车。完成编写后,我们将项目启动并请求该地址,不久后你就会发现CPU直接飙升接近100%,此时我们的arthas就派上用场了,首先我们自然是将arthas启动。

2025-04-21 00:21:46 352

转载 JVM内存问题排错最佳实践

对象默认情况下都会包含对象头等各种信息,这在无形间对内存都有着一定的占用,考虑到我们的功能,对于查询结果的包装类型,我们完全可以改为基本类型,所以笔者将查询的。了解了问题的原因之后,我们就可以进行解决和优化了,既然上述问题是因为jdbcTemplate查询结果的映射出问题,那我们将查询映射转换换成转为专门的。上一篇的文章中分享了一个入门级别的调优实践,收到很多读者的好评,所以笔者今天再次分享一个进阶一点的案例,希望对近期在面试的读者对于。下,所以我们通过mat打开这个文件,可以看到大量的内存被。

2025-04-21 00:13:52 24

Java8 新特性.rar

Java8新特性,包含代码实例与技术文档。

2020-03-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除