2009年03月01日
有机会能在研发中心08年Q4大会上给大家分享下关于08年的一些思想收获;其实ppt的主体内容在管理者论坛上面已经粗略地分享过了,之后线下又和叶老大沟通了下,在老叶的指点下,对各个习惯再进行了一定提炼,希望能对大家能有那么一点点帮助;收获的详细内容可见:http://blog.csdn.net/sfdev/archive/2009/01/04/3706077.aspx阅读全文>
发表于 @ 2009年03月01日 15:08:00|评论(loading...)|举报|收藏
2009年01月04日
不可否认,《高效能人士的七个习惯》绝对是一本绝世好书!但是结合到我自己的实际情况,个人觉得在实际的工作中要想将这七个习惯真正运用好,难度很大哟;主要是基于以下几点考虑:由于该书的原版是英文的,对于中文版有好几个翻译版本,各个习惯的名称中文翻译大部分都不相同,不能很好的从习惯名称上理解出这个习惯的本质!读者需要去细读各个习惯下的具体内容才能比较好的掌握,对此我深有感触,当然这只是我个人的体会,并不能代表其他人;正如书名所写:七个习惯!对于我而言,这似乎有点多了,当真正遇到一件事情时,仔细思考下可能好几条都适用,这会得选择综合症的,呵呵,just a joke!而且七个习惯中是分层次(依赖期、独立期、互赖期)的,也就是说各个习惯对于不同事情应该有不同的权重,所以我觉得在实际工作中要想运用好比较困难;经历过多次权衡和思索之后,我决定了如下的三项指导原则:其一:就某事考虑如何做得更好、更多其二:常回头看看其三:学会倒立阅读全文>
发表于 @ 2009年01月04日 19:36:00|评论(loading...)|举报|收藏
2009年06月20日
从前面的《网店版重生系列:都是Spring配置中自动注入惹的祸》中我们可以看出一些有关datasource、sqlMapClientTemplate、sqlMapClient的相关配置信息;整体而言,采取的方式为:
其一,单实例sqlMapClient,只配置configLocation属性,不配置datasource;
其二,sqlMapClientTemplate中配置动态datasource、sqlMapClient,然后在Dao中注入sqlMapClientTemplate;
其三,由于获取用户与Mysql数据库之间的对应关系是保存在Oracle主库中,所以不适用动态数据源,而是直接通过配置sqlMapClient、JNDI datasource来完成注入;
当我们在通过Ibatis在Mysql库中执行SQL语句时,因为要通过datasource获取connection,所以可能需要先访问Oracle主库以便获取当前用户所对应的Mysql数据库信息,而这两者的SQL操作都是通过Ibatis进行的,所以我们上面提到的那段代码就会被多次执行了,而每次SQL执行完毕之后都会到阅读全文>
发表于 @ 2009年06月20日 17:00:00|评论(loading...)|举报|收藏
2009年06月14日
网店版重生项目中,因为我们要将最主要的核心数据由Oracle迁移到分布式Mysql中;虽然说业务逻辑不进行任何改动,只是将数据源由单一的Oracle改造成基于Mysql的动态数据源,但为了保险起见,我们还是要求做一次性能测试,但怎么圧呢?这个系统已经2年没有比较大的系统变动了,但是用以前的性能测试结果来和新系统做对比,大家都觉得不那么匹配,所以我们决定:对现有的老系统的关键模块重新进行一次压力测试,然后和新系统相同模块的压力测试结果进行对比,看新系统是否有明显的性能下降!
但对老系统进行压力测试的结果却令我们大失所望,远远超出了我们的想象,一些并不复杂的功能点都只有不到20的TPS!这下可把我们吓坏了,依据我们原有的性能测试数据,类似的功能模块一般都能达到100TPS左右,难道系统真的年老失修已经变成了现在这么慢的地步?我们自己当然不相信,因为系统并没有进行过大的架构调整,于是开始了路漫漫的排查过程;
性能测试过程中反映出来的现象为:不管多少并发用户访问、系统的TPS都只能保持在十几,但是Web服务器、DB的压力却很低,增加并发数也没有用,而且每个请求的响应时间并没有下降,整个应用阅读全文>
发表于 @ 2009年06月14日 15:31:00|评论(loading...)|举报|收藏
2009年06月13日
1、单台Linux服务器中如何部署多个独立应用,即多个应用不能run在一个jboss实例中?
2、Jboss无法正常启动,报异常javax.management.MBeanRegistrationException: preRegister() failed?
3、Jboss已经正常启动,但是无法用IP或者绑定IP访问应用?
4、Jboss正常启动,但是用shutdown脚本无法关闭应用?
5、如何对Linux下的Jboss应用进行debug?阅读全文>
发表于 @ 2009年06月13日 18:14:00|评论(loading...)|举报|收藏
2009年06月06日
最近一直忙于做一个纯技术驱动的项目:网店重生!就是要把网店版改造成为基于Mysql的分布式应用;由于在过去的1年半的时间里面,网店版都没有怎么发展,只是一些例行维护;此次要这么大规模重构的确是一个不小的挑战,那在这个重构过程中,我们也再次遇到了当初的一些老问题,但由于以前的主力开发人员早已经不在一个团队里面了,所以很多的小问题还是让我们费了一些力气,趁此机会将这个过程中遇到的一些问题记录下来
本篇要讨论的是关于Jboss和Log4j的日志冲突问题其一就是要解决应用启动过程中的这两个异常,其二就是要搞清楚为什么会出现这2个异常,以及在解决问题过程中使用到的几个关键配置项;
共涉及3个Jboss配置项CatchSystemOut、Java2ClassLoadingCompliance、UseJBossWebLoader;阅读全文>
发表于 @ 2009年06月06日 16:59:00|评论(loading...)|举报|收藏
2009年05月03日
在对Spring Container管理的bean进行配置时,有一个很好用的功能就是自动注入,可以根据不同规则对bean所依赖的bean进行自动set,相信最常用的就是设置default-autowire="byName"这种方式啦;这样我们在进行配置时就可以减少很多的xml代码、当我们在Java代码中新增或减少bean的注入时就无需再对xml配置进行同步变更(针对采取xml配置的方式,若采用Annotation的方式则不存在该问题),从而提高了编码效率;一般情况下采取这种自动注入的方式MS也没啥问题,但是在一些特殊情况下可能会导致莫名其妙的问题,从而要花费大量的时间去排错;在最近的一个项目中就被我遇上了;问题大概是这样的:阅读全文>
发表于 @ 2009年05月03日 12:04:00|评论(loading...)|举报|收藏
2009年04月08日
随着应用系统功能的不断新增,而某些功能的实现对实时性要求并不是那么高,但是逻辑却很复杂、执行比较耗时,比如涉及外部系统调用、多数据源等等;此时,我们就希望可以让这些复杂的业务逻辑放在后台执行,而前台与用户的交互可以不用等待,从而提高用户体验;另外,从系统架构这个层面来说,我们也希望按照不同功能来拆分,以保持各个系统之间的低耦合,当一个系统出现问题时不会影响到其他系统,并且对于独立的各个系统,我们可以专门进行性能优化、监控等;所以我们需要通用、高效的异步任务处理系统;要实现类似的异步处理系统,相信大家首先想到的就是JMS,Alibaba里面也有基于JMS的异步处理系统,而且该系统在网店系统中应用非常广泛;但由于目前我们阿里软件采用了不同的技术框架,所以不能直接拿来使用;况且,该系统为了实现异步任务系统的并发,采取了JMS与MDB结合的策略,所以系统就依赖于EJB了,这样系统就变得笨重了,由此系统部署的应用服务器必须要支持EJB,一些轻量级的不支持EJB规范的应用服务器就没法部署了;考虑到如上的系统设计目标,我们的设计思路为:任务DB持久化 + Spring封装Job调度、线程阅读全文>
发表于 @ 2009年04月08日 09:39:00|评论(loading...)|举报|收藏
2009年03月26日
当我们需要在Linux系统中安装一些软件而去下载安装文件时,一般都需要确认到底下载哪个版本的安装包,这就需要我们知道自己的Linux系统到底是什么版本、什么内核,常见的版本、内核查看命令或者文件有如下几个:version、uname、lsb_release、issue、redhat-release;另外,还可以用getconf LONG_BIT或者file /bin/ls查看当前Linux到底是32位的,还是64位的;阅读全文>
发表于 @ 2009年03月26日 20:36:00|评论(loading...)|举报|收藏
gzip 命令减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。 语法:gzip [选项] 压缩(解压缩)的文件名该命令的各选项含义如下: -c:将输出写到标准输出上,并保留原有文件。-d:将压缩文件解压。-l:对每个压缩文件,显示下列字段:压缩文件的大小;未压缩文件的大小;压缩比;未压缩文件的名字-r:递归式地查找指定目录并压缩其中的所有文件或者是解压缩。-t:测试,检查压缩文件是否完整。-v:对每一个压缩和解压的文件,显示文件名和压缩比。-num:用指定的数字 num 调整压缩的速度,-1 或 --fast 表示最快压缩方法(低压缩比),-9 或--best表示最慢压缩方法(高压缩比)。系统缺省值为 6。阅读全文>
发表于 @ 2009年03月26日 18:45:00|评论(loading...)|举报|收藏
RPM有五种基本的操作方式(不包括创建软件包):安装,卸载,升级,查询,和验证。下面我们就来逐一的讲解吧,最简单的使用命令如下:一、安装RPM包$rpm -ivh foo-1.0-1.i386.rpm二、卸载RPM包$rpm -e foo三、升级RPM包$rpm -Uvh foo-2.0-1.i386.rpm四、查询已安装的软件包$rpm -q foo五、验证软件包$rpm -V foo六、小技巧RPM不仅是安装/卸载程序的工具,它还是系统维护和诊断的一把好手。阅读全文>
发表于 @ 2009年03月26日 11:23:00|评论(loading...)|举报|收藏
SCP命令是在linux中用来跨服务器拷贝文件的常用工具,用法非常简单;如下:scp -options [[user@]host1:]file1 [[user@]host2:]file2options里面我们一般用得很少,主要用-v来查看命令执行过程中的详细信息,这在复制失败时差错非常有用;另外一个常用option就是-r,用以深度复制,包括子目录下面的所有目录和文件;上面的语法可以灵活使用,他可以在host1和host2之间互相copy,而不仅限于从host1中copy文件到host2;该命令虽然好用,但是由于采用的是ssh协议来对传输内容进行加密,而且在访问另外服务器时需要手工输入密码;下面我们就介绍一种方法来避免每次都输入密码,也即我们常说的服务期间打通通道;阅读全文>
发表于 @ 2009年03月26日 10:45:00|评论(loading...)|举报|收藏
VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,但是它的命令集太多,所以要想精通他,也是一件很不容易的事情,除了专业SA,对于我们开发人员而已只需要掌握一些最最常见的用法应该就可以了;下面就介绍一些常见的命令:阅读全文>
发表于 @ 2009年03月26日 10:43:00|评论(loading...)|举报|收藏
定时调度工具Crontab的相关知识点;crontab 指定在固定时间或固定间隔执行特定的脚本;crontab的常用参数有如下3个:-e :执行文字编辑器来设定日程表,一般默认的编辑器是VI;-r :删除目前所有的日程表;-l :列出目前所有的日程表;设置日程表时,需要有固定的格式,共6部分,各部分间用空格间隔;其中第6个部分是要执行的命令,前5个部分是设置执行时间或者时间间隔的,具体取值范围和意义如下:分钟【0-59】 小时【0-23】 日【1-31】 月份【1-12】 星期【0-6】阅读全文>
发表于 @ 2009年03月26日 10:33:00|评论(loading...)|举报|收藏
2009年03月08日
利用Quartz来实现对任务的调度已经被广泛地应用了,一个利用Quartz来进行任务调度的典型配置如下:
若有多个任务需要调度,则配置多个JobDetail、Trigger即可,待执行的Task bean没有啥任何要求,不需要extends任何class、或者implements任何interface,只是被执行的method需要是无参数的;
但是在我们现实项目中,仅仅完成这样的功能是还不够的,我们还需要争取完成以下几点:
对所有的Task实现执行开始、结束时间的记录;
对每天的Task执行结果持久化、或者通过email、旺旺消息等方式告知相关owner;
当我们有多台Task服务器时,如何保证每个任务只在一台服务器上执行;
针对以上几个问题,我们也都有很简单、直接的办法可以搞定,比如说1、2两点可以直接在每个任务中各自编码完成,但是这样不仅每个task都要写非常类似的重复代码、而且不能保证每个任务的执行情况都被记录,因为某些task的编码人员就不会在意这些非功能性需求;对于第3点,我们也可以通过配置来完成向不同task服务器部署不一样的发布包来完成,但这给发布带来了麻烦,阅读全文>
发表于 @ 2009年03月08日 19:30:00|评论(loading...)|举报|收藏