`
langyu
  • 浏览: 884444 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论
文章列表
简单场景:         多线程环境,每个线程携带惟一的key去组装数据,相同的key会有相同的数据结果。为了提高响应速度,在线程访问的入口处设置缓存。线程根据key先从缓存中取数据,如果缓存中没有,线程就去做具体的逻辑处理。         模型如下图:假定每个线程的key如A, B等,同时有多个携带同一key的线程进来。         最基本的处理方式如此: private static Map<String, Object> cache = new ConcurrentHashMap<String, Ob ...
        这段时间在Code Review之余负责一个处理大数据量程序的正常运行。本应该是国庆之前完成的事,但因对程序处理能力的认识不足就拖到了现在。程序由单线程改造为并发,并因此修改当初的设计,后来针对出现的问题做持续的处理及优化。下面列出在完成这个任务时所想到的及问题总结 1. 由使用并发看到的         在处理大数据量任务时,可以做到的要么提高执行效率,要么并发执行。如果在单线程效率达到瓶颈时,不得不引入并发,并面对随之而来的问题。在我的程序中,多线程删除某个目录下的所有文件,或是多线程往同一文件中写数据,都得考虑同步时的争锁问题。 线程数量有阈值,并不是越多越好。因应 ...
        运行在Linux系统上的Java程序可能会出现"Too many open files"的异常情况,且常见于高并发访问文件系统,多线程网络连接等场景。         程序经常访问的文件、socket在Linux中都是文件file,系统需要记录每个当前访问file的name、location、access authority等相关信息,这样的一个实体被称为file entry。“open files table”(图中橙色标识)存储这些file entry,以数组的形式线性管理。文件描述符(file descriptor)作为进程到open files t ...
        当前各种应用大量使用异步消息模型,并随之产生众多消息中间件产品及协议,标准的不一致使应用与中间件之间的耦合限制产品的选择,并增加维护成本。AMQP是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。         当然这种降低耦合的机制是基于与上层产品,语言无关的协议。AMQP协议是一种二进制协议,提供客户端应用与消息中间件之间异步、安全、高效地交互。从整体来看,AMQP协议可划分为三层:                                       这种分层架构类似于 ...
        在XML规范中,不支持ASCII前31个字符中的相当多控制符号,所以在组装XML时需过滤这些特殊字符,以免引起解析问题。对于这些特殊字符,常见的异常如: 引用Character reference "&#12" is an invalid XML character. 这里的"&#12表示是ASCII码的第几个控制字符         同时,'&'(实体引用的开始)和'<'(控制符的开始)作为XML的标准控制字符必须不能出现在正常内容中,如果出现的话,需要转义。XML提供CDATA结构段用来指示XML解析器不要对CD ...
        当年还在学校时,有段时间校园内到处张贴着李开复的演讲通告,题目是《选择的艺术》。我还算比较纠结了,选择就选择,有什么艺术性可言。正所谓站的高度不一样,看待问题的角度也就不一样。当某天对生活有所感悟时,回头想想光这个演讲的题目就是至理之道呀。网上流传着一句话,人生好似一道永远做不完的选择题,每时每刻都在上演。每天敲代码的我们当然逃脱不了选择的命运。          尽管至今都不清楚李的演讲内容,但我猜测关于选择他也可能会提到两点:分析和权衡。在系统开发中基本没有单选题,我们能做的就是分析需求,不断权衡来选择最合适的技术,最合适的人,最合适的实现。分析是基础,基于分析的权衡之策 ...
        在系统或设备交互时,因处理效率不一致,经常会导致等待的发生。最初这种矛盾在计算机内部尤为突出。高速CPU与低速外部设备之间数据处理的频率差异,使CPU在绝大部分的时间周期内不做任何事情。计算机专家不 ...
        简单表述,就是用通俗直白的表达来正确说明问题。说起这个话题,首先我会感觉心虚,以前为了装X,故意以专业术语加模糊的定义来描述问题,看到别人似懂非懂的神情,我既兴奋又惶恐,感觉一定要把他绕在里面才算专业。但换作别人讲个问题把我绕晕,我就满不在乎,认为别人应该也没弄明白是怎么回事,因为我总觉着每个问题都应该有个简单道理。这种人性的弱点也让我走了不少弯路,幸好及时悔改,不至于遗失太多。         两年多来我所苛求的简单似乎总没有实现过。系统是越设计越复杂,逻辑越改越多,有时候非得整个系统重构才能看起来舒服些。痛定思痛,为了追求理论的朴实,我开始总结日常所遇到的很多系统、架构、产 ...
      在Google搜索封装,给出信息隐藏这样的一个概念。把复杂度隐藏于实体内部,对外提供简单,精练的访问接口。这个原则普遍存在于现实生活中,在软件开发领域也始终提倡着。Java向来倡导程序封装,面向接口编程,以 ...
       二八原则源自经济学理论,表述为:通常一个企业80%的利润来自于20%的项目。由此推广出对日常生活的很多描述,如20%的人投资明天,80%的人消费于今天;20%人的正面思考,80%的人负面思考等。20%和80%只是一个概数,表示少数与绝大多数的对比,它的主要思想是不要平均、对等地看待和处理问题,而是认真分析并找到问题的关键点,集中精力于这些关键点上,获得事半功倍的效果。        二八原则也适用于软件领域,通常的表述:计算机在80%的时间执行20%的常用代码或是系统在80%的时间使用着20%的常用数据。只是简单描述不会产生感性认识,下面来看几个例子。        计算机体 ...
     Avro(读音类似于[ævrə])是Hadoop的一个子项目,由Hadoop的创始人Doug Cutting(也是Lucene,Nutch等项目的创始人,膜拜)牵头开发,当前最新版本1.3.3。Avro是一个数据序列化系统,设计用于支持大批量数据交换的应用。它的主要特点有:支持二进制序列化方式,可以便捷,快速地处理大量数据;动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据。      当前市场上有很多类似的序列化系统,如Google的Protocol Buffers, Facebook的Thrift。这些系统反响良好,完全可以满足普通应用的需求。针对重复开发的疑 ...
译注:项目中用到Jetty6的Continuation机制,翻译一篇专业文章用于学习此机制 http://docs.codehaus.org/display/JETTY/Continuations 背景资料    对于当前的很多网络应用,并行访问的用户数会远远超过服务器上的连接数。这是由于在用户与服 ...

疏忽的杯具

   项目出现问题,小概率情况下不能处理数据。分析日志及代码,确定是某块负责load balance的代码有问题。多个server会接收相同数据,在避免数据重复处理及server负载均衡的情况下,在server的逻辑入口做判断,抛弃本server不能 ...
一致性哈希算法(Consistent Hashing Algorithm)是一种分布式算法,常用于负载均衡。Memcached client也选择这种算法,解决将key-value均匀分配到众多Memcached server上的问题。它可以取代传统的取模操作,解决了取模操作无法应对增删Memcached Server的问题(增删server会导致同一个key,在get操作时分配不到数据真正存储的server,命中率会急剧下降),详细的介绍在这篇帖子中http://www.iteye.com/topic/611976(后文指代这篇文章的地方均称为引文)。 [下面以Memcached的分布式问题 ...
什么是CAS协议 Memcached于1.2.4版本新增CAS(Check and Set)协议类同于Java并发的CAS(Compare and Swap)原子操作,处理同一item被多个线程更改过程的并发问题。 在Memcached中,每个key关联有一个64-bit长度的long型惟一数值,表示该key对应value的版本号。这个数值由Memcached server产生,从1开始,且同一Memcached server不会重复。在两种情况下这个版本数值会加1:1、新增一个key-value对;2、对某已有key对应的value值更新成功。删除item版本值不会减小。 例如 Memc ...
Global site tag (gtag.js) - Google Analytics