
网站架构 & 性能调优
文章平均质量分 93
大型网站技术架构整理
程序猿进阶
要做就做第一,就算结果不是第一,也会是一个好成绩。 加油!我的未来不是梦。
展开
-
数据库治理之冷热数据分离
作为数据库存储,历史订单信息状态修改频率低并占用大量数据库存储空间,期望历史数据与生产最新的数据进行分离,当前数据库保留最近一个月的数据作为热库,历史交易存在另一个库作为冷库。当然也可以是状态维度,比如订单的状态,已完结的订单定义为冷数据,未完结的订单定义为热数据。很高,如果更新状态时,需要进行进行冷热数据分离,删除热库中的数据,并将数据写入冷库中,需要使用到分布式事务。我的冷热数据怎么拆分的:已过起飞时间 + 订单状态=“完成”的数据都是冷数据,其余为热数据。当冷热数据存在冲突时,以热库的数据为准。原创 2025-01-10 05:30:00 · 20904 阅读 · 13 评论 -
内存占用估算方法
通过掌握每种数据类型的大小,就可以更准确地预测对象和数据的内存消耗。原创 2025-01-09 05:30:00 · 16520 阅读 · 2 评论 -
Redis大Key风险和改造
优质博文。原创 2025-01-08 05:30:00 · 7863 阅读 · 5 评论 -
MySQL数据库 CPU飙升到100%
系统学习性,移步。原创 2025-01-07 05:30:00 · 18572 阅读 · 2 评论 -
主从数据库数据不一致问题解决方案
即远端直接内存访问,是一种高性能网络通信技术,具有高带宽、低延迟、无CPU消耗等优点。主要解决网络传输中服务器端数据处理的延迟问题。Remote:数据通过网络与远程机器间进行数据传输;Direct:没有内核的参数,有关发送传输的所有内容都卸载到网卡上;Memory:在用户空间虚拟内存与RNIC网卡直接进行数据传输不涉及到系统内核,没有额外的数据移动和复制;Access操作;原创 2025-01-06 05:30:00 · 18439 阅读 · 3 评论 -
大循环引起CPU负载过高
由于代码中大循环非常小号cpu资源,通过分析这里方法的作用在于遍历判断获取数据,优先使用hashmap代替,用空间换时间,经过修复后重新发布,cpu利用率明显下降,恢复正常。【1】使用循环时需要特别注意大循环,有限使用O(1)的hashmap,大循环对于cpu性能的压榨问题表现的淋淋尽致。【2】镜像机器由于是使用生产流量转发,所以高度贴近生产实际发布,所以每次发布前,先使用镜像机器预发布,可以尽可能的将潜在问题暴露出来,性能实验室中提供了cpu热点,内存分配热点和锁竞争热点的Flamegraph。原创 2025-01-03 05:30:00 · 14501 阅读 · 14 评论 -
为什么要用ZGC
ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,ZGC可以说源自于 Azul System 公司开发的C4收集器[基本不用调优]它的设计目标包括:【1】停顿时间不超过10ms(STW减少了)之所以能做到这一点是因为它的停顿时间主要跟 GCRoot扫描有关,而 GCRoot数量和堆大小是没有任何关系的(停顿时间不会随着堆的大小,或者活跃对象的大小而增加,影响它的是 GCRoot对象);原创 2024-12-31 05:30:00 · 2297 阅读 · 12 评论 -
HickWall 详解
然后给告警命名,Evaluate every 表示每隔多久执行一次这条告警规则,For 则表示在持续多久满足(我们马上就会填的)告警条件之后才真正发出告警。:可以从默认的 Graph 改成多种其它图表,每种图表的使用方式各异,请自行探索 / 查阅文档。的运算逻辑是这样的:浏览器会按照选取的时间范围和显示器的大小选取合适的间隔,例如显示的曲线是。假如有一个航班查询接口,它根据传入的参数,返回匹配的所有航班。查出了需要的数据,就可以继续调整看板的其它配置。(也就是 5 分钟)内的数据的均值,要是它的结果。原创 2024-11-29 05:30:00 · 3935 阅读 · 111 评论 -
揭秘JIT编译器:如何大幅提升代码执行效率的秘密
优质博文:IT-BLOG-CN业务流量突增,机器直接接入大量流量,和会消耗太多资源,导致1-2分钟时间内的请求超时导致异常,因此采用流量预热的方式,让机器逐步接入流量,需要预热时长。目前服务接入,通过自动扩缩容应用流量变化,当流量激增时,对机器的启动速度带来了挑战,之前通过优化点火时间,已经将机器从容器创建到可接入流量优化到2分钟左右,但3min的预热时长成为了应对流量激增的瓶颈,因此优化机器从接入流量到能稳定服务的时长,目标缩减到2min以内。什么是服务预热: 应用在刚启动的时候处理相应速度会很慢,只有当原创 2024-11-28 05:30:00 · 34534 阅读 · 91 评论 -
堆外内存泄露排查经历
这个case。原创 2024-11-22 05:30:00 · 10990 阅读 · 54 评论 -
堆外内存分析方法
进程的内存信息查看,知道内存中是什么内容后,可以进一步排查是否存在泄露的情况。有关,如果打印的字符串中没有嫌疑对象,可能意味着这块内存没有问题。通过上述步骤,可以看到对应内存地址中的字符串,若有堆外内存泄露,一般和。的问题时,在生产上的机器试验了下,并未查看到有问题的信息,记录下。的路径及前缀,需要确保程序对该路径有写入权限,生成的文件名格式为。观察堆内情况也是正常的,因此怀疑是堆外内存导致的。输出的结果,第一次为程序点火成功输出后,第二次是。分配情况,搜了一下其他的内存分配器,其中。原创 2024-11-21 05:30:00 · 7364 阅读 · 58 评论 -
服务器Docker OOM RSS高问题排查思路
Java进程使用的内存分为3部分:堆内存、虚拟机所使用的内存(一般叫)、堆外内存(off-heap)组成。【1】堆heap内存也就是你jvm参数里面设置的xmx和xms所指定的大小。如果你的工程里面的没有指定xms/xms,那么ops会默认给你指定成物理内存的3/4。比如物理内存4G,那么堆内存会是3072m,这其实有点太大了;【2】:虚拟机使用的内存,分为很多细分的区域,比如classgcthreadcodeinternal等;名称作用描述Java Heap你所使用的堆内存Class。原创 2024-11-20 05:30:00 · 13682 阅读 · 86 评论 -
ZSTD 内存泄漏问题
不会马上被清除掉,而是放入到一个静态队列中,有一个守护线程专门去处理这个队列,因为守护线程的优先级比较低,运行的时间少,如果在短时间内创建较多或较大对象时,无论怎么调用。方法的效果,因为我们的对象比较大且请求次数多,所以发上生产就能立马见效。对象里的一个方法,它最大的一个特点是执行时机不可预知。大家能从使用代码上看出问题来吗?的对象如果没有被其它对象引用时,执行。都无用,只能等到守护线程从队列中取出。方法的类,在创建时会新建一个。,这个对象是强引用类型,重写。大家在写代码时,尽量不要重写。原创 2024-11-18 05:30:00 · 9528 阅读 · 81 评论 -
强大的在线调试工具 Arthas
通过上面的代码分析我们知道了JDK的这两项功能: VirtualMachine InstrumentationArthas的整体逻辑也是在jdk的Instrumentation基础上实现的,所有加载的类会通过Agent加载,addTransformer之后再进行增强,然后将对应的Advice织入进去,对于类的查找,方法的查找,都是通过SearchUtil来进行的,通过Instrument的loadAllClass方法将所有的JVM加载的class按名字进行匹配,再进行后续处理。原创 2024-11-15 00:15:00 · 8668 阅读 · 49 评论 -
CPU 100%问题排查总结
如果是Full GC次数过多,那么通过 jstack得到的线程信息会是类似于VM Thread之类的线程,而如果是代码中有比较耗时的计算,那么我们得到的就是一个线程的具体堆栈信息[如下]。如果程序中有大量的线程,并且这些线程没有得到适当的管理和控制,可能会导致线程竞争和频繁的上下文切换,从而导致CPU占用率高。如果程序中有大量的计算任务,尤其是在循环中进行复杂的计算操作,可能会导致CPU占用率高。如果程序中存在不合理的资源使用,例如频繁的IO操作或内存泄漏,可能会导致CPU占用率高。原创 2024-11-12 05:30:00 · 13050 阅读 · 70 评论 -
Cacheable注解导致线程block
减少getData()方法的调用次数,优化后的一次http请求,平均只需要调用7次getData()方法,并通过压测发现cpu利用率不再异常升高,也不再出现线程block的情况。【1】在业务代码中,尤其是在高qps场景下,需要注意服务调用过程中的临界区,压测作为一种重要的测试手段,通过并发测试可以提高暴露线程安全的问题。【2】在业务多层嵌套的场景中,任何一种方法的不当调用可能就会产生令人难以置信的调用风暴,尤其是在高qps情况下更需要注意,合理减少嵌套层数或者减少调用次数。原创 2024-11-14 05:30:00 · 11541 阅读 · 85 评论 -
系统流量分析和链路分析
目前链路选择主要遵循用户流量就近访问接入层的原则。链路选择是怎么实现的?三者很可能不在一个地区,设计合理的访问链路,对用户体验提升明显。:一般有以下几种场景(可自行甄别自己服务的请求链路)按协议划分,流量链路可分为。链路选择作用于该阶段。流量调度作用于该阶段。公司用户遍布世界各地,先明确调用方必须为海外。前:用户请求选择合适的。内:请求通过接入层进入。后,请求是否允许在当前。的服务,且调用方为海外。:该阶段是指请求进入。处理,否则转发至其他。原创 2024-11-06 05:30:00 · 7285 阅读 · 52 评论 -
Redis 基础数据改造
痛点一:因为基础数据不属于频繁更新的数据,所以每个应用都有自己和缓存,当基础数据更新后,各个应用缓存刷新不及时就会导致应用数据不一致问题。问题点:接口的可靠性(如果接口挂掉就会影响改签和下单流程)和数据的准确性(与数据库数据不一致时,会影响用户形成)。基础数据查询服务:提供航司(5000家)、机场(4000)、票台(40000)、城市(4000)等基础数据信息。,配置化加载核心数据。基础服务模块的功能:保证服务的数据一致性,并达到数据限流的目的。痛点:基础数据使用的是全量的缓存,所以数据量会很大。原创 2024-11-07 05:30:00 · 11210 阅读 · 66 评论 -
海外系统的挑战和成本最优
主要从三个方向实现成本优化:数据洞察(了解钱花在了哪里,应用多少钱,每一条消息/日志多少钱,并查看是否合理。成本节省(通过“混合云弹性调度平台”在保证可靠性的前提下自动优化成本)、成本运营(由各BU研发统筹成本相关问题,是否需要重构项目,缩容等操作)。原创 2024-11-04 05:30:00 · 7762 阅读 · 65 评论 -
Partition架构
用户的请求保证在同一机房内完成闭环,但部分场景并不适合划分单元化,比如多机房库存扣减问题。【3】增加监控和库存不足告警通知,除了自动资源调配,对活动上线后进行机房间的库存情况实时观测和实时手动调配;【1】业务扣库存逻辑不调整,还是同步扣库存,但事先根据流量分配好每个机房库存;【2】增加库存调配机制,当库存不足时触发库存调配,从有多余库存的机房进行调配;流量比例,扩容成功率恢复后,需要恢复流量比例关系;倾斜,过峰后,因成本因素,恢复原有状态;故障域内收敛,故障会影响整个。故障域内收敛,故障会影响整个。原创 2024-11-01 05:30:00 · 9580 阅读 · 65 评论 -
从本地到云端:跨用户请求问题的完美解决方案
对于某些单个请求或响应中含有多个用户信息的服务,SDK提供了一套基于统一的UCS拆分和聚合的解决方案供开发者使用。原创 2024-10-25 00:30:00 · 2084 阅读 · 83 评论 -
数据中台架构设计
由于当前项目需要对接多个不同的数据源,同时涉及到多端处理,而且需要考虑海量数据处理,还有总部与分部架构部署问题,因而整体技术栈倾向于大数据和分表分库式处理数据层接入问题。简单讲,项目分为和两个子系统,其中数据中台主要对接不同数据源,提供数据聚合,统一的数据报表。业务中台分为基础服务和业务服务,基础服务主要是提供统一网关,统一权限,日志,定时任务等服务。原创 2024-08-26 05:30:00 · 1774 阅读 · 82 评论 -
Cat 详解
Cat]是基于Java开发的分布式实时监控系统,有一个非常强大和丰富的可视化报表界面,在Cat提供的报表界面中有非常多的功能,几乎能看到你想要的任何维度的报表数据。缺点就是集成的时候具有代码的侵入性。在中间件(RPC、数据库、缓存、MQ 等)框架中得到广泛应用,为各业务线提供系统的性能指标、健康状况、实时告警等服务。开源地址链接CAT15台 CAT物理监控集群,单台机器支持15w QPS,2000+业务应用,7000+应用服务器,50TB消息,每天450亿消息。Cat报表说明。原创 2024-07-28 10:32:07 · 63514 阅读 · 30 评论 -
CodeReview 规范及实施
你的代码整体结构清晰,逻辑合理,很容易理解。随着业务压力增大,引发代码质量下降,代码质量的下降导致了开发效率的降低,维护成功高等问题,开发效率下降后又加重了业务压力,最终陷入了死亡三角的内耗之中。,因为开发者比你更了解整个系统的业务逻辑和架构,你的意见可能不适合该系统或架构,因此需要友好的交流,让他们知道他们的代码是对的,继续保持,自己则更进一步的了解整个系统和架构,避免第二次犯同样的错误。代码评审是一个学习的机会,通过审查他人的代码,可以学习到新的编码技巧和最佳实践,同时也可以分享自己的知识和经验。原创 2024-03-11 05:00:00 · 8643 阅读 · 134 评论 -
线上问题整理
架构师必备技能,问题排查原创 2024-01-14 10:52:38 · 2461 阅读 · 71 评论 -
CPU 使用率和负载Load
CPU说明等待执行的任务很多,但是通常任务多CPU使用率也会比较高,如果低就说明CPU根本没工作,那些很多的任务处于等待状态,可能进程僵死了。CPU说明任务少,但是任务执行时间长,有可能是程序本身有问题,如果没有问题那么计算完成后则利用率会下降。CPU使用率是单位时间内CPU繁忙程度的统计。平均负载不仅包括正在使用CPU的进程,还包括等待CPU或I/O的进程。因此,两者不能等同,有两种常见的场景如下所述:【1】CPU密集型应用,大量进程在等待或使用CPU,此时CPU使用率与平均负载呈正相关状态。原创 2023-12-02 21:03:13 · 8040 阅读 · 57 评论 -
前端性能优化之LightHouse
我们使用F12打开当前项目的控制台,点击LightHouse后能够看到点击后,就会对网页进行性能分析。需要注意的是浏览器的缓存会影响性能分析的分数,所以在分析之前需要对缓存进行清理。【1】:是否清除缓存,模拟用户第一次进入页面就勾选,清除缓存;【2】:模拟限制,勾选之后Lighthouse在测试过程中限制网速与CPU。Latency延迟:150ms;Throughput上行下行网速:;;CPU4x CPU谷歌开发者工具也可设置网络限速。CPU4x CPU;谷歌开发者工具也可设置网络限速。【1】原创 2023-11-19 00:13:21 · 6609 阅读 · 109 评论 -
SOA架构
面向服务的架构(SOA)是一种软件开发方法,它使用称为服务的软件组件来创建业务应用程序。每项服务提供一种业务能力,并且服务也可以跨平台和语言相互通信。开发人员使用SOA来重用不同系统中的服务,或者组合几个独立的服务来执行复杂的任务。原创 2023-02-25 16:20:15 · 1317 阅读 · 22 评论 -
DDD[领域驱动模型]
领域驱动设计`DDD`占据着非常重要的位置,可以说`DDD`是应用架构设计的核心。`DDD`是一套综合软件系统分析和设计的面向对象建模方法。过去系统分析和系统设计都是分离的,正如“系统分析师” 和“系统设计师” 两种职称考试一样,这样割裂的结果导致,需求分析的结果无法直接进行设计编程,而能够进行编程运行的代码却扭曲需求,导致客户运行软件后才发现很多功能不是自己想要的,而且软件不能快速跟随需求变化。DDD则打破了这种隔阂,提出了领域模型概念,统一了分析和设计编程,使得软件能够更灵活快速跟随需求变化。原创 2023-02-24 21:48:32 · 1580 阅读 · 29 评论 -
网站故障案例总结
一、写日志引发故障【故障现象】:应用服务集群发布后不久就出现多台服务器相继报警,硬盘可用空间低于警戒值,并且很快有服务器宕机。登录在线上服务器,发现 log 文件夹里面的文件迅速增加,不断消耗磁盘空间。【原因分析】:这是一个普通的应用服务器集群,不需要存储数据,因此服务器使用的是一块 100GB 的小硬盘,安装完操作系统、Web 服务器、Java 虚拟机、应用程序后,空闲空间就剩几十GB,正常情况下这些磁盘的空间足够,但是该应用的开发人员将 log输出的 level全局配置为 Debug。这样一次简单原创 2021-04-21 23:06:11 · 1180 阅读 · 20 评论