性能优化
文章平均质量分 87
明明如月学长
阿里巴巴 资深 Java 研发工程师。《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《EffectiveJava》独家解析》专栏作者、《性能优化方法论》技术电子书作者。热爱技术,喜欢思考,乐于分享。
展开
-
提高 API 性能的 7 种最流行的方法
连接池预先创建并维护一定数量的数据库连接,当应用程序需要执行数据库操作时,可以直接从连接池中获取一个可用的连接,而不是每次操作都创建新的连接。通过优化查询策略,例如使用JOIN语句或特定的ORM预加载功能,可以一次性获取所有必要数据,避免了大量不必要的数据库访问,从而提高了性能。使用高效的序列化库,减少不必要的数据字段,以及采用更紧凑的数据格式,都可以减少响应体的大小,从而加快数据传输速度和解析时间。常见的压缩算法包括GZIP,它可以显著减少数据的大小,提高API的整体性能。原创 2024-04-01 07:15:00 · 961 阅读 · 0 评论 -
【性能优化方法论系列】六、总结
本主专栏要讲述性能优化的本质,性能优化的思想来源,性能优化的常见思路,还讲到了性能优化的注意事项。最后结合一个具体的场景讲述性能优化如何落地。性能优化没有“标准答案”,优秀的程序员应该根据实际的场景选择性能优化的方案。另外,希望大家能够意识到,本专题所讲的性能优化方面的知识并非只是帮助我们去做技术方案,还建议大家用性能优化的视角来学习中间件、源码,你将有更多的收获。在这里推荐几本和性能优化相关的图书,大家感兴趣可以读读:《性能之巅》、《图解性能优化》、《Web 性能权威指南》、《Java 性能权威指南》、原创 2022-07-13 23:42:09 · 470 阅读 · 0 评论 -
【性能优化方法论系列】五、实际案例分析
下面给出一个模拟的业务场景,大家可以结合上面给出的性能优化核心思路,自己先设计一个性能优化的方案再和给出的方案进行对比,如果自己设计的方案更好,为你点赞;如果设计的方案没有给出去的方案更好,对比下差异。注:本文给出的方案未必是最佳,只是希望帮助大家理解性能优化思想如何应用。功能描述:需要思考的问题:问题1:数据存在哪里?单个活动就可能上百万的数据量,如果使用 MySQL 存储就要考虑分库分表,外加读写分离。如果存储到 Redis,会造成大 key, 就需要采用化整为零的思想,采用类似多级索引的方式,将订阅原创 2022-07-12 23:22:23 · 729 阅读 · 0 评论 -
【性能优化方法论系列】四、性能优化的注意事项
在设计性能优化方案时,要注意避免过早优化,要考虑投入产出比。在产品初期,只要性能不会特别影响用户体验,通常不需要特别关注性能问题。可以把更多的精力投放到满足用户的核心需求,提高产品销量,让产品生存下来。在考虑性能优化的同时要注意可读性、可用性、稳定性、正确性、可拓展性、安全性等。一般来说,软件设计的原则应该优先于性能优化的原则。即不能为了性能优化而破坏软件设计的原则,给后续的拓展维护埋坑。比如设计要符合 “高内聚、弱耦合”、“封装复杂度”;比如设计模式的一些基本原则: “单一职责原则”、“迪米特法则”、“开原创 2022-07-11 22:19:02 · 531 阅读 · 0 评论 -
【性能优化方法论系列】三、性能优化的核心思想(3)
随机 IO 读写速度和顺序 IO 读写速度差距较大。因此有可能的话,尽量将随机读写转为顺序读写。前面讲到使用缓存达到空间换时间的效果。但有时候还可以采用 “就近原则” ,使用“更近”的数据,调用“更近”的服务。一般来说,同一个虚拟机 > 同一台服务器 > 同一个集群 > 同一个机房 > 同一个城市 > 同国其他城市 > 跨国。Dubbo 从 开始,每个服务默认都会在本地暴露。在引用服务的时候,默认优先引用本地服务。如果希望引用远程服务可以使用一下配置强制引用远程服务[8]。 本质上也是采用 “就近原则”,原创 2022-07-10 23:33:31 · 875 阅读 · 0 评论 -
【性能优化方法论系列】三、性能优化的核心思想(2)
空间换时间是性能优化最常用的手段之一。其中缓存就是空间换时间的一种典型应用。CPU 缓存、浏览器缓存、CDN 缓存、DNS 缓存、内存缓存、 Redis 缓存等,它们都是将数据缓存在离使用者更近的地方,或者读取速度更快的存储介质中,通过空间换时间的方式实现性能优化的。在展开讲解之前,大家想想如果电商平台自营商品都从中央仓库发货,近的用户收货时间会短一些,远的用户收货时间可能会很长。但是,很多朋友知道某东热门商品收货非常快,不知道大家是否知道原因。据我了解,某东在全国热门城市建立仓库,每个仓库都有热门产品原创 2022-07-09 23:11:44 · 701 阅读 · 0 评论 -
【性能优化方法论系列】三、性能优化的核心思想(1)
比如由单个 WEB 服务器来响应用户请求,改为通过 Nginx 等负载均衡工具将请求分发到多台服务器。这就相当于原本店铺里只有一个服务员,一个服务员同时只能接待 5 位客人,现在又多招聘几个服务员,这样能够同时接待顾客数量会更多一些。或者为集群添加更多机器。通常很多站点都会在某些大型活动(如限时秒杀、微博热帖、高考查成绩、热门直播等)前或过程中,通过手动或者自动“扩容” 增加更多机器的方式来支撑更多流量。增加配置,通常是更换性能更好的 CPU、增加内存、增加宽带、使用固态硬盘、增加磁盘空间等。下图为阿里云购原创 2022-07-07 23:02:32 · 793 阅读 · 0 评论 -
【性能优化方法论系列】二、性能优化方法论的思想源泉
本小节介绍自己对性能优化方法论的思想来源。既然,性能问题是“良好的用户体验和有限的资源之间的矛盾” 导致的。那么,我们如何解决这个矛盾呢?换句话说,资源不足怎么办?我们可以将问题进行转化,换个问法:“如果你这个月钱不够花怎么办”?可能很多人会说:想办法多挣点,比如多加点班(如果有加班费的话)、多干一些兼职、可以向朋友借点,可以省着点花。这些方法的背后闪烁着两个重要思想:“开源和节流”!!开源,即投入更多的资源。如增加更多服务器、提高服务器的配置,投入更多的开发人员等。节流,即提高资源利用率,减少资源浪费。如原创 2022-07-07 22:47:41 · 784 阅读 · 0 评论 -
【性能优化方法论系列】一、性能优化的本质
可能很多人没有认真思考过:“为什么我们需要进行性能优化?”这个问题。在我看来,性能优化是为了“解决良好的用户体验和资源的有限性之间的矛盾”。首先,我们性能优化一般都是追求更快的响应速度,通常最终目的是为了获得更好的用户体验。这里所说的资源是广义上的资源,“资源的有限性”包括:资金成本的有限性,人力资源的有限性,服务器等硬件资源的有限性,时间的有限性(如为了抢占市场,希望尽早上线造成的压力)等。如果资源是无限的,如开发周期很长,投入的人力很多,服务器资源充足,甚至服务器内存是无限大的,那么设计出来的产品可能原创 2022-07-07 22:34:03 · 1100 阅读 · 0 评论