【大型网站技术架构笔记】(一)演化过程 开篇明义:【大型网站技术架构笔记】系列是阅读《大型网站技术架构核心原理与实践》一书的一些笔记,记录了原书的一些重要内容以及我的个人理解。其中很多内容网上都能找得到。其实整本书,我最赞同的是作者阐述的网站架构的价值观——“业务成就技术,而不是相反”。在没有业务场景的时候就一味追逐架构,为技术而技术,或者一上来就想要设计出一个可以适用所有场景的解决方案,是不理智的。我们有的时候可能会陷入技术的...
JVM学习笔记(一) 1、JDK和JRE的区别JDK是开发库,而JRE只是运行环境。JRE没有编译器,也没有JAVA API里面非JAVASE API的部分等。eclipse之所以用jre也能运行,是因为IDE内部集成了编译器。2、运行时数据区域(1)程序计数器(program counter register) 存储字节码指令的地址。如果是java方法,则记录对应的地址,如果是native方法,则为undef...
分布式锁的三种实现方式 一、zookeeper1、实现原理:基于zookeeper瞬时有序节点实现的分布式锁,其主要逻辑如下(该图来自于IBM网站)。大致思想即为:每个客户端对某个功能加锁时,在zookeeper上的与该功能对应的指定节点的目录下,生成一个唯一的瞬时有序节点。判断是否获取锁的方式很简单,只需要判断有序节点中序号最小的一个。当释放锁的时候,只需将这个瞬时节点删除即可。同时,其可以避免服务宕机导致的...
memcached限制以及与reids的比较 一、memcached限制在分布式企业级应用中,memcached被广泛使用。但是关于它自身的一些限制需要我们了解:1、过期时间memcached的缓存策略为:失效时间 + LRU(最近最少使用)。其过期时间设置上限阈值为30天,若超过30天后,将获取不到存储的数据。2、数据稳定性memcached需要保证集群的内存空间足够大,否则内存满了之后,会采用LRU置换算法,将部分数据清除,加上其...
单测中隔离每个case对DB数据操作 在公司项目中对单测框架做升级的时候,引入了h2数据库,同时希望每个case在访问h2做读写操作之后,不会影响下一个case对h2的数据访问。 1、最先想到的肯定是dbunit和unitils,但经过调研,发现和现有单测框架存在测试入口不一致、构造数据过程繁琐、xml导入的方式或者xsl的方式相比于SQL脚本来说更加麻烦等问题,所以就否了。 2、其次想到的是采用事务管理,spri...
rabbitmq学习笔记 前一阵子写SEDA异步框架的时候,使用了rabbitmq作为分布式消息队列(见前文),把一些学习官网教程的笔记简单备忘。示例都来自官网 Part 2 Work Queues 1、round-robin dispatchering 缺陷:存在不能准确负载均衡的弊端2、fair dispatch --> 针对管道采用channel.basicQos(pref...
格式化代码、风格检查、代码漏洞检查以及UT覆盖率检查 在敏捷开发中,随着文档地位不断被削弱,此时代码的可读性和质量往往成为直接决定项目是否健壮可维护的关键。这就要求我们的代码具有良好的风格(包括注释、命名等)、代码格式标准、程序没有非法调用和低级bug,以及用以对功能进行解释的单元测试能够尽可能多地覆盖核心功能。如果每次我们都手动去依次检查这些点是否达标,那持续集成将变得无比缓慢。更遑论持续交付了。 所以在持续集成(CI)的过程...
【SEDA异步框架】【四】异步框架总体设计与实现 基于SEDA的异步框架设计与实现四、异步框架总体设计与实现 1、框架中的stage理想结构 前文提到,基于SEDA的异步框架,一个stage的理想结构描述如下: 在这个框架的设想中,一个stage一般需要有如下几个组件: 1、D-MQ:分布式消息中间件。用做事件队列,以进行消息的传递。 2、Local-Qu...
【SEDA异步框架】【三】异步框架技术选型 基于SEDA的异步框架设计与实现三、异步框架技术选型 在这次实现的SEDA异步框架中,采用的基础架构原型如下: 采用了spring+quartz+fastjson+rabbitmq来实现。和传统SEDA架构区别比较大的地方在于: 1、采用分布式mq(使用了rabbitmq)而不是blockingqueue。如此既可以支持以后可能进行的分布...
【SEDA异步框架】【二】为什么使用SEDA 基于SEDA的异步框架设计与实现 二、为什么使用SEDA 目前,面对并发环境,主流互联网服务器编程模型有两种:多线程模型以及事件驱动模型。但是这两个模型都不足以解决这个问题。我们来首先看一下这两种编程模型。 1、多线程并发模型 多线程并发模型是目前最普遍的服务器编程模型,该模型的架构如下图所示: 该模型针对...
【SEDA异步框架】【一】SEDA国内外研究现状 基于SEDA的异步框架设计与实现 一、SEDA国内外研究现状1、SEDA架构的起源和特点 当前最流行的互联网服务器模型基本都是基于多线程/进程并发服务模型。然而当线程数目增加到一定值后,系统性能会下降,这就限制了系统支持高并发请求的能力。这种缺陷是多线程/进程本身的架构造成的。加州大学伯克利分校的Matt Welsh提出了一种新的服务器软件架构SEDA。SEDA是Sta...
在linux环境中安装rabbitmq出现的错误 安装了erl之后,在将rabbitmq搭建到linux服务器的时候,根据在windows搭建的经验,本以为可以几下搞定,结果启动不断地报错误(plugins启用了web管理界面),到google上找了一圈也没看到合理的解答,而其错误log为erlang的crash.dump文件,阅读起来太过困难。后来才开始将怀疑点集中在内核、erlang以及rabbitmq的版本问题上。在更换内核到新版本...
Spring依赖配置化管理 图省事在开发新系统的时候把老工程拿来改造,由于老工程有不少版本不一致的spring组件依赖,导致在加入新spring依赖的时候,各种jar包冲突,什么接口不能被初始化,什么找不到方法等等的。比如[code="java"]java.lang.NoSuchMethodError: org.springframework.context.support.AbstractRefreshable...
Quartz框架使用时候异常原因记录 在公司做的项目所搭建框架中需要使用定时器功能,但是对于Quartz需要配置的一大坨配置不感冒,采用配置则无法很好与框架耦合。于是参阅同事代码采取了非配置的写法。有几个需要注意的:1、Job不能为内部类,否则无法初始化2、保证spring升级到新版本。如果使用老版本比如3.0.5,则会出现如下异常:[code="java"]java.lang.IncompatibleClassC...
一致性哈希原理与实现 实现集群软负载均衡时候可以使用。实现感觉有点类似zookeeper关于共享锁和主从选择的算法。都是通过有序且唯一的节点来实现的。相关资料:一致性哈希原理1、http://blog.csdn.net/sparkliang/article/details/5279393一致性哈希的JAVA实现(hash采用了murmurhash算法)2、http://www.blogj...