09
2011
0

QCon2011大会4月8日PPT学习总结

最近正在召开QCon北京2011大会,趁此机会学习了一部分QCon大会的PPT,大会的PPT可以在QCon大会官网下载:http://www.qconbeijing.com/schedule.html

主题:淘宝商品库优化实践

讲师:淘宝核心系统数据库组 余锋(褚霸)

在技术方案的着眼点上,讲师主要强调了:通过高性能硬件支持平台,充分利用Cache(这一点在之后的演讲中多次强调),充分考虑容灾性。同时讲师表示要大胆借助开源产品提高系统性能

在I/O能力的分配上,提高读能力的方式是零散读,提高IOPS,对于提高写能力采用了集中写,提高吞吐量

在Cache分配上,商品库除了采用MySQL的内部存储、虚拟内存以外,还利用了Facebook的Flashcache技术(在文件系统和设备驱动之间新增一次缓存层,实现对热门数据的缓存,一般用SSD作为介质的缓存,通过将传统硬盘上的热门数据缓存到SSD上,然后利用SSD优秀的读性能,来加速系统)。这个方法较之内存缓存,没有内存快,但是可用空间可以比内存大很多。此外还利用了RAID卡内部Cache。

对于系统调优的指导思想,重视理论结合实际,不靠主观猜测而是按实际效果做决定。“内存为王”,用加大内存提升系统性能(其实也是间接加大了缓存)。随机数据和顺序数据分离,随机数据采用Direct IO(优点是CPU占用率小,适用于缓存命中率较低的文件),顺序数据通过缓存读。在保证安全的前提下,一定要充分利用系统各级的Cache

在业务上优化掉复杂查询(类似天涯论坛的做法)。对于InnoDB,分配尽可能大的Buffer Pool,日志数据分开存储,减少锁对多核CPU的影响(减小锁的开销),适时清除InnoDB产生的日志Cache。 (更多…)

Written by Hesey in: 技术,数据库,架构 |

09
2011
0

NoSQL简介

传统关系型数据库面临很多问题。

1、需要很高的实时插入性能:在高并发读写环境下,每秒上万次读请求勉强可以支撑,但是在每秒上万次写请求之下,硬盘I/O将无法承受。

2、需要海量数据存储能力的同时还需要非常快的查询检索速度:在一个表中存储数以亿计的记录后,使用SQL查询的效率是极为低下的。

3、需要将数据存储无缝扩展到整个集群:数据库的横向扩展比较困难,往往需要停机维护和数据迁移,不能像Web服务器那样简单地通过增加服务器数量来减轻负载。

针对高并发读写海量存储以及可扩展性三个方向,有不同的NoSQL解决方案,这里对每个方向分别简要介绍了Redis、MongoDB、Cassandra三款NoSQL数据库。 (更多…)

Written by Hesey in: 技术,数据库 |

06
2011
2

高性能可伸缩系统构建的简要思想

为了支持高并发访问和海量数据的场景,在搭建应用时需要努力构建可伸缩的系统,这样在后期系统遇到瓶颈时可以简单地通过垂直伸缩或水平伸缩扩展系统。本文整理借鉴了林昊老师对构建可伸缩系统的文章。

一、垂直伸缩

垂直伸缩指通过增加或升级单台机器的硬件来获得对高并发访问和大数据量的更好支持。

1、支持高并发访问

可以增加CPU和内存,同时需要对系统进行一定调整,尽可能使得软件性能随硬件性能线性增长。

增加CPU时,需要进行如下调整:

首先需要减小锁的开销。当Java程序中线程比较多时,线程的上下文切换开销会增大,对锁的竞争也会变得更激烈,所以通常意义上线程并不是越多越好。当系统因为锁的竞争而导致CPU利用率较低时,可以采取以下策略减少锁带来的开销:

a、使用Java API中的并发类库

可以采用java.util.concurrent等包下面的并发类,通常它们已经经过了充分的优化,能有效地支持高并发环境下的操作,并发类中大量采用了非阻塞算法,有些利用了CAS实现无锁。这里有一个小提示:使用并发哈希表时应优先采用ConcurrentHashMap而不是Hashtable,前者通过分解锁的方法使得效率更高。 (更多…)

Written by Hesey in: 分布式,并发,技术,架构 |

05
2011
2

浅析Java虚拟机结构与机制

本文旨在给所有希望了解JVM(Java Virtual Machine)的同学一个概念性的入门,主要介绍了JVM的组成部分以及它们内部工作的机制和原理。当然本文只是一个简单的入门,不会涉及过多繁杂的参数和配置,感兴趣的同学可以做更深入的研究,在研究JVM的过程中会发现,其实JVM本身就是一个计算机体系结构,很多原理和我们平时的硬件、微机原理、操作系统都有十分相似的地方,所以学习JVM本身也是加深自我对计算机结构认识的一个很好的途径。

另外需要注意的是,虽然平时我们用的大多是Sun(现已被Oracle收购)JDK提供的JVM,但是JVM本身是一个规范,所以可以有多种实现,除了Hotspot外,还有诸如Oracle的JRockit、IBM的J9也都是非常有名的JVM。 (更多…)

Written by Hesey in: Java,技术 |

10
2011
0

初学设计模式的一点感悟

最近几个星期的时间对设计模式做了入门学习,之前读过GoF的那本《设计模式》,感觉非常晦涩。在面向对象开发技术这门课中有设计模式的内容,这才重新拾起这个东西,发现比之前那次学明显容易多了。自己反思了一下,应该是和后来打好了比较好的面向对象思想的基础有关,所以也建议想要学习设计模式的朋友,先把面向对象的基本思想搞明白,起码得知道多态是干嘛用的,为什么要多态,多态有什么好处,这些问题可以看我之前写的那篇《浅谈多态机制的意义及实现》。然后再来学习设计模式,才算有迹可循。

本文是对设计模式的入门学习做一些感悟和分享,希望能和大家一起多多交流关于模式的心得。 (更多…)

Written by Hesey in: 技术,面向对象 |
十二
23
2010
2

CosHtmlCache静态化的自动化访问

为了提升访问速度并利于SEO,博主的博客使用CosHtmlCache插件进行静态化处理,该插件的一个不足就是就是必须在非登录状态下访问页面才会自动生成缓存,在后台的插件设置中只有删除缓存而没有一次性静态化的选项,这非常不方便,特别是当博文比较多达到几百篇时,显然人工点击是让人无法忍受的。

第一个想到的是直接修改插件,对文章内容进行变更后自动生成缓存,但是这里有一个问题:如果插件升级,就必须重新修改代码,另一方面这也破坏了封装原则。

鉴于此,我写了两个程序尝试解决这个问题,思路是用程序模拟GET请求自动访问所有页面,这样达到了与人工点击一样的效果。至于如何得到博客的所有文章和所有页面的地址,我使用了Google Sitemap XML插件。当然并不是单纯为了得到网址才安装的这个插件,之前为了优化Google的搜索,用这个插件自动生成了Sitemap然后在Google的Webmaster Tools里提交就可以起到比较好的收录效果。这个插件当然也可以提供博客所有的网址。

Java版本采用DOM对XML文件进行处理,PHP版本采用正则表达式解析出网址。 (更多…)

Written by Hesey in: Java,技术 |
十二
16
2010
0

浅谈多态机制的意义及实现

在面向对象编程(Object-Oriented Programming, OOP)中,多态机制无疑是其最具特色的功能,甚至可以说,不运用多态的编程不能称之为OOP。这也是为什么有人说,使用面向对象语言的编程和面向对象的编程是两码事。

多态并没有一个严格的定义,维基百科上给它下的定义比较宽松:

Subtype polymorphism, almost universally called just polymorphism in the context of object-oriented programming, is the ability of one type, A, to appear as and be used like another type, B.

一、子类型和子类

这里我想先提一下子类型(Subtype)这个词和子类(Subclass)的区别,简单地说,只要是A类运用了extends关键字实现了对B类的继承,那么我们就可以说Class A是Class B的子类,子类是一个语法层面上的词,只要满足继承的语法,就存在子类关系。 (更多…)

Written by Hesey in: Java,技术,面向对象 |
十二
08
2010
3

为什么说思想高于语法

在普通人眼中,一名程序员懂的语言越多,做出的界面越华丽,很大程度上便意味着他的编程水平越高,但是从软件工程师的角度来说,只从语言、GUI编程这些角度并不足以窥之全貌。语言只是程序开发相对低层的东西(与“底层”有所区别),语言就像工具,和扳手、钳子一样,会用它们只是干活的起始,语言又跟英语差不多,会说Hello World不代表你能用英语和人探讨人生哲学了,相反,语言是基本关,是程序设计的必要条件。

Pascal之父,结构化程序设计先驱Niklaus Wirth提出了那个经典的等式:Algorithms + Data Structures = Programs. 事实上在程序设计、架构设计的过程中,很少会去考虑相关的语言细节(Don’t care for the implement, just design!),当然我会考虑这样的设计采用什么样的语言、哪种框架来做可行且对我来说最高效。这两年脚本语言大行其道,不是因为它们的功能之强大可以超越其它任何语言,恰是因其高效,生产力不仅可以用来衡量程序员,也可以用于评估一门语言。没有最好的语言,只有适合的语言,好的开发者应当懂得因地制宜,用最恰当的手段最高效地解决眼前的问题。 (更多…)

Written by Hesey in: 思考,技术 |
十一
10
2010
7

对软件开发道路的一点思考

上个周末软件学院组织学生去北京参观一些IT公司,我也在赴京的队伍中。我们一共去了三天,其中路上消耗了一天,所以实际在京时间只有两天。而在这短短两天时间里,我们先后参观了中国软件与技术服务股份有限公司、文思创新软件技术有限公司以及中国科学院计算技术研究所三所单位。

回来以后结合这次的参观和我之前一些零碎的想法,整理以后决定写这篇文章,也算是对之前的一些感悟作个总结吧。另外要强调的是,下文并不一定适合其它行业的同学。 (更多…)

Written by Hesey in: 思考,技术 |

21
2010
3

Ubuntu系统的备份和还原

用Windows的时候习惯了ghost备份,但是ghost是不支持ext4分区格式的,所以只能寻找另外的备份方法,幸好Ubuntu本身就给我们提供了良好的备份和还原支持,分以下3步:
(1)备份已安装软件列表

sudo dpkg --get-selections  > app-backup-list.txt

将会在你的主目录下生成app-backup-list.txt文件,存储了所有当前系统安装的软件名,供恢复时使用。

(2)备份软件源

cp /etc/apt/sources.list ~

将会把你的软件源文件备份到主目录,若有其它的源文件,请自行备份。

(3)备份用户目录

sudo cp -r ~ [目标目录]

将递归把你的当前用户目录备份到目标目录
(更多…)

Written by Hesey in: Linux,技术 |

©2006 - 2011 Hesey (舒)