自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式系统设计的求生之路

WeTest导读分布式系统理念渐渐成为了后台架构技术的重要选择,本文介绍了作者在手游领域对分布式系统进行的种种尝试,并在尝试中制定了对服务的定义、整体框架的构建以及服务内部拆分的流程。前言业务规模不断扩大,对稳定性、扩展性的要求不断提高,推动了后台架构技术的不断革新。面对日益复杂的需求,分布式系统的理念也逐渐深入到后台开发者的骨髓。2013年,借着手游热潮我对分布式系统开始尝试。在近三年...

2016-06-28 14:36:06 287

原创 dubbo三种协议性能对比

  显然,thrift原生协议性能表现卓越,是dubbo原生性能的6倍。 

2016-06-12 16:34:58 1270

原创 对dubbo进行重构,支持thrift原生协议直接调用

整体思路:不入侵,不改变dubbo原来的任何特性,新增对thrift原生协议支持,原生协议的调用,同样可以进行原来的监控统计。唯一丢失的特性,就是没有了软路由。因为原生协议不是使用dubbo客户端调用。 网上有一种改造的方法,对整条调用链都改了,包括:protocol,exchange,transport,request,response都改了,使用thrift原生server解释...

2016-06-07 10:50:10 462

原创 dubbo dubbo-thrift thrift三种协议直观对比

最近在研究学习dubbo源码,下面对比一下dubbo dubbo-thrift thrift三种协议序列化后报文体积:远程调用一个简单方法:Hello.hello("哈哈哈"); dubbo:{ -38, -69, -62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -48, 5, 50, 46, 48, 46, 48, 48, 33, 99...

2016-06-02 19:22:32 776

原创 spring中bean的生命周期

1. 容器寻找Bean的定义信息并将其实例化2. 使用依赖注入,spring按照Bean定义信息配置Bean的所有属性3. 如果Bean实现了BeanNameAware接口,工厂调用Bean的SetBeanName()方法传递Bean的ID4. 如果Bean实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身5. 如果BeanPostProcesso...

2016-05-20 15:57:20 145

原创 Facebook是如何开发软件的

Facebook的工作方式让我着迷。那是一个非常独特的工作氛围,无法复制(也并不适用于其它公司)。下面的是我从很多在Facebook工作的朋友那里搜集到的关于这个公司如何开发和发布软件的只言片语。 看起来对Facebook感兴趣的大有人在。这个公司以程序员为主导的企业文化受到人们的极大关注,很多公司都在努力现实这样的企业文化。尽管 Facebook对于其内部的开发过程讳莫如深,但他们的技术团队还...

2016-05-19 10:57:37 153

原创 linux命令TOP参数load average详解

我们知道判断一个系统的负载可以使用top,uptime等命令去查看,它分别记录了一分钟、五分钟、以及十五分钟的系统平均负载…… 我们知道判断一个系统的负载可以使用top,uptime等命令去查看,它分别记录了一分钟、五分钟、以及十五分钟的系统平均负载。 你可能对于 Linux 的负载均值(load averages)已有了充分的了解。负载均值在 uptime 或者 top 命令中可以看到,它们可...

2016-05-04 11:14:47 7732

原创 使用Spring Cloud和Docker构建微

这是系列博文中的第一篇,本文作者使用Spring Cloud和docker构建微服务平台,文章的例子浅显易懂,希望了解微平台构建的同学能够从这里会收获良多. 这篇系列博文主要向大家介绍如何使用Spring Cloud和Docker构建微服务平台。 什么是Spring Cloud?Spring Cloud 是一个 pivotal提供的用于进行分布式系统构建时提供一些常用的解决方案的工具集...

2016-03-28 18:59:11 168

原创 [转]性能分析之-- JAVA Thread Dump 分析综述

最近在做性能测试,需要对线程堆栈进行分析,在网上收集了一些资料,学习完后,将相关知识整理在一起,输出文章如下。 一、Thread Dump介绍1.1什么是Thread Dump?Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump...

2016-02-04 23:14:19 176

原创 Java 开发必会的 Linux 命令

查看一个程序是否运行ps –ef|grep tomcat 查看所有有关tomcat的进程 查看文件头10行head -n 10 example.txt 查看文件尾10行tail -n 10 example.txt 查看日志类型文件tail -f exmaple.log //这个命令会自动显示新增内容,屏幕只显示10行内容的(可设置)。  查看端...

2016-01-05 17:58:22 62

原创 (转)java自带线程池和队列详细讲解

一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的。在jdk1.5之后这一情况有了很大的改观。Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用。为我们在开发中处理线程的问题提供了非常大的帮助。 二:线程池 线程池的作用: 线程池作用...

2015-09-18 10:10:59 70

原创 (转)java 线程的几种状态

java thread的运行周期中, 有几种状态, 在 java.lang.Thread.State 中有详细定义和说明:NEW 状态是指线程刚创建, 尚未启动RUNNABLE 状态是线程正在正常运行中, 当然可能会有某种耗时计算/IO等待的操作/CPU时间片切换等, 这个状态下发生的等待一般是其他系统资源, 而不是锁, Sleep等BLOCKED  这个状态下, 是在多个线程有同...

2015-09-18 00:11:22 76

原创 [转]MySql 之表设计原则

看到一篇不错的文章,很认同这些观点,分享一下。1) 不应该针对整个系统进行数据库设计,而应该根据系统架构中的组件划分,针对每个组件所处理的业务进行组件单元的数据库设计;不同组件间所对应的数据库表之 间的关联应尽可能减少,如果不同组件间的表需要外键关联也尽量不要创建外键关联,而只是记录关联表的一个主键,确保组件对应的表之间的独立性,为系统或表 结构的重构提供可能性。2)采用领域模型驱动的方式和...

2015-08-22 23:06:45 73

原创 帮Facebook把用户做到7亿 他只做了三件事

Chamath Palihapitiya出身于斯里兰卡,六岁时随家人移居加拿大。1999年获得了滑铁卢大学电气工程学位,之后他进入投资银行BMO Nesbitt Burns做了一年衍生品交易员。2000年,他跟随他的女朋友移居加利福尼亚。当 时正值互联网开始繁荣,Palihapitiya以软件工程师的身份加入美国在线(AOL),并于2004晋升为美国在线的即时通讯部主管。2005年, 他又从...

2015-08-03 14:20:26 186

原创 图解事务传播级别

Required:必须有逻辑事务,否则新建一个事务,使用PROPAGATION_REQUIRED指定,表示如果当前存在一个逻辑事务,则加入该逻辑事务,否则将新建一个逻辑事务,如图9-2和9-3所示; 图9-2 Required传播行为     RequiresNew:创建新的逻辑事务,使用PROPAGATION_REQUIRES_NEW指定,表示每次都创建新的逻...

2015-07-27 15:39:18 121

原创 [转]事务传播级别隔离级别以及高并发下的应用经验

事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题。事务最重要的两个特性,是事务的传播级别和数据隔离级别。传播级别定义的是事务的控制范围,事务隔离级别定义的是事务在数据库读写方面的控制范围。以下是事务的7种传播级别:1) PROPAGATION_REQUIRED ,默认的spring事务传播级别,使用该级别的特点是,如果上下文中已经存在事务,那么...

2015-07-23 15:27:43 95

原创 什么是GC Roots

GC Root 常说的GC(Garbage Collector) roots,特指的是垃圾收集器(Garbage Collector)的对象,GC会收集那些不是GC roots且没有被GC roots引用的对象。一个对象可以属于多个root,GC root有几下种:Class - 由系统类加载器(system class loader)加载的对象,这些类是不能够...

2015-06-29 18:29:11 2862

ubuntu-14.04.1+hadoop2.4完全分布式搭建要点

最近帮公司搭建hadoop集群,现在总结一下相关要点:1、没有搭建过hadoop的,建议先搭建一个伪集群体验一下2、建议最少集群机器配置:5台。 1台NameNode  1台 ResourceManager 3台DataNode3、完全分布集群搭建的重点、难点就是无密SSH登录,很多人会卡在这里。重点:<1> 各个服务器创建同一个账号,同一个用户组<2> ssh-key...

2015-05-14 09:58:28 101

Hive JDBC运行连接注意事项

通过jdbc方式连接hive,能让你非常方便、简单地去使用hadoop挖掘数据,门槛大大降低。其实连接方式很简单,但是第一次使用,总会有些莫名奇妙的错误,下面给出一些注意事项,希望对初学者有帮助。首先我的环境:hadoop2.4.0+hive0.14.0。 所需jar包:     <classpathentry kind="lib" path="lib/commons-...

2015-04-02 15:28:22 407

spring3+mybatis3注解事务不起作用解决方案

=== 2015-04-09 最新补充=======最近在调试另一个开发框架,发现又出现事务不起作用的情况。后来经过测试,发现需要先调整好配置文件,如下:spring配置文件:    <context:component-scan base-package="net.aaa.bbb" >          <context:exclude-filter type=...

2015-03-27 17:27:40 164

原创 【原创】分布式自增id的一次实践测试

自增id一般情况下有两种方案,一个是使用数据库自增功能,另外一种就是oracle这样的sequance机制。个人觉得,无论你的系统是否考虑日后分布式扩展,建议统一采用sequance方式获取。这样对系统日后可能产生的数据库移植也是很好的支持。 比如说系统需要获得一个表的 新id,可以这样统一封装一个方法:seuHelper.getTableSeq(tableName);  ...

2015-03-04 10:57:57 207

原创 《社交网络》中Facemash算法分析

在电影《社交网络》的开始有这么一段,扎克博格由于被女友甩了,所以需要做一个网站(www.facemash.com),用来推选哈佛最漂亮的女 生。网站的逻辑非常的简单,就是系统从照片库中随机挑出两幅女生照片,选择两者较“美”者。就是这么一个网站在上线两小时(周末凌晨两点到四点)内点击量 达到了2万2千次,从而导致了哈佛网络的瘫痪。(备注:最近华中科技大学女生的照片也被类似的放到了网上评比,并且使...

2015-03-02 15:33:53 3130

原创 微信一亿用户背后的架构秘密

敏捷是一种态度,敏捷就是试错 微 信研发团队里鼓励一种试错的信仰:他们坚信,在互联网开发里,如果能够有一个团队在更短的时间内尝试了更多机会(并能改进过来),就能有(更多的)机会胜 出。敏捷是一种态度,在软件开发过程中,项目管理者都会非常忌讳“变更”这个词,但是在微信的项目运作中是不可以的。因为微信必须要容忍说哪怕在发布前的 十分钟,也要允许他变更。这是非常大的挑战,因为打破了所有传统项...

2015-03-02 14:32:06 208

原创 什么是TCP keepalive

keep tcp alive,从字面上看,它能够检测你的 TCP socket  并检测连接是否在运行或者是否已经被破坏。keepalive概念很简单:当建立一个TCP连接时,你将一系列的定时器与该连接相关联。这些定时器中某些用于处理keepalive过程。当keepalive定时器变为0时,你给你的同伴(也就是对方)发送一个keepalive 探针包(probe packet),包内没有数...

2015-02-17 11:51:12 726

原创 长连接与短连接

长连接:client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收。这种方式下由于通讯连接一直存在。此种方式常用于P2P通信。短连接:Client方与server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此方式常用于一点对多点通讯。C/S通信。长连接与短连接的操作过程短连接的操作步骤是:建立连接——数据传输——关闭连接...建...

2015-02-17 11:19:18 69

原创 了解HTTP Keep-Alive的基本情况

HTTP Keep-Alive 很大程序上被误解了,下面介绍一下它在HTTP/1.0和HTTP/1.1版本下是如何工作的。Keep-Alive是 HTTP协议中非常重要的一个属性。大家知道HTTP构建在TCP之上。在HTTP早期实现中,每个HTTP请求都要打开一个socket连接。这种做效 率很低,因为一个Web 页面中的很多HTTP请求都指向同一个服务器。例如,很多为Web页面中的图片发...

2015-02-17 10:51:04 131

原创 HTTP Keep-Alive是什么?如何工作?

 HTTP Keep-Alive在http早期,每个http请求都要求打开一个tpc socket连接,并且使用一次之后就断开这个tcp连接。使用keep-alive可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制,可以减 少tcp连接建立次数,也意味着可以减少TIME_WAIT状态连接,以此提高性能和提高httpd服务器的...

2015-02-17 10:22:23 283

原创 [转]分析分布式服务框架

技术是为需求而服务的,分布式服务框架也同样如此,它不是凭空诞生的,也是因为有这样的需求才会有分布式服务框架这么样的东西诞生,在这篇blog中来详 细的分析分布式服务框架诞生的原因(其实也是需要用分布式服务框架的应用场景,这里隐含的意思就是并不是什么应用都需要分布式服务框架的)、分布式服务框 架需要提供的feature以及实现这些feature可选的技术方案。 其实这篇blog应该写在实现分布...

2015-02-16 17:44:34 69

原创 【原创】一次关于Netty+Gson造成内存泄露 Memory Analysis分析

 http://just2do.iteye.com/admin/blogs/2181293  之前写过一篇使用java自带工具去分析内存泄露问题,今天使用 Memory Analysis重做一次,看看高级工具是否能一针见血地更方便地发现问题。 第一步: jmap -dump:format b,file=abc.hprof <pid>dump出内存日志  ...

2015-02-16 11:46:28 457

原创 【原创】应该在什么时候使用Hadoop?

IT界从来不缺少浮躁,现在什么公司都说大数据,好像不搞这个显得自己很落后似的。但是什么是大数据?多大的数据才是大数据?用什么工具去解决多大的数据?下面这篇文章的观点很好,我比较认同。其中它提到,超过5T的数据建议使用hadoop。其实从hadoop的计算架构来看,这也是合理的,因为经过测试,小而多的数据文件进行计算,效率非常差。大而少的文件嫩更充分利用hadoop计算架构的优势。 ...

2015-02-12 09:55:02 308

原创 论软件可用性设计

如果你不懂得好的用户界面的设计,你不可能够设计出更有用的程序。让两个程序员来考虑同样的一个用户界面,将会产生一场争论。每一个人都会有自己的观点和看法。但是真正的关键是什么在起作用。因为缺乏客观的测试,我们不得不依赖于良好的人机对话的通用原则。Jacob Neilsen将其归纳为10条清晰显著的启发式。从我们以往与开发者工作的经验中我们发现以下的基本原则是易于学习和易于应用到实际设计决策中的。其...

2015-02-04 09:48:37 957

原创 创业早期,联合创始人如何避免窝里反?

原文作者Aaron Harris,Tutorspree联合创始人、YC合伙人。本文是Aaron Harris为创业者提供的联合创始人内部自我管理秘籍。译文根据本地阅读习惯略有删改。 经验表明,在管理雇员之前,创始人们应该先在内部进行管理。事实上,在公司创立的最初时期,为数不多的创始人的内部矛盾会成为公司倒闭的根源。然而,要对创始人们进行管理并不容易。 大多数管理建议都是针对你的下...

2015-02-03 09:06:01 82

原创 【原创】一次关于Netty+Gson造成内存泄露的分析排查

 最近做了一个内部系统之间的数据同步服务器,client端通过socket发送经过压缩的json数据到server端,server完成数据解码和保存。server架构:netty+Gson解码 在做压力测试的时候,竟然发现server内存泄露。分析内存泄露的时候,其实我们可以从简单方法入手,因为jdk1.6后自身就带有不错的内存分析工具,而且我认为使用好这些工具基本足够高,因为如果你对...

2015-01-29 15:38:49 365

原创 【原创】同步转异步+RPC的一个POS行业应用-关键技术实现

简单回顾下业务模型:收银台<=>POS代理服务器<=>POS机,三者之间进行通讯,POS代理作为一个报文转换和同步转异步角色。下面介绍下几个关键技术实现:1、报文这里的报文,指的是POS代理服务器跟POS通讯之间约定的报文。根据POS交易类型,支付、刷卡、打印等,约定每个交易报文包含什么字段信息和长度,其中一个比较特别字段是UUID,这个字段是每个报文的关键字段,具有唯...

2015-01-18 15:12:08 190

原创 推荐一个纯java编写的免费posp

一般posp(pos前置代理)都是用C做的,最近发现一个纯java编写的posp,整合了spring+netty,挺不错的,特别值得一提的是它对8583报文的配置非常方便,不需要硬编码,抽象的非常好。 JAVAPOSP网站:http://www.javaposp.com/...

2014-12-08 15:25:41 774 1

原创 【原创】同步转异步+RPC的一个POS行业应用-业务模型介绍

最近在做一个挺有意思的POS消费项目,工作量不太大,但涉及的技术运用还挺有意思的。可能有人奇怪,POS项目怎么用到JAVA语言了,先来简单介绍下这个项目背景: 改造前:收银机下单,POS机下单并刷卡支付改造后:收银机跟POS连线,收银台直接下单并触发POS刷卡支付动作 这里就涉及一个关键问题,POS机只能单线程工作,就是一个时刻只能干一件事情,比如打印,刷卡,跟卡主机通...

2014-12-07 01:01:17 153

【原创】关于Hashmap,Hashtable,ConcurrentHashMap并发测试

最近公司一个商城系统性能测试,发现数据库商品扣库存这块造成大量阻塞延时,所以想到通过map来改造。 由此引出对Hashmap,Hashtable,ConcurrentHashMap这几个map的一个小测试,看是否线程安全。   // final Map<String,Integer> map = new // ConcurrentHashMap<St...

2014-06-19 16:54:04 124

空空如也

空空如也

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

TA关注的人

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