Java混合模式火焰图

在做性能调优的时候,我们通常会借助一些性能分析工具(比如perf,DTrace)分析系统资源的使用情况,比如CPU、内存等,但这些工具分析的结果通常是文本形式,不够直观,不便于快速定位系统瓶颈。Brendan Gregg开发了一种可视化的性能分析工具–火焰图,这种工具通过分析包含stack traces的profile数据,以可视化的形式展现出来,通过它可以快速准确地定位到热点代码。

本文内容涵盖了如何理解火焰图、如何生成火焰图、火焰图有哪些缺陷、如何解决这些缺陷、以及Java混合模式火焰图的具体生成步骤和具体实例。

Read More

Kafka高可靠场景下的性能表现

大多数业务场景需要使用可靠性消息,Kafka在高可靠场景下的性能表现到底如何呢?
本文的压测结果是消息大小100字节、开启和不开启batch,producer的QPS分别可以达到3.6W和24.8W。

在高可靠场景下,微信开源PhxQueue vs Kafka的性能:消息大小为10字节、开启和不开启batch,Kafka的producer的QPS分别可以达到180W/S和9W/S
压测结果用于评估是否可以用于实际的业务场景,所以压测场景并未穷举多种message.size、batch.size以及partitions.size

Read More

system cpu time飙高导致MySQL不可用

最近线上应用出现了一个诡异问题,在访问量无明显增长、线上未做任何变更(代码发布和DB操作)的情况下,某个业务子系统突然出现大量的业务接口超时,MySQL性能急剧下降,系统不可用。

故障现场

当时观察到的主要异常现象包括MySQL出现大量的慢查询、MySQL服务器的system cpu time飙高、MySQL的性能急剧下降、业务接口响应时间飙高、业务系统大量出现获取不到DB connection的异常日志等现象。当时的主要信息如下。

Read More

深入理解Kafka的核心调优参数

UPDATE:配置属性已更新到2.11-0.11.0.0

kafka的配置属性多达几百个😓,在生产环境中对kafka进行调优时,该如何设置这些属性值呢?😤

调优之前,首先需要对业务场景进行分析,确定业务是吞吐量优先,还是对延时优先,是对可靠性要求比较高,还是对可用性要求比较高,然后再根据分析的结果,在吞吐量、延时、可靠性和可用性4个方面做权衡。

下面分别从吞吐量优先、延时优先、可靠性优先以及可用性优先4个方面,逐一分析kafka应该设置哪些核心属性以及提供建议值。

kafka的配置属性到底有多少,看看主要配置属性就知道😰💔

Read More

限流技术的常见算法及其实现

绝境长城the wall

通常限流主要是限制并发数以及QPS,从而避免异常流量对系统的冲击;

并发数和QPS是紧密相关的,可以参考Little’s Law(律特法则):L = λW (proven 1961)

一个排队系统在稳定状态下,在系统里面的个体的数量的平均值 L, 等于
平均个体到达率λ (单位是λ个每单位时间)乘以 个体的平均逗留时间W

数学定理(严格的数学推理,非经验公式)
排队论的理论

Read More

Elasticsearch内存使用分析

UPATE: 内容已更新到Elasticsearch v5.6

内存对Elasticsearch而言,非常重要,因为它为了提升性能使用了大量的in-memory数据结构。

官网推荐给Elasticsearch分配的内存不能超过32GB(小于32GB时会启用compressed oops,节省很多内存)
并且还必须是小于物理内存的50%,以便为Lucene利用Cached Memory提供更多的剩余内存。

Elasticsearch内部是如何使用这些内存的呢?下面这张图说明了Elasticsearch和Lucene对内存的使用情况。

Read More

Kafka Best Practices

Kafka官网给我们提供了一些很好的最佳实践,但是内容还不够详实。
所以这篇文章整理了各大公司Kafka最佳实践的最新资料,为使用Kafka提供参考。

UPDATE:内容更新如下

  • 在最新版本中Kafka的部分属性的默认值会发生变化,本文已经根据当前最新版本(2.11-0.11.0.0)进行重新整理。
  • 本文已整合2017年Hortonworks公司在DataWorks Summit/Hadoop Summit上分享的干货内容

Read More

软件架构模式的实践

《Software Architecture Patterns》(PDF)这本书的内容短小精悍、通俗易懂,举的例子相对简单,偏重理论。
根据我对这本书的理解以及在架构方面的实践总结形成了这篇文章,重点讲讲这些模式的具体实践。

从这本涉及到的技术概念可以看出,作者偏重于企业级应用的架构。
比如文中提到的:Spring Integration、Apache Camel和Mule ESB ,他们都是主流的开源EIP框架,这些框架并不适用于互联网公司,相对于互联网的业务逻辑,这些框架太重,不是轻量级的框架。还提到了BPEL引擎,比如Apache ODE和jBPM。

EIP: Enterprise Integration Patterns 企业集成模式,涵盖了40+种模式

本文涉及到分层架构、事件驱动架构、微内核架构以及微服务架构。书中最后描述的基于空间的架构(基于云的架构),因为实际应用中未涉及到,所以本文不作描述。

Read More