自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 jvm文章摘要

Java内存区域与OOM  http://www.iteye.com/topic/802573·程序计数器:保留线程执行到的指令·栈:编译期间预期的变量表。层次深:栈溢出;无法创建更多的栈OOM;线程个数=(系统内存-堆-年老代-保留区域)/每个栈空间·本地栈:native,也会OOM·堆(eden、s0、s1+old):生成大量无法回收的对象OOM·方法区:加载类过多OOM...

2011-12-02 01:10:23 161

原创 系统的性能优化--记项目总结

项目过去都3个多月了,也没系统的总结,今天总结一下 系统背景:1.访问量大:每天承受20亿+服务调用2.海量数据:核心表都是5亿条数据,而且每天还在以几十万的速度增加3.之前架构:由于读写比例很高,已经采用分布式cache--db单点的架构4.db负载高:在小机上,业务高峰期时,db的cpu的占用率曾达到70%-80%,响应明显变慢5.业务特性:读写比例高,大部分业务可...

2011-09-06 00:40:20 206

原创 转载:面向程序员的数据库访问性能优化法则

http://blog.csdn.net/yzsind/archive/2010/12/06/6059209.aspx

2010-12-22 00:06:11 173

原创 主题:关于系统性能的思考-----回复

看了《关于系统性能的思考》,结合自己平时的工作和身边的教训,谈谈自己的一些关于性能的想法 1.性能和容量不是一个概念,在相同条件下,当然性能如果越好,容量会越高 2.性能优化真的不是定式的,还需要相当丰富的经验去解决。以自己身边的系统为例,从Apache、Jboss、F5、网络、应用系统、到最后的DB,就如同是一条回家的路,任何一个环节处理慢了,都可能成为性能的瓶颈 3.一...

2010-07-21 02:34:06 176

原创 logger的功能

1.最明显的功能,排查线上问题。   平时遇到bug时,要相信“人走过,必留下痕迹”,没有什么事情是没有原因的。 2.报警   我们的系统越来越多,业务越来越多,不可能靠人肉每天查询日志以发现问题,还是要利用机器。   针对具体的业务,打印具体格式的日志,通过日志收集系统的规则,发现问题则向相关人员报警。怎么实现日志收集系统呢,可以每隔一段时间,从生产环境中获取指定日志,每次读...

2010-07-19 23:40:15 266

原创 我们需要什么样的logger

在生产环境中,针对具体问题的追踪,没有debug,只有利用logger排查问题,这就要求我们打印logger,具体有哪些logger呢? 1.摘要日志   同步service层摘要日志,打印调用服务,入参,执行时间,执行结果   异步事件接收摘要日志,打印调用服务,入参,执行时间,执行结果   dal层摘要日志   intergration摘要日志   摘要日志,一般由...

2010-07-19 23:28:33 195

原创 大资源的分配与控制

在应用中,总有一些业务操作可能会引起大数据量的查询,基于应用健壮性的考虑,需要对这些业务控制起来。 思路:外围业务每次请求时,应用每次申请一个资源,当超过限定的资源总数时,不允许业务继续进行.       try{           applyResource();           do业务();       }       finally{            r...

2010-07-19 23:13:32 129

原创 缓存小技巧--实现cache的锁

在有些业务背景下,需要cache防止并发的情况,然后cache却不能提供锁的功能,可以由应用代为实现 1.第一次存入cache的数据时,加一个modifiedTime的时间戳2.下次更新的时候,必须保证取到当前的时间戳和cache中数据的时间戳一致,这样才可以更新;否则直接removecache,不要影响到正常业务。 其实,这种乐观锁的实现,和DB层的乐观锁实现原理是一样的,即...

2010-07-19 22:34:47 533

原创 缓存小技巧--缓存的分级

在大型的互联网应用中,如果缓存的是大量的数据,可以考虑多级缓存数据1.第一级cache:本地线程cache   每次将数据放入线程cache(利用ThreadLocal)中,可以避免同一个线程中对同一个缓存数据的访问 2.第二级cache:本地内存cache   利用appserver的内存,将数据放入本地的内存缓存,可以用的工具有EHCache 3.第三级cache:...

2010-07-19 22:22:19 894

原创 缓存小技巧--缓存key的分组

这篇没有任何技术含量,仅仅是一个良好的编程习惯 随着应用中缓存的业务数据越来越多,为了防止不同业务的key相互覆盖的情况,有个简单的办法,对不用的业务的数据分组,比如:业务1 prefix1+key业务3 prefix2+key业务2 prefix3+key 这样之后,即时各个业务的key相同,也可以防止数据被相互覆盖的情况 ...

2010-07-19 22:15:44 453

原创 缓存小技巧--key的关联性

如果我们对一个比较复杂的模型做cache,会有如下需求:1. 利用多个key去查询这一模型的cache2. 继而要求可以利用多个key去删除cache时 如果按照最简单的模型,每个key对应一个cache数据,这样当某一个key对应cache中的数据变动时,另外一个key对应的cache数据必定成为脏数据。举例:key1->cacheObject,key2->cac...

2010-07-19 22:11:20 240

原创 缓存小技巧--NullObject模式&&表识cache

在我们的应用中,有一张表的查询量非常之大,高峰期时6000次/second查询,而且更新很少,于是我们的改造来了: 第一次优化:方法:每次从cache中读取,如果cache中没有命中,则从DB读取,如果有值将此值放入cache中。效果:上线后效果并不是特别明显,高峰期仍有3000次/second的查询,原因在哪里呢?此表只有700w的数据量,但是对于3亿用户,每个用户都要查询此表,...

2010-07-19 22:01:52 195

原创 缓存小技巧--异步更新缓存时remove cache数据

在支撑大规模、高并发、高可用的互联网应用中,异步更新分布式缓存的应用已经越来越多了(为什么是异步更新缓存,因为异步不仅可以提高系统性能,而且提高系统的伸缩性和可用性),由于缓存的更新是异步的,可能由于多个更新缓存的并发线程而导致的脏数据。 举例,有下面2个线程A、B同时执行业务,执行完业务之后,会产生2个异步的线程A1、B1去更新缓存,在理想情况下,A1和B1应该保持顺序性,即A1先更新缓...

2010-07-12 23:24:22 454

原创 这是一个非常值得记忆的时刻

2008年12月份收费改造,第一次通宵发布系统;这是刚毕业不久后进入公司,抱着对学习饥渴的心态,申请晚上通宵留守,发布成功,晚上12点吃了一顿烧烤,4点发布完成后监控没有问题,6点和若干开发还在局域网内打了几盘cs,7点pm把热腾腾的豆浆煎饺送上,上午9点和其他开发交接后,10点回家睡觉 2009年11月份新的个人版发布,作为核心业务的提供方,留守发布,这次同样有烧烤,我们的系统发...

2010-07-07 21:51:19 142

原创 冗余的粒度问题

以前谈过重用的粒度问题,今天也谈谈冗余的粒度。 1. 数据库字段的冗余    好处1:合适字段的冗余,对于提供数据库的查询速度会有很大提升,因为可以不用于其他表join去获取数据    好处2:在垂直分库的情况下,丧失了join数据表的能力,为了不让业务受伤害,在表上加上一些冗余,同样可以满足业务的需求    坏处:需要在多个表中维护数据的一致性2. 业务中多个表的冗余...

2010-06-26 16:12:24 176

原创 AOP应用

AOP应用已经很广了,谈一谈平时工作用到的地方:1. 打印摘要日志    打印调用服务时的调用的服务、方法、参数、执行结果、消耗时间2. 详细的入参出参    打印调用服务时调用的参数列表,以及返回结果。基于日志量的考虑,对于频繁调用的查询类可能不需要打印;对于操作类服务,可以打印出入参出参3. 性能监控    对于每个服务的调用、异步消息的处理、DAO的调用,以及对外围系...

2010-06-26 15:51:59 112

原创 差点导致系统挂掉,可用率啊可用率!

早上我们线的架构找到我,由于一张表被频繁查询,险些导致系统挂掉(还好现在只有每天几千的查询量,数据量不大,不过过段时间,当一个新业务上线时,会有每天1000w--5000w的量,就是说每天查询1000w次),现在打字时还有些腿软,可用率啊可用率!  上下文是这样的:原因:系统中有些配置数据会被频繁查询,所以我们将之纳入缓存,用于提升系统的性能,缓解数据库的压力。 措施:因此每次系统...

2010-06-11 11:20:19 260

重用的粒度问题

面向对象的一个重要特征就是封装和继承,其实就包含了代码的复用。继承、委托等方式(is a/has a/use a)都是代码复用的方式。 在软件开发中,有条原则就是DRY--dont repeat yourself,刚开始接触计算机时的理解是把公用的代码抽象到一个方法中,其他外围类调用此方法,其实除了这种方法级别的复用,还有更高的层次。1.代码的copy\paste,最低级的复用。 ...

2010-04-15 23:01:13 237

原创 如何计算java内存大小--谁吃了对象引用的16byte?

public class ResidenceRulesDO { /** * This property corresponds to db column <tt>BEGIN_CODE</tt>. */ private long beginCode; /** * This pr...

2010-01-13 21:53:30 97

hashmap学习

1.数据结构数组+链表的形式    【】【】【】【】【】                                     |       |       |       |       |                                  【】【】【】【】【】数组长度:固定,即初始化HashMap时的capacity。当需要数组长度时,会rehash,重新计...

2009-12-09 23:57:50 71

原创 探寻ThoughtWorks的敏捷实践,专访ThoughtWorks咨询师 <摘要>

敏捷包括TDD、重构、简单设计、持续集成等。TDD确保编码前理解需要,并保持简单设计;同时TDD自身的大量自动化测试为持续集成提供了保证;在重构代码时保证代码质量,达到简单设计。 敏捷思想提倡以人为本,持续改进,通过快速迭代实现频繁交互,保证与客户的沟通,减少对需求理解的不一致,客户也可以及时调整需求来满足业务的变化。每一个迭代过程都是一个完整的瀑布流程,包括分析、设计、编...

2009-11-24 13:52:23 204

原创 Don’t Ask, Tell

Don’t Ask, Tell 先举一个计算工资的老例子. 不同的员工有各种不同的工资计算方法, 这种情况下如何为全公司的员工计算呢? 想想现实中的情况, 在公司可能有一个会计部,每到发薪的日子. 会计部就会把全公司的员工资料集中到一起, 看看张三是什么类型的员工, 如果是小时工就按小时工来计算,如果是办公室主任就按主任的方法来计算. 基于这样的考虑, 我们在建模的时候也会相应的建立一个类...

2009-11-17 02:55:57 106

原创 Java对象的强、软、弱和虚引用

在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则就把它扔到垃圾箱,由清洁工人收走。一般说来,如果物品已经被扔到垃圾箱,想再 把它捡回来使用就不可能了。    但有时候情况并不这么简单,你可能会遇到类似鸡肋一样的物品,食之无味,弃之可惜。这...

2009-11-12 20:03:40 82

复杂对象的输出--定制toString

先来看一个类public class ComplexObject implements Serializable { private static final long serialVersionUID = -3986831089858789914L; private int id; private...

2009-10-28 20:50:13 236

原创 java序列化总结

1.Serializable接口只是一个表识接口,仅仅是告诉jvm这是一个可以序列化的接口。2.serialVersionUID只要这个UID的值不变,在序列化的版本中增加属性或者减少属性就不会报错;否则当版本变更后,再反序列会报错;如果自己不定义,每次在编译的时候,编译器会自动生成一个值,但是不能保证每次编译时的值都一样,所以务必自己定义! 3.readResolve、rea...

2009-10-26 23:10:54 82

原创 罗素语录

1. 对爱情的渴望,对知识的追求,对人类苦难不可遏制的同情,是支配我一生的单纯而强烈的三种感情。2.幸福生活在很大程度上必然是恬静的生活,因为真正的快乐只能存在于恬静的气氛中。 3. 一直向着自己目标前进的人,那么整个世界都会为他让路。  4. 罗素 说:  爱情只有当它是自由自在时,...

2009-10-14 13:09:22 206

这段代码不是我写的

刚刚看了9月份刚刚出版的《架构师》的篇首语,技术人员要注意沟通。是的,我就是书中所说的那种人,我害怕沟通,和人打交道远远不如和机器打交道那么自如。和人打交道,最重要的是沟通,一句不妥的用语,小到会引起对方的误解,大到任何可以想象的不堪后果。 是的,我有责任,重构代码是我的职责,但是代码混乱的历史原因不应该压在我身上。我心中只是想表达此意思,心中并没有推脱的意思,错就错在自己的表...

2009-09-16 15:58:02 194

原创 可伸缩性最佳实践:来自eBay的经验

在eBay,可伸缩性是我们每天奋力抵抗的一大架构压力。我们所做的每一项架构及设计决策,身前身后都能看到它的踪影。当我们面对的是全世界数以亿计的用户,每天的页面浏览量超过10亿,系统中的数据量要用皮字节(1015 或250 )来计算——可伸缩性是生死交关的问题。 在一个可伸缩的架构中,资源的消耗应该随负载线性(或更佳)上升,负载可由用户流量、数据量等测量。如果说性能衡量的是每一工作单元所需的...

2009-09-15 21:37:50 68

原创 领域模型分类

一、失血模型 只有getter和setter方法的实体类,所有的业务逻辑完全由Service层来完成。 代码示例: Domain:Java代码  public class Person { private long id; private String name; private int age; //getter and s...

2009-08-11 17:26:01 117

我们依赖的是流程保证质量,不是依赖个人保证质量

    在新的个人版中,为了重用校验码的逻辑,网站系分主导,将校验码的生成、验证规则放在会员核心中(包含错误三次以上删除校验码,一分钟只能发送一次等规则),具体影响验证找回密码申请、手机绑定、手机解绑、激活增加登录号、注册时的激活等业务。这是事前有pa、pd、网站前台、会员核心几方在一起商定的。    由于这些工作本不在个人版项目的范围之内,测试决定在sit回归的情况下测试老前台,以防止验证码部分...

2009-08-11 15:35:44 85

大道至简与过度设计

前段时间,由于系统需要扩展一下发送事件通知,一个服务可以发送多个通知,而且通知里需要有一些逻辑判断。冥思苦想后,在抽象模板方法中增加了一个扩展点,又通过interceptor拦截服务的方法名,当时还在为自己高深的设计窃喜。1. 找了一位同事帮我review下代码。大概1分钟之后,给出的评价是设计比较抽象,太复杂了。回头好好想了想,软件系统中的设计是干嘛的?搞的那么花花稍稍,真的可以通过花哨...

2009-07-30 14:01:45 107

可伸缩性的艺术(2)

本来翻译出来想放在技术部知识库上的,担心太烂被人拍死,放在javaeye吧,欢迎斧正:) 原文地址http://www.hfadeel.com/Blog/?p=122可伸缩性的艺术(2)我打算写两至三篇关于可伸缩性的文章。其中第一篇文章叫做‘可伸缩性原则’——介绍可伸缩性的概念及其原则,接下来我会介绍可伸缩性模式、相关反模式以及一些指南。我们现在开始吧!Go to : 第一篇-...

2009-07-26 16:41:28 142

可伸缩性的艺术(1)

本来翻译出来想放在技术部知识库上的,担心太烂被人拍死,放在javaeye吧,欢迎斧正:)原文链接:http://www.hfadeel.com/Blog/?p=120 可伸缩性的艺术(1)我打算写两至三篇关于可伸缩性的文章。其中第一篇文章叫做‘可伸缩性原则’——介绍可伸缩性的概念及其原则,接下来我会介绍可伸缩性模式、相关反模式以及下一篇文章准备介绍的一些可伸缩性准则。我们现在开始吧...

2009-07-26 16:36:25 168

重读martin大师的《重构--提高既有代码的设计》第一章

重新翻了这本圣经级的关于重构的书籍,把第一章关影片租赁的例子在eclipse里重构了一把,总结一下用到的重构原则: 1. extractMethod     本例将switch和ifesle2个计算影片价格和计算影片积分的代码段提取出来,专门放入一个小方法中。其实提取出来的每一个方法都应具有一个明确的业务意义。所以欲所重构,必先熟悉业务,否则没有办法提取出小方法。 2. 代码代码命名rename和...

2009-07-26 14:45:19 143

如何重构可以不影响到正常业务的进行?

昨天主管和我review了Q2的kpi 主管:你觉得你写的代码怎么样?我:感觉一般,看了程立写的代码,是种享受,和其比起来,差距还很大。其实大部人程序员都是以最小代价完成布置的任务,完成的代码。我完成了任务,胡总你可能只关心功能,又不知道我的代码质量如何。还是看自己的责任心和时间吧,有时间也许会不断重构自己的代码,但有些自己也有些惰性。 主管:前段时间,我找程立看了下你在企业版...

2009-07-25 13:49:28 344

一些实用命令

1.windows下的删除还在为windows下删除大文件夹的弹出框烦恼吗?这里有个cmd下的rd命令,系统会在后台自动删除,免除弹出框的烦恼用法: rd  /s /q 文件夹名称 2.linux下删除rm -rf * 3.linux下的rz和sz命令rz(receive):上传文件到linux服务器sz(send):从linux服务器下载文件到本地 4...

2009-05-26 11:05:45 84

原创 架构师书单 2nd Edition zz

  作者:江南白衣,原文出处: http://blog.csdn.net/calvinxiu/archive/2007/03/06/1522032.aspx,转载请保留。   为了2007年的目标,列了下面待读或重读的书单。    "其实中国程序员,现在最需要的是一张安静的书桌。",的确,中国架构师大多缺乏系统的基础知识,与其自欺欺人的宣扬"读书无用,重在实践变通,修身立命哲学书更重要",把大好时...

2008-07-15 18:04:12 89

转载 ant教程详解--javac,java,jar,war,delete,copy,mkdir,move等指令 zz

   原文地址:http://tech.it168.com/j/2007-11-09/200711091344781.shtml        本文请勿转载!       Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能。在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作。一.             安装与配置下载

2007-12-21 01:19:00 11077 1

转载 漫谈应用缓存的命中率问题 zz javaeye

这篇文章源自于: http://www.javaeye.com/topic/77195 其中很多人谈到了缓存命中率的问题,应用缓存的命中率取决于很多的因素: 1、应用场景 是OLTP还是OLAP应用,即使是OLTP,也要看访问的频

2007-12-15 03:00:00 849

转载 为什么ORM性能比iBATIS好? zz javaeye

缓存是有很多层次的,有web server前端缓存,有动态页面静态化,有页面片断缓存,有查询缓存,也有对象缓存。不同层面的缓存适用于不同的应用场景,作用也各自不同,如果可以,你全部一起用上,他们不矛盾,但这个话题比较大,现在不展开谈。 针对OLTP类型的web应用,只要代码写的质量

2007-12-15 02:36:00 997

空空如也

空空如也

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

TA关注的人

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