首页 存档 技术 查看内容

高性能高并发系统的稳定性保障

2018-3-30 13:00 |来自: 互联网 296 0

摘要: 作者:肖飞,于2011年8月份加入京东,曾亲身参与到京东的应用性能监控、统一日志、流式计算、内存缓存、四层防攻击等一些基础技术平台的研发和搭建工作,经历了京东的技术系统从简单粗放向复杂精细化的演变过程。目 ...

作者:肖飞,于2011年8月份加入京东,曾亲身参与到京东的应用性能监控、统一日志、流式计算、内存缓存、四层防攻击等一些基础技术平台的研发和搭建工作,经历了京东的技术系统从简单粗放向复杂精细化的演变过程。目前主要工作为多中心交易项目中的数据复制中间件JingoBUS的研发。平时也会开发一些公共的平台和工具,关注分布式系统的实现、程序设计、性能优化、开发语言等。


本文是2015年肖飞在内部分享的《高性能高并发系统的稳定性保障》PPT内容。


性能、并发、稳定性三者关系

  • 高性能:高吞吐量、低延时

  • 公式:吞吐量(并发)=单位时间/平均延时

  • N-th% Latency:TP99, TP999

  • 稳定性:低延时的稳定性标准为TP99/TP999是隐含的必要条件;系统的稳定性标准:高 可用;用户标准


吞吐量:QPS, TPS,OPS等等,并发。并不是越高越好,需要考虑TP99。用户角度:系统是个黑盒,复杂系统中的任何一环到会导致稳定性问题。SLA:在某种吞吐量下能提供TP99为n毫秒的服务能力。降低延时,会提高吞吐量,但是延时的考核是TP99这样的稳定的延时。


如何改善延时

你应该知道如下表格


原文:http://www.eecs.berkeley.edu/~rcs/research/interactive_latency.html


JeffDean

Disk random read IOPS:

IOPS = 1000 / (4 60000/7200/2) = 122

IOPS = 1000 / (4 60000/10000/2) = 142

IOPS = 1000 / (4 60000/15000/2) = 166

SSD random read IOPS:

IOPS = 1000000/16=62500

数字的启示

  • 高速缓存的威力;

  • 线程切换代价cache miss

  • 顺序写优于随机写

  • 局域网络快于本地HDD

  • 大块读优于小块读

  • SSD解决随机读写

  • 跨地域IDC网络是最大的延时



策略

  • 关键路径:“28原则”(20%的代码影响了80%的性能问题,抓重点)、“过早优化是万恶之源”。不同解读;

  • 优化代码:空间换时间:各级缓存;时间换空间:比如传输压缩,解决网络传输的瓶颈;多核并行:减少锁竞争lesscode;各类语言、框架、库的trick;算法 数据结构,保持代码的清晰、可读、可维护和扩展;

  • 通过性能测试和监控找出瓶颈


metric


原文:http://www.vpsee.com/2014/09/linux-performance-tools/


通过性能测试和监控:

  • 单系统operf/jprofiler etc;

  • Java的一系列工具:jstat, jstack, jmap, jvisualvm,HeapAnalyzer, mat

  • 分布式跟踪系统:Dapper,鹰眼等


benchmark


原文:http://www.vpsee.com/2014/09/linux-performance-tools/


微观

  • 内存分配

吞吐量和利用率的权衡

显式分配器:jemalloc/tcmalloc代替默认的ptmalloc

隐式分配器:JVM GC的各种调优

是否使用hugepagen预分配和重用:Netty的Pooled ByteBuf

减少拷贝:new ArrayList(int), new StringBuilder(int)


内存分配器利用率:减少内部或外部碎片;Page Table(页表), TLB(页表寄存器缓冲),减少TLB miss,pin cache。增加COW的开销, 与内存分配器的实现冲突。JVM的GC调优是很多Java应用的关注重点。


  • 减少系统调用

批处理: buffer io,pipeline

使用用户态的等价函数: gettimeofday -

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部