使用火焰图做性能分析

系统性能的评估维度可能很多,包括应用的吞吐量、响应时间、任务完成时间和资源利用率等。但是这些指标(metrics)仅仅是表象,一旦发现异常,如何从代码级别定位性能问题才是解决问题的关键,本文介绍了一种使用火焰图(Flame Graph)来做性能分析的方法,在实战中具备很高的可操作性和快速pinpoint问题的能力。

下面按照1. 发现问题,2. 分析问题,3. 解决问题三个章节展开,最后是4. Lesson Learned。

 

1. 发现问题

最近公司完成大数据集群的迁移,应用大多是Spark开发的,但是仍然存在一个老的每日运行的Hadoop任务突然发现指标异常,主要体现在[……]

Read more

浅谈从Google Mesa到百度PALO

最近在研究OLAP相关的技术,正好看到Google 2014年的论文《Mesa: Geo-Replicated, Near RealTime, Scalable Data Warehousing》,以及百度最近2017年开源的基于Mesa+Impala的实现系统PALO,本篇就尝试结合起来看下二者,主要是学习介绍性质的文章。
 

1. Mesa

Mesa是一个Google内部使用的数据仓库系统,从论文的标题可以抓住几个关键词:可实现跨DC复制的、近实时的、可扩展的。这几点算是Mesa的特色所在,同时和Mesa要解决的问题背景有很大关系,Mesa主要解决Google在线广告报表和[……]

Read more

JAVA并发编程实战笔记

第二次认真读了Doug Lea的Java Concurrency In Practice这本大作,记录笔记在此链接

Easy-mapper – 一个灵活可扩展的高性能Bean mapping类库

1 背景

做Java开发都避免不了和各种Bean打交道,包括POJO、BO、VO、PO、DTO等,而Java的应用非常讲究分层的架构,因此就会存在对象在各个层次之间作为参数或者输出传递的过程,这里转换的工作往往非常繁琐。
 
这里举个例子,做过Java的都会深有体会,下面代码的set/get看起来不那么优雅 :-(
ElementConf ef = new ElementConf();
ef.setTplConfId(tplConfModel.getTplConfIdKey());
ef.setTemplateId(tplConfModel.getTemplateId[......]

Read more

从JVM说起到初探Scala应用实践

最近在公司组内分享了一次关于JVM、Scala以及Spark介绍性质浅析的议题,这种形式的分享可以鞭策自己主动、自驱的完成一些既定目标,还能和有经验的人士一起交流,共享与学习是每一个做技术的同胞都应该拥抱的价值观。

PPT见连接,请点此

大塞车游戏活动的算法解

最近在公司组织的培训上,遇到了一个很有意思的算法题,这篇文章就借这个为题提供一个解。

解的代码用Java实现,并配有演示,已经放到了github上https://github.com/neoremind/big-traffic-jam-solver
 
首先感谢李培英老师,《职业化研讨》这门课非常值得公司内的一线管理人员去学习。在讲到职业化内涵里的“规则意识”一节时,让大家做了一个简单的大塞车游戏,规则如下:
 
1、邀请10人以上的学员(注意是偶数,当然越多越好),列成两队,面对面的坐在椅子上。
2、中间叫做“鸿沟&rdq[……]

Read more

Flume+Kafka收集Docker容器内分布式日志应用实践

1 背景和问题

随着云计算、PaaS平台的普及,虚拟化、容器化等技术的应用,例如Docker等技术,越来越多的服务会部署在云端。通常,我们需要需要获取日志,来进行监控、分析、预测、统计等工作,但是云端的服务不是物理的固定资源,日志获取的难度增加了,以往可以SSH登陆的或者FTP获取的,现在可不那么容易获得,但这又是工程师迫切需要的,最典型的场景便是:上线过程中,一切都在GUI化的PaaS平台点点鼠标完成,但是我们需要结合tail -F、grep等命令来观察日志,判断是否上线成功。当然这是一种情况,完善的PaaS平台会为我们完成这个工作,但是还有非常多的ad-hoc的需求,PaaS平台无法满足[……]

Read more

使用Scala开发一个DSL来做远程调用

问题背景

最近在实施微服务化过程中,发现了一类潜在需求(这就是传说中开发者的敏锐嗅觉=_ =?):

如何快速的来进行远程RPC调用,来进行测试、排查问题?

服务调用方式有两种形式,如下图所示。
第一种,传统的方式,服务provider提供SDK,服务consumer在构建环境中引入SDK依赖,并且配置IP:PORT,直连调用。
 
第二种,改进的方式,服务provider通过平台治理中心来生成SDK,实际就是将API的接口和签名、类定义信息进行统一的schema描述(可以使用proto)后,由平台负责生成SDK,服务consumer可以通过契约schema的方式、[……]

Read more

Java的业务逻辑验证框架fluent-validator

1 背景

在互联网行业中,基于Java开发的业务类系统,不管是服务端还是客户端,业务逻辑代码的更新往往是非常频繁的,这源于功能的快速迭代特性。在一般公司内部,特别是使用Java web技术构建的平台中,不管是基于模块化还是服务化的,业务逻辑都会相对复杂。

这些系统之间、系统内部往往存在大量的API接口,这些接口一般都需要对入参(输入参数的简称)做校验,以保证:
1) 核心业务逻辑能够顺利按照预期执行。
2) 数据能够正常存取。
3) 数据安全性。包括符合约束以及限制,有访问权限控制以及不出现SQL注入等问题。

开发人员在维护核心业务逻辑的同时,还需要为输入做严格的校验。当输入不合法[……]

Read more

基于Protobuf的分布式高性能RPC框架——Navi-Pbrpc

1 简介

Navi-pbrpc框架是一个高性能的远程调用RPC框架,使用netty4技术提供非阻塞、异步、全双工的信道,使用protobuf作为序列化协议,同时提供长、短连接模式,支持non-blocking和传统的blocking io,以及负载均衡,容错处理策略等,对于基于socket的分布式调用提供通信基础。

如果你的项目中需要高性能的RPC解决方案,那么navi-pbrpc可以帮助到你构建一个强大的远程调用系统。

Navi-pbrpc使用netty nio开发,全双工、异步、非阻塞的通信模型,保证了高性能和理想的QPS,了解详细性能测试报告见附录性能测试。

单测覆盖率见附录。

[……]

Read more

SpringMVC源码分析和一些常用最佳实践

前言

本文分两部分,第一部分剖析SpringMVC的源代码,看看一个请求响应是如何处理,第二部分主要介绍一些使用中的最佳实践,这些best practices有些比较common,有些比较tricky,旨在展示一个框架的活力以及一些能在日常项目中能够应用的技巧,这些技巧的线索都可以在第一部分的代码剖析中找到,所以读读源代码对于使用好任何框架都是非常有帮助的,正所谓“知其然,还要知其所以然”。[……]

Read more

从无重复大数组找TOP N元素的最优解说起

有一类面试题,既可以考察工程师算法、也可以兼顾实践应用、甚至创新思维,这些题目便是好的题目,有区分度表现为可以有一般解,也可以有最优解。最近就发现了一个这样的好题目,拿出来晒一晒。

1 题目

原文:

There is an array of 10000000 different int numbers. Find out its largest 100 elements. The implementation should be optimized for executing speed.

翻译:

有一个长度为1000万的int数组,各元素互不重复。如何以最快的速度找出其中最大的10[……]

Read more

半面创新的一些学习总结

有幸参与了周宏桥老师的半面创新两天的培训session,主题是关于创新突破性产品的实践体系,体会颇多,扩展自己的视野的同时,大有感觉在创新领域绝对是存在原则和方法论的,趁热记录下课程的重点内容。下面内容多是上课时的笔记,由于周老师通晓历史诗歌,所以有很多生动的故事也简单写在里面,了解更多可以搜索周老师的相关出版物

 

1. 创新成果五大原则

一命二正三出奇
四用地利五任势
 

1.1 一命

本质是一个时空绑定的生产关系场。可以理解为,新生产力能够匹配生产关系。生产力、生产关系涉及到马克思主义哲学,此处不做展开。
 
举例来说,过去的传统软件公司[……]

Read more

Java基础类型存储与运算知识

最近发现一个问题,面试者、甚至组员中,在被问及一些计算机基础类型存储知识的时候,也许是大家目前的工作都是比较偏业务,以至于基础知识不太扎实,感觉有必要在这里在夯实一下,以被后人和自己牢记——基础知识或许不是你现在工作最重要的,但却是你未来进步的基石。

 

1. Java中的原码、反码和补码

1.1 原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:

[[……]

Read more

构建一个类timeline系统的架构设计

最近一直对微博、twitter、微信朋友圈这类软件所提供的类timeline系统架构很有兴趣,也可以叫做时间轴、news feed,或者status update,查阅了不少资料,也结合自己对于架构设计的一些积累认识,尝试着设计了一把。下图是一个简单tweets界面:
首先明确目标,要设计的系统是一个用户数、数据量、并发量足够大的平台,按照一般经验:
1M+ Active User,10T后台数据,3k QPS,peek 10k QPS
这里声明一点,业务需求决定技术演化路线,任何项目开始做要start from the bottom up,千万不要过度设计啊,下文都是尝试的思考)[……]

Read more