19
2011
2

Yahoo! S4:分布式流计算平台

一、概述

S4(Simple Scalable Streaming System)最初是Yahoo!为提高搜索广告有效点击率的问题而开发的一个平台,通过统计分析用户对广告的点击率,排除相关度低的广告,提升点击率。目前该项目刚启动不久,所以也可以理解为是他们提出的一个分布式流计算(Distributed Stream Computing)的模型。 (更多…)

Written by Hesey in: 分布式,技术 |

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,技术 |

©2006 - 2011 Hesey (舒)