- 浏览: 316294 次
- 性别:
- 来自: 北京
最新评论
-
叮咚可乐名:
Java并发编程和高并发解决方案视频课程网盘地址:https: ...
高吞吐高并发Java NIO服务的架构(NIO架构及应用之一) -
abc08010051:
RingBuffer不存在生产覆盖未消费的数据,或者消费已经消 ...
构建高性能服务(三)Java高性能缓冲设计 vs Disruptor vs LinkedBlockingQueue -
chenxuezhou_yzl:
完全没看懂诶
高吞吐高并发Java NIO服务的架构(NIO架构及应用之一) -
hn5092:
楼主 为什么是1.27F 求解释
构建高性能服务(一)ConcurrentSkipListMap和链表构建高性能Java Memcached -
zjilvufe:
有个疑问,请教下:扩容问题之一:如果不降低命中率?如果使用为垂 ...
Memcache架构新思考
文章列表
http://eprints.eemcs.utwente.nl/22286/01/imc140-drago.pdf
本文观点基于以上paper
相信不是所有同学都了解Dropbox,先做一个简单知识普及,Dropbox是一个提供同步本地文件的网络存储在线应用。支持在多台电脑多种操作中自动同步。并可当作大容量的网络硬盘使用。
在展开之前先回答一个问题,我们为什么要关系Dropbox?随着云计算框架越来越多的进入开发者和用户的事业,对文件、数据同步传输的要求也越来越多,越来越高。我们有必要对行业内比较流行的数据同步协议进行分析和借鉴。
由于Dropbox不是公 ...
2011年初Marc Kwiatkowski通过Memecache@Facebook介绍了Facebook的Memcache架构,现在重新审视这个架构,仍有很多方面在业界保持先进性。作为weibo内部数据处理量最大,对数据延迟最敏感的部门,基于本厂2年多来对mc的使用心得,我在本文总结对MC架构的一些新思考。
1. Memcache使用中的雷区
通常你可能考虑不到,但又隐藏在某处等着你踩的称之为“雷”。
带宽和连接数
Memcache具有很高吞吐能力,Memecache@Facebook中介绍Memcache支持8万/s读和2万/s写,在weibo内部我们通常认为单个 ...
移动互联网场景中随着人机交互方式的改变,用户数据也发生了比较大的改变。从以1k以下的文本为主数据,变为1k~10k的音频占很大比例的数据。响应的后端服务的队列、存储、缓存也需要做一系列针对性调整。这里就简单记录一下maoyidao对Memcached的压测情况。
1. 压测工具:mcperf
mcperf使用简单,输出报告清晰。最初是twitter为了证明其Twemcache在特定场景下(需要自动调节slab大小的场景下)比memcached强悍而开发的基准压测工具。比如在Random Eviciton vs Slab Automove(https://github.com/twitter/ ...
在上一篇中http://maoyidao.iteye.com/blog/1744309,主要介绍了和系统资源限制相关的参数。本文是通讯系统经验谈的第三部分,继续解读和系统性能相关的内核配置。
上篇介绍了和系统设置有关的几个参数,在一台系统上,连接到 ...
在本系列的第一篇(http://maoyidao.iteye.com/blog/1744277)中介绍了TCP状态以及服务器上常出现的TIME_WAIT和CLOSE_WAIT状态的成因、影响和解决方法。本篇主要解读在一台并发15万连接的HTTP服务上的系统配置
Linux系统资源限制
1. 最大文件数
查看进程允许打开的最大文件句柄数:ulimit -n
查看进程所占的文件描述符: lsof -p xxx | wc -l
设置进程能打开的最大文件句柄数:ulimit -n xxx
2. ulimit -n vs. file-max ?
简单的说, ulimit -n ...
面试时看到应聘者简历中写精通网络,TCP编程,我常问一个问题,TCP建立连接需要几次握手?95%以上的应聘者都能答对是3次。问TCP断开连接需要几次握手,70%的应聘者能答对是4次通讯。再问CLOSE_WAIT,TIME_WAIT是什么状态,怎么产生的,对服务有什么影响,如何消除?有一部分同学就回答不上来。不是我扣细节,而是在通讯为主的前端服务器上,必须有能力处理各种TCP状态。比如统计在本厂的一台前端机上高峰时间TCP连接的情况,统计命令:
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
...
不知道什么时候记得一些笔记,现在翻出来看看还是很有启发。也不想整理了,格式有点乱不过反映了当时的一些思考。
好的架构时演进出来的而不是从石头缝里蹦出来的,需要我们在工作中不断的思考、总结、实践。。。
1. 有关架构师的思考,从模块间的耦合关系上考虑
A,健康状况大致为多少线程、db每port写入量为多少,多少server,带宽占用,请求频率;
B,如果峰值情况怎样?
C,如前端cache丢失或当机怎样?
D,如系统在压力下出现异常问题,可先对整体构架进行分析,然后再考虑测试。
E, Keep it Simple and Stupid
一个构架师的经验主要在于经历 ...
Memcached(简称为:MC)在互联网广泛使用,是最基础的架构。但MC的mget(即一次获取多个值)一直是一个难题,我们的要求是mget性能上要尽量接近普通memcache get。下面通过一段伪代码介绍了如何以接近get single value的性能实现mget,并且就该架构在实际环境中遇到的一些问题加以讨论。
场景
在开始这个话题之前先考虑一个问题,为什么需要MC mget?Redis不是已经很好的实现了list,hashset,hashtable,zset等等丰富的数据结构吗?这个问题需要从本厂的应用场景开始。用户登陆之后会修改自己的状态,同时获得自己关注人的状态。修改自己 ...
一个仅仅部署在4台服务器上的服务,每秒向Database写入数据超过100万行数据,每分钟产生超过1G的数据。而每台服务器(8核12G)上CPU占用不到100%,load不超过5。这是怎么做到呢?下面将给你描述这个架构,它的核心是一个高效缓冲区设计,我们对它的要求是:
1,该缓存区要尽量简单
2,尽量避免生产者线程和消费者线程锁
3,尽量避免大量GC
缓冲 vs 性能瓶颈
提高硬盘写入IO的银弹无疑是批量顺序写,无论是在业界流行的分布式文件系统或数据,HBase,GFS和HDFS,还是以磁盘文件为持久化方式的消息队列Kafka都采用了在内存缓存数据然后再批量写入的策略。这一个策略的性能 ...
在本系列上篇http://maoyidao.iteye.com/blog/1636923 实现了基于google protobuf的序列化反序列化,现在看看怎么把他们组装到MINA的nio中。本篇主要描述怎么处理断包。
使用MINA的CumulativeProtocolDecoder是个好主意,先从MINA自己的sample开始。在这个例子中如果接受到的IoBuffer只包含一部分消息, decoders应该继续接收消息知道接收到完整的消息之后再进行解码。
List1
public class CrLfTerminatedCommandLineDecoder
...
最近团队在开发基于移动互联网的项目,又一次涉及到post service,即在服务器集群之间投递消息。是的,又是一个RPC服务。RPC实现方式从笨重的CORBA,SOAP over HTTP,XMPP over TCP,到轻量级的protobuf,scribe和Avro。这里不想比较各自的应用场景(另外后面三种RPC方式极为接近,都是通过提供Object <-> 二进制映射来提高高效的传输),本文的目的是给大家一点可以实际操作的代码:java如何用protobuf 实现rpc
和protobuf-socket-rpc的区别
protobuf-socket-rpc(code. ...
maoyidao注:上个月写了一遍博文,介绍一种高效的Java缓存实现,http://maoyidao.iteye.com/admin/blogs/1559420。其本质是模仿Memcached的Slab,通过分配连续定长的byte[]减少大规模使用Java Heap作为缓存时不可避免的GC问题。虽然当时构思和 ...
译者注:上个月写了一遍博文,介绍一种高效的Java缓存实现http://maoyidao.iteye.com/blog/1559420。其本质是模仿Memcached的Slab,通过分配连续定长的byte[]减少大规模使用Java Heap作为缓存时不可避免的GC问题。虽然当时构思和实现这一思 ...
构建高性能服务(二)java高并发锁的3种实现
- 博客分类:
- 技术 架构
提高系统并发吞吐能力是构建高性能服务的重点和难点。通常review代码时看到synchronized是我都会想一想,这个地方可不可以优化。使用synchronized使得并发的线程变成顺序执行,对系统并发吞吐能力有极大影响,我的博文 http://maoy ...
场景
缓存服务器是互联网后端服务中常用的基础设施。
场景(一)图片服务器上存储了大量图片,为了提高图片服务的吞吐量,希望把热门的图片加载到内存中。
场景(二)分布式存储服务,为提高访问吞吐,把大量的meta信息存储在内存中。
问题
但是使用Java语言开发缓存服务,不可避免的遇到GC问题。无论使用ehcache是基于Map实现的缓存,都会产生大量Minor GC无法回收的对象,最终导致CMS或Full GC,对系统吞吐造成影响。通过观察这类服务产生的GC日志,可以观察到频繁的CMS。这里简单介绍下CMS的过程即对系统的影响,CMS两阶段标记,减少stop the world的时间 ...