调优历程: 我是怎样将一个系统的性能提高20倍的?
最近从米国接收一个新的项目, 项目使用Spring + CXF 处理遵循行业规范的消息,并根据一定的规则将消息转发给其它的一个或者多个产品。
因为刚接手, 先对其进行功能的测试和测试其benchmark。 结果Beanchmark在AWS x3.xlarge机器上10个并发只能达到几十个TPS。
基于我前面的文章的对tomcat和其它框架的性能数据, 可以很自信的说, 这不科学。
经过一番紧张的基于性能考虑的调整,单台服务器终于达到了100个并发每秒能处理3000 多个的请求。
Java 8 lambdas读书笔记
Java 8 Lambdas是O'Reilly 2014年3月出版的一本介绍最新Java Lambda技术的书。网上评价也不错。正好我需要找一本全面介绍Java Lambda数据, 来整理一下我脑海中的关于Java Lambda非系统的知识点。
Lambda对于我来讲,并不是一个很新的技术。因为微软很早就在C#中加入了Lambda的特性。 而Java Lambda的语法和C#的语法非常的相像。 这篇文章算是对Java Lambda语法的一个整理。
这本书一共十个章节。 第一章是简单介绍,没有实质内容。 第二章主要介绍了Java Lambda
的语法。第三章介绍了Stream
接口。第四章介绍了Functional Interface
。第五章 首先介绍了方法引用,然后主要介绍了集合类新的Stream处理方式。 第六章 介绍了数据的并行处理。 第七章介绍了测试,调试和重构技术。第八章介绍了使用lambda的设计和架构原则。
第九章介绍了并发编程中的Lambda的应用。 第十章 前瞻,无实质内容
Web开发利器:介绍一款快速开发套件 (Node, Grunt, Bower和Yeoman)
最近看到javacodegeeks上的一篇文章Node, Grunt, Bower and Yeoman – A Modern web dev’s Toolkit, 文章介绍了一个web开发的工具集。 正好我今年以来也在使用这套工具集开发Web应用程序,也一直想写一篇文章总结一下这套开发套件的用法,借此机会,参考这篇文章,总结一下我使用这套工具的经验。
在的文章中,作者使用angular 框架开发,而我,遵循公司的选择,使用Ember.js作为我的开发框架。同时使用Compass进行SCSS的编译。这些地方会有所不同。
像Node.js, 已经不算新鲜的玩意了。Node.js第一个版本于2009年发布,现在有很多的公司也采用Node作为后端开发工具。 至于Node.js是否代表先进的开发方向, 目前还有很大的争论。但是基于Node.js的生态圈已经形成,一大波的优秀的的Node.js 模块已经涌现。但是像Grunt, Bower等工具,也有不少的朋友并不了解。所以这篇文章特别介绍一下它们。
Javacodegeeks网站上关注度最高的几篇文章
Javacodegeeks 网站提供了一系列优秀的关于Java语言的论文。 本文整理罗列了关注度比较高的几篇文章。很多优秀的文章已经被翻译成了中文,读者可以对照着阅读。
- 115 Java Interview Questions and Answers – The ULTIMATE List 由Sotirios-Efstathios Maneas发表于2014年4月。 文章列出了常见的Java面试题,但是我觉得关于Swing/AWT的问题可以删除了,还有多少现代的公司使用这种技术? 倒是可以将泛型,反射等技术的问题加上。 很遗憾的是这篇文章并没有设计并发编程的问题。
中文翻译请参考: 115个Java面试题和答案(上), 115个Java面试题和答案(下)
importnew还翻译了DZone网站的另外一篇Java面试题相关的文章: Java面试参考指南(一)和 Java面试参考指南(二)
- Java 8 Features – The ULTIMATE Guide
文章参考了大量的关于Java 8的文章, 算是对Java 8的特性的一个相当不错总结。
中文翻译请参考: Java 8新特性终极指南
40 Java Collections Interview Questions and Answers
Pankaj Kumar 发表于2013年2月。 罗列了非常多的Java集合面试题, 很多题目经常会在面试中问到。69 Spring Interview Questions and Answers – The ULTIMATE List
Theodora Fragkouli发表于2014年5月。 非常好的Spring面试题。 自我感觉Spring面试题不好出, 涉及范围广, 深度不好控制, 官方文档介绍的相当全。 这篇文章给了我们好的参考。
中文翻译请参考: 关于Spring的69个面试问答——终极列表
CSS的几个属性display,float,clear,overflow,visibility
整理了几个CSS常用的属性。
display属性:block/inline/none
display:block(作用是把行属性标签显示成块属性标签,可以设置宽高) ;
display:inline(作用是把块属性标签显示成行属性标签,这时块属性标签就不能设置宽高啦);
display:none(作用是使所控制的标签不显示)
visibility:hidden(是设置元素的框的不可见,但是在布局中的位置是不变的)
它和display:none的区别就在于后者不会占用那个位置,下一个元素会直接覆盖它,而前者是会占用那个布局,只是不显示内容,是 一片空白;并且下载的时候对于display:none就不会把不显示的元素给下载下来,而visibility:hidden则会把不显示的元素给下 载下来;
Sass基础
翻译自Sass官方文档: Sass Basics.
在使用Sass之前, 你需要在你的项目中设置一下。 如果你只是想浏览本页内容,没问题,继续。 但是还是强烈建议你首先安装Sass。 看这里的文档你可以了解怎么设置Sass。
预处理
Css自己本身很有趣,但是样式单变得越来越大,越来越复杂, 变得很难维护。 这真是预处理器要做的。 Sass让你使用CSS不存在的特性,比如变量,嵌套,混合(mixin), 继承等其它90个好的玩意来让CSS编写变得更有趣。
一旦你开始使用Sass, 它会预处理你的Saa文件, 把它存为一个正常的CSS文件, 用在你的网站上。
Java序列化框架性能比较
jvm-serializers提供了一个很好的比较各种Java序列化的的测试套件。 它罗列了各种序列化框架, 可以自动生成测试报告。
我在AWS c3.xlarge机器上进行了测试,一下是测试报告与解析。
关键的测试数据的统计代码如下:
|
|
测试时序列化和反序列化会迭代多次,默认2000次。 测试会有一个限定时间,一轮测试完成后时间还有的话还会继续新的一轮的测试。 因此, 由于不同的框架花费的时间不同, 测试的轮数也不一样。
一些开源项目的性能基准Benchmark
项目中使用了好些的开源项目。对于它们的性能, 只有官方的一些性能报告和一些第三方的性能分析。 做性能估计的时候只是根据以往的经验做估算。 随着软件的不断升级,以及服务器硬件配置的升级, 这些开源项目的性能也有了变化。以前的性能数据可能不太准确了。
所以这篇文章记录了当前(2014年秋)我在AWS机器上做的一些性能数据,期望在做软件架构的时候有所帮助。
当前测试的软件包括:
- Tomcat
- Jetty
- Vert.x
- Memcached
- MongoDB
- Java serializers
- CXF
- Spring MVC
这篇文章会不断更新, 将我最新的测试列出来。
MathJax 快速参考
MathJax是一个JavaScript引擎,用来显示网络上的数学公式。它支持大部分的主流的浏览器,对大部分用户而言它不需要安装,既没有插件需要下载也没有软件需要安装。MathJax使用网络字体(大部分浏览器都支持)去产生高质量的排版,使其在所有分辨率都可缩放和显示,这远比使用包含公式的图片要有效得多。使用MathJax显示数学公式是基于文本的,而非图片。它可以被搜索引擎使用,这意味着方程式和页面上的文字一样是可以被搜索的。 MathJax允许页面作者使用TeX、LaTeX符号和 MathML 或者 AsciiMath 去书写公式。 MathJax甚至可以将Tex格式转化为MathML格式,使其可以被原生支持MathML格式的浏览器更多的渲染。转化为MathML格式后你可以复制粘贴它们到其他程序中。
MathJax是模块化的,所以它仅仅在需要时才加载它的组件,同时也可以被扩展以实现更多功能。 MathJax同时也是高度可配置的,允许作者作出更适宜网站自身的自定义。 如果你需要,MathJax的API甚至可以让你在你的网页上动态的创建公式。
本网站上的数学公式都用LaTex格式写的。
喜欢中文的朋友可以参考MathJax 中文文档。
\(E=MC^2\)
MathJax有三种安装方式:最简单的方法就是使用分布式网络服务中的MathJax的副本,它位于 cdn.mathjax.org ,但是你也可以下载并安装一个MathJax的副本到你的服务器,或者使用在你本地硬盘的副本(这样是不需要使用网络)。 官方文档里有详细的描述。
你可以配置MathJax,以便支持各种公式格式和输出。你还可以配置内联数学公式的时候采用的标记符号。如:
|
|
stackexchange网站上有一个很好的帖子, 收集了大家认为比较常用的公式写法。