自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

Dropbox协议分析

 http://eprints.eemcs.utwente.nl/22286/01/imc140-drago.pdf本文观点基于以上paper 相信不是所有同学都了解Dropbox,先做一个简单知识普及,Dropbox是一个提供同步本地文件的网络存储在线应用。支持在多台电脑多种操作中自动同步。并可当作大容量的网络硬盘使用。 在展开之前先回答一个问题,我们为什么要关系Dro...

2013-04-12 00:15:16 539

Memcache架构新思考

 2011年初Marc Kwiatkowski通过Memecache@Facebook介绍了Facebook的Memcache架构,现在重新审视这个架构,仍有很多方面在业界保持先进性。作为weibo内部数据处理量最大,对数据延迟最敏感的部门,基于本厂2年多来对mc的使用心得,我在本文总结对MC架构的一些新思考。 1. Memcache使用中的雷区通常你可能考虑不到,但又隐藏在某处...

2013-04-11 23:28:04 194

Memcached for移动互联网:mcperf压测1k~10k数据笔记

移动互联网场景中随着人机交互方式的改变,用户数据也发生了比较大的改变。从以1k以下的文本为主数据,变为1k~10k的音频占很大比例的数据。响应的后端服务的队列、存储、缓存也需要做一系列针对性调整。这里就简单记录一下maoyidao对Memcached的压测情况。1. 压测工具:mcperfmcperf使用简单,输出报告清晰。最初是twitter为了证明其Twemcache在特定场景下(需要...

2012-12-31 18:56:28 514

通讯系统经验谈【三】解读内核参数 - sysctl.conf

在上一篇中http://maoyidao.iteye.com/blog/1744309,主要介绍了和系统资源限制相关的参数。本文是通讯系统经验谈的第三部分,继续解读和系统性能相关的内核配置。 上篇介绍了和系统设置有关的几个参数,在一台系统上,连接到一个服务时的本地端口是有限的。由于端口是16位整数,也就只能是0到65535,而0到1023是预留端口,所以能分配的只是1024到65534...

2012-12-10 23:34:54 195

原创 通讯系统经验谈【二】解读内核参数 - socket/文件句柄资源限制参数

在本系列的第一篇(http://maoyidao.iteye.com/blog/1744277)中介绍了TCP状态以及服务器上常出现的TIME_WAIT和CLOSE_WAIT状态的成因、影响和解决方法。本篇主要解读在一台并发15万连接的HTTP服务上的系统配置 Linux系统资源限制1. 最大文件数查看进程允许打开的最大文件句柄数:ulimit -n查看进程所占的文件描述符: ...

2012-12-10 13:41:55 233

原创 通讯系统经验谈【一】TCP连接状态分析:SYNC_RECV,CLOSE_WAIT,TIME_WAIT

面试时看到应聘者简历中写精通网络,TCP编程,我常问一个问题,TCP建立连接需要几次握手?95%以上的应聘者都能答对是3次。问TCP断开连接需要几次握手,70%的应聘者能答对是4次通讯。再问CLOSE_WAIT,TIME_WAIT是什么状态,怎么产生的,对服务有什么影响,如何消除?有一部分同学就回答不上来。不是我扣细节,而是在通讯为主的前端服务器上,必须有能力处理各种TCP状态。比如统计在本厂的一...

2012-12-08 23:58:50 471

架构师笔记【杂】cache/容量及带宽规划/sysctl.conf配置等

 不知道什么时候记得一些笔记,现在翻出来看看还是很有启发。也不想整理了,格式有点乱不过反映了当时的一些思考。好的架构时演进出来的而不是从石头缝里蹦出来的,需要我们在工作中不断的思考、总结、实践。。。 1. 有关架构师的思考,从模块间的耦合关系上考虑A,健康状况大致为多少线程、db每port写入量为多少,多少server,带宽占用,请求频率;B,如果峰值情况怎样?C,如前...

2012-12-05 13:31:58 207

通过NIO实现Memcached multi get

Memcached(简称为:MC)在互联网广泛使用,是最基础的架构。但MC的mget(即一次获取多个值)一直是一个难题,我们的要求是mget性能上要尽量接近普通memcache get。下面通过一段伪代码介绍了如何以接近get single value的性能实现mget,并且就该架构在实际环境中遇到的一些问题加以讨论。场景在开始这个话题之前先考虑一个问题,为什么需要MC mget?R...

2012-11-30 23:58:48 123

原创 构建高性能服务(三)Java高性能缓冲设计 vs Disruptor vs LinkedBlockingQueue

一个仅仅部署在4台服务器上的服务,每秒向Database写入数据超过100万行数据,每分钟产生超过1G的数据。而每台服务器(8核12G)上CPU占用不到100%,load不超过5。这是怎么做到呢?下面将给你描述这个架构,它的核心是一个高效缓冲区设计,我们对它的要求是:1,该缓存区要尽量简单2,尽量避免生产者线程和消费者线程锁3,尽量避免大量GC缓冲 vs 性能瓶颈提高硬盘写入I...

2012-08-26 15:52:04 774

原创 高性能RPC over MINA&google protobuf 代码&实例 (二)

在本系列上篇http://maoyidao.iteye.com/blog/1636923 实现了基于google protobuf的序列化反序列化,现在看看怎么把他们组装到MINA的nio中。本篇主要描述怎么处理断包。 使用MINA的CumulativeProtocolDecoder是个好主意,先从MINA自己的sample开始。在这个例子中如果接受到的IoBuffer只包含一部分消息, ...

2012-08-19 18:32:17 137

原创 高性能RPC over MINA&google protobuf 代码&实例 (一)

最近团队在开发基于移动互联网的项目,又一次涉及到post service,即在服务器集群之间投递消息。是的,又是一个RPC服务。RPC实现方式从笨重的CORBA,SOAP over HTTP,XMPP over TCP,到轻量级的protobuf,scribe和Avro。这里不想比较各自的应用场景(另外后面三种RPC方式极为接近,都是通过提供Object <-> 二进制映射来提高高效的...

2012-08-19 01:41:52 121

在HBase中应用MemStore-Local Allocation Buffers解决Full GC问题:第二部分

 maoyidao注:上个月写了一遍博文,介绍一种高效的Java缓存实现,http://maoyidao.iteye.com/admin/blogs/1559420。其本质是模仿Memcached的Slab,通过分配连续定长的byte[]减少大规模使用Java Heap作为缓存时不可避免的GC问题。虽然当时构思和实现这一思路时并没有参照其他开源产品,但这一思路在很多著名的开源产品上也有类似...

2012-07-09 22:06:58 126

在HBase中应用MemStore-Local Allocation Buffers解决Full GC问题:第一部分

 译者注:上个月写了一遍博文,介绍一种高效的Java缓存实现http://maoyidao.iteye.com/blog/1559420。其本质是模仿Memcached的Slab,通过分配连续定长的byte[]减少大规模使用Java Heap作为缓存时不可避免的GC问题。虽然当时构思和实现这一思路时并没有参照其他开源产品,但这一思路在很多著名的开源产品上也有类似的实现。随着内存使用成本越来越低...

2012-07-03 08:15:31 229

构建高性能服务(二)java高并发锁的3种实现

提高系统并发吞吐能力是构建高性能服务的重点和难点。通常review代码时看到synchronized是我都会想一想,这个地方可不可以优化。使用synchronized使得并发的线程变成顺序执行,对系统并发吞吐能力有极大影响,我的博文 http://maoyidao.iteye.com/blog/1149015 介绍了可以从理论上估算系统并发处理能力的方法。 那么对于必须使用synchron...

2012-06-18 22:27:58 1898

原创 构建高性能服务(一)ConcurrentSkipListMap和链表构建高性能Java Memcached

 场景缓存服务器是互联网后端服务中常用的基础设施。场景(一)图片服务器上存储了大量图片,为了提高图片服务的吞吐量,希望把热门的图片加载到内存中。场景(二)分布式存储服务,为提高访问吞吐,把大量的meta信息存储在内存中。问题但是使用Java语言开发缓存服务,不可避免的遇到GC问题。无论使用ehcache是基于Map实现的缓存,都会产生大量Minor GC无法回收的对象,最终...

2012-06-12 22:01:04 189

原创 移动互联网跨终端推送架构设想

1 为什么需要全平台推送?设想你有一个很棒的应用。以电商为例,用户搜索了一些产品,后来又放入了购物车。你的服务器记录了用户的这些行为,发现他可能会对某类商品感兴趣。而这类商品又刚刚新添加了一些特别炫的新货,不需要用户再次查询,应用会立刻通知给用户:“嘿,瞧瞧这新东西,也许你会喜欢!”。从技术角度怎么实现呢?显然我们需要一个push服务。相对Pull的方式,Push不仅仅能更实时的提供信息,更省...

2012-06-11 00:42:20 159

柔性可用和PaaS名词解释

某厨师出身的美食家说:“苏帮菜”的命根就是甜。这就是美食家和厨子的差别。哪个“苏帮菜”厨子不知道做“苏帮菜”要放糖呢?但是如果上升到上面这句话的高度,就可以是美食家了。 从码农上升到架构或者是技术主管以致部门主管也是一样,你会越来越多的和产品,和老板,和非技术的人打交道。怎么样把技术术语解释的大家都听得懂,怎么样把技术方案的优势和收益用非技术的方式表述出来,是非常重要的能力。 这就...

2012-06-06 15:16:28 401

原创 大型网站架构实现伸缩性的最佳实践

前言为防止成为标题党,首先定义一下什么是大型网站,(1)业务依赖多,一个业务流程,需要调用多种资源,Memcached/DB/其他模块等等;(2)业务快速增长且不平均,比如电商网站中某一类产品增长特别明显;(3)并发访问量高,数据量大,请求响应时间要求严格;(4)业务要求7*24小时高可用性;(5)业务模块多,研发团队多,业务部门多; 以上条件满足一部分就可以称为大...

2012-05-26 21:56:28 148

排查Java线上服务故障的方法和实例分析

 前言作为在线系统负责人或者是一个技术专家,你可能刚刚接手一个项目就需要处理紧急故障,或者被要求帮忙处理一些紧急的故障,这个时候的情景是:(1)你可能对这个业务仅仅是听说过,而不怎么真正了解;(2)你可能没有这个故障的详细信息,比如可能仅仅是有使用方反馈服务中断了10分钟;(3)你对代码细节还没有仔细研究过。 这个时候该怎么解决问题呢?根据以前的经验,工程师们常常倾向于直接登上服务...

2012-04-08 22:20:57 173

原创 使用Scribe重新构建log4j实现分布式日志中心

在浏览了诸多中文Scribe+log4j的博客之后,我发现,大家都是很不要face的抄人家的文,却没有一点要引用原文的意思。估计是抄来抄去,抄的多了都想不起来是谁抄谁的了。 原作应该是 Alex Loddengaard 的大作,写的很清楚,而且还有代码。这里不需要画蛇添足,大家欣赏吧。Configuring and Using Scribe for Hadoop Log Collect...

2012-03-19 22:30:58 207

Jetty Continuation实现原理和使用场景分析

Jetty Continuation实现原理和使用场景分析Jetty continuation是什么?简单的说,就是用一个NIO模拟http同步连接。我们都知道http请求时同步的,就是说http request发送到server之后,server分配一个单独的线程处理这个请求,请求完成之后再返回response给请求端。这个过程中server处理线程一般是不释放,即使是什么都没有干。更关键的...

2012-03-18 14:13:16 191

分库分表策略的可实现架构

 分库分表是解决mysql水平扩展的主要手段。网上有关策略的讨论很多,主要是hash扩展、按时间扩展、按范围扩展等等。但真正想实施分库分表的朋友们往往觉得“策略听来终觉浅,觉知此事要代码”,因此本文的主要目的是给朋友们提供一个可实现架构。JDBCTemplate和Hibernate大家都知道Hibernate是ORM(对象-关系数据库 mapping)意义上的第一个真正的“统治级”产品...

2012-03-18 11:14:36 170

Java Cache 的HashMap实现, 适用场景及分布式ehcache实例

 cache是老生常谈的事情,这里我想强调一下KISS原则,就是keep it simple and stupid。最近看到很多场景下cache使用的不适当,特别是被过度使用了。一个简单键值存储并不需要复杂的cache方案,好的方案就是用最简单的方法解决问题。简洁是美! 一个标准Cache的主要特征是:过期时间       容量规划(重要)清除策略(重要)命中率统计 ...

2012-02-13 21:36:42 356

原创 gearman实现分布式日志分析

分布式服务部署在多台机器上,统一查看日志是个很重要的需求。对日志量很大的应用,为不影响生产系统,可以通过thrift、protobuf等方式收集到日志中心,再使用hadoop+lucence进行分析。实时日志分析也可以用这个系统。最近团队在预言这个方案,以后有机会再和大家分享。而基于gearman的分布式日志查询系统,知识资源投入小,效果却很强大,可以有效处理在线debug的问题,把工程师从海量日...

2012-02-11 22:19:46 143

服务扩容的一点总结

最近一年经历了很多业务快速增长的情况,早期对容量的规划不足成为普遍现象,需要在实际业务中要不断调整。这就涉及到服务扩容。一般无状态请求的扩容,比如varnish转发http请求,因为不需要考虑状态迁移造成的问题,比较简单。复杂一点的就是有状态的扩容。有状态扩容主要的应用场景是服务器负载均衡技术以及数据库水平扩容。无论是服务器负载均衡还是数据库水平扩容,主要考虑的问题都是:1,怎么分配请求;2,怎么...

2011-12-27 21:07:38 714

Twitter Kestrel如何使用Netty以及Netty scala压测代码

Twitter的核心队列Kestrel使用Netty作为通信模块,从另一个角度证明了Netty的性能和健壮。Netty是否比MINA强?从底层实现,两者几乎差不多,但Netty的优势是从架构上采用事件通知机制,真正的将异步模式引入来解决各种场景。响应时间可能会加长,但优势在于系统之间的依赖减弱,自身处理能力的决定因素自封闭(瓶颈可以直接根据自身业务处理资源消耗情况估计出来) 我们看看T...

2011-12-27 20:43:44 214

protobuf厂内通讯模块的设计的思考

一直以来比较关心高性能通讯模块的设计,最近看到两篇好文,由此想到曾经参与的几个通讯模块的设计和实现,跟大家分享思路。 首先来分享好文:http://agapple.iteye.com/blog/859052这一篇讲得是google protobuf协议和其他序列化的性能测试。朋友们看了一定会砰然心动,protobuf如此之高的通讯效率当然是求之不得。新浪微博IM各模块之间也采用...

2011-11-06 23:18:55 121

MINA及其在高性能通讯应用中的突出问题(NIO架构及应用之二)

前面写过一个博文高:高吞吐高并发Java NIO服务的架构,http://maoyidao.iteye.com/admin/blogs/1149015。这个架构是和MINA一致的,或者可以说MINA是基于同样的思路构架的。想阅读MINA源代码的朋友可用参考这个架构来研究MINAsource code。但是考虑到在已经有比较可靠的开源实现的情况下,现在朋友们很少会自己去实现一个NIO模块。就想到...

2011-11-06 22:49:32 255

原创 数据库使用经验谈之3点:架构,NULL值,索引与查询

小型项目对于数据库的使用往往比较随意,过多的考虑分库分表等策略对于相当多数没有海量数据需要存储到db的应用又显得浪费。那么如何避免,特别是当数据库压力比较小的开发初期,db架构方面的问题,我想遵循几个简单的原则就可以。从应用架构的角度,项目中最常见的问题有三种:如何使用数据库,NULL值,索引与查询。一,如何使用数据库1,围绕数据库的使用方式也决定架构如何。正如“MySQL数据库开发的...

2011-10-23 14:42:29 92

高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)

Java NIO成功的应用在了各种分布式、即时通信和中间件Java系统中。证明了基于NIO构建的通信基础,是一种高效,且扩展性很强的通信架构。基于Reactor模式的高可扩展性架构这个架构的基本思路在“基于高可用性NIO服务器架构”(http://today.java.net/pub/a/today/2007/02/13/architecture-of-highly-scalable-nio-se...

2011-08-14 18:12:55 709

有关一致性哈希算法的应用场景

Tim Yang去年在博客(http://timyang.net)讨论一个有状态服务的场景下如何使用一致性哈希算法的问题。其中主要涉及到增加或删除节点时引起的系统震荡。其中也讨论了是否使用随机选取节点,并使用memcached保持选择的方案。我们知道一致性哈希算法可以很好的解决增加或删除节点时引起的系统震荡问题。采用虚拟节点后,平均的将增删节点产生的震荡分配到其他节点上。测试证实了一致性哈...

2011-08-13 08:49:50 273

有关Mysql master/slave replication的应用

Mysql master/slave replication这个架构非常成熟。我们已经基于它做了3、4年开发了。既可以支持高可用性双机备份系统的建立,也可以支持通过读写分离提高数据库写入和读出性能。有文章说在主服务器上更新二进制日志的额外开销对性能有1%的影响,具体数字怎么得出来的没有考证。但我们系统的压力测试分别在单一Master和Master-Slave两种情况下运行,没有看到明显性能差异。...

2011-08-12 22:09:21 286

构建高性能高并发Java系统

1,使用异步通信异步通信显然可以更快的返回响应。从实际经验看,对高吞吐服务器更大的好处是,系统中的某一服务出现问题后往往出现雪崩似的服务宕机。这很多都是由于采用同步通信,需要等待其他服务同步通信结束后,其占用资源才能得到释放。而这些资源往往是socket连接、线程、数据库连接等比较重的资源。因此请慎重使用同步通信。如果你真的需要他,可以用个mock同步。正如Tim Yang所说:很多远程服务调...

2011-08-09 23:28:15 251

原创 ZooKeeper leader election 分析和实现

Paxos是分布式应用中解决同步问题的核心。作为应用研发工程师,我们总是倾向于使用一种相对简洁的方式实现复杂的算法。ZooKeeper leader election实现就是一个非常好的参考。其实现比标准Paxos算法简单,基本过程是:1                                                                           ...

2011-07-08 10:44:30 203

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除