加入收藏 | 设为首页 | 会员中心 | 我要投稿 保山站长网 (https://www.0875zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

《工业互联网专项工作组2020年工作计划》

发布时间:2021-02-19 15:37:18 所属栏目:外闻 来源:互联网
导读:具体该如何去量化分析性能?这里列出了一些工具参考: 系统层面:tsar、top、iostat、vmstat 网络层面:iftop、tcpdump、wireshark 数据库层面:SQL explain、CloudDBA 应用代码层面:JProfiler、Arthas、jstack 其中很多工具也是问题排查时常用的诊断工具;毕

具体该如何去量化分析性能?这里列出了一些工具参考:

  • 系统层面:tsar、top、iostat、vmstat
  • 网络层面:iftop、tcpdump、wireshark
  • 数据库层面:SQL explain、CloudDBA
  • 应用代码层面:JProfiler、Arthas、jstack

其中很多工具也是问题排查时常用的诊断工具;毕竟,无论是性能分析还是诊断分析,目的都是去理解一个系统和他所处的环境,所需要做的事情都是相似的。

优化原则

你应该做的:上面已经提了很多,这里再补充一点:性能优化与做功能需求一样,都是为业务服务的,因此优化时千万不要忙着自嗨,一定要结合目标需求和应用场景 —— 也许这块你想做的优化,压根线上就碰不到;也许那块很难做的优化,可以根据流量特征做非通用的定制优化。

你不应该做的:即老生常谈的提前优化(Premature-optimization)与过度优化(Over-optimization) —— 通常而言(并不绝对),性能优化都不是免费的午餐,优化做的越多,往往可维护性也会越差。

优化手段

常用的性能优化手段有哪些?我这里总结了 8 个套路(最后 1 个是小霸王多合一汇总套路)。

1)简化

有些事,你可以选择不做。

  • 业务层面:e.g. 流程精简、需求简化。
  • 编码层面:e.g. 循环内减少高开销操作。
  • 架构层面:e.g. 减少没必要的抽象/分层。
  • 数据层面:e.g. 数据清洗、提取、聚合。

2)并行

有些事,你可以找人一起做。

方式:单机并行(多线程)、多机并行(分布式)。

优点:充分利用机器资源(多核、集群)。

缺点:同步开销、线程开销、数据倾斜。

  • 同步优化:乐观锁、细粒度锁、无锁。
  • 线程替代(如协程:Java WISP、Go routines、Kotlin coroutines)。
  • 数据倾斜:负载均衡(Hash / RR / 动态)。

3)异步

有些事,你可以放手,不用死等。

方式:消息队列 + 任务线程 + 通知机制。

优点:提升吞吐率、组件解耦、削峰填谷。

缺点:排队延迟(队列积压)。

  • 避免过度积压:Back-pressure(Reactive思想)。

4)批量

有些事,你可以合起来一起做。

方式:多次单一操作 → 合并为单次批量操作。

案例:TCP Nagel 算法;DB 的批量读写接口。

优点:避免单次操作的固有开销,均摊后总开销更低。

缺点:等待延迟 + 聚合延迟。

  • 减少等待延迟:Timeout 触发提交,控制延迟上限。

5)时间空间互换

游戏的本质:要么有闲,要么有钱。

空间换时间:避免重复计算、拉近传输距离、分流减少压力。

  • 案例:缓存、CDN、索引、只读副本(replication)。

时间换空间:有时候也能达到“更快”的效果(数据量减少 → 传输时间减少)。

  • 案例:数据压缩(HTTP/2 头部压缩、Bitmap)。

6)数据结构与算法优化

程序 = 数据结构 + 算法

  • 多了解一些“冷门”的数据结构 :Skip list、Bloom filter、Time Wheel 等。
  • 一些“简单”的算法思想:递归、分治、贪心、动态规划。

7)池化 & 局部化

共享经济 & 小区超市

池化(Pooling):减少资源创建和销毁开销。

  • 案例:线程池、内存池、DB 连接池、Socket 连接池。

局部化(Localization):避免共享资源竞争开销。

  • 案例:TLB(ThreadLocalBuffer)、多级缓存(本地局部缓存 -> 共享全局缓存)。

8)更多优化手段

  • 升级红利:内核、JRE、依赖库、协议。
  • 调参大师:配置、JVM、内核、网卡。
  • SQL 优化:索引、SELECT *、LIMIT 1。
  • 业务特征定制优化:e.g. 凌晨业务低峰期做日志轮转。
  • Hybrid 思想(优点结合):JDK sort() 实现、Weex/RN。

2 稳定性优化

稳住,我们能赢。—— by [0 杀 10 死] 正在等待复活的鲁班七号

维持稳定性是我们程序员每天都要思考和讨论的大事。

什么样的系统才算稳定?我自己写了个小工具,本地跑跑从来没出过问题,算稳定吗?淘宝网站几千人维护,但双十一零点还是经常下单失败,所以它不稳定喽?

稳定是相对的,业务规模越大、场景越复杂,系统越容易出现不稳定,且带来的影响也越严重。


(编辑:保山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读