Code Review学习:目标和内容

Posted on Sat 07 January 2012 in it • Tagged with Code Review, 研发管理

Code Review的目的和内容

检查设计是否合理

Code Review需要承担一部分“结对设计”和“设计把关”的职责 内容包括:

  1. 设计是否合理:如实现方法,数据结构,设计模式,扩展性考虑等
  2. 否存在大量重复代码和其他组件是否有重复的代码
  3. 结构设计是否合理

互为Backup

Code Review 中,Review 的开发人员了解代码的设计和实现,传递了技术,开发人员互为Backup,方便后期的维护,也减少了项目风险。

分享知识、设计、技术

Code Review是一个学习和享受的过程,一个开发人员的能力有限,而Code Review正是这样的一种机制,让好的知识、设计在团队中分享,实现整体团队的成长和整体的效益最大化。

提高代码可读性

代码的要求不止是能运行功能正确的代码,而是有了更高的要求,即Code for maintenance。 可维护的代码,需要清晰,可读性强,这里可读性代码检查不是指代码格式(代码格式可以通过工具检查出),而是指代码语义 ...


Continue reading

[他山之石]赖勇浩的强制Code Review实践

Posted on Thu 05 January 2012 in it • Tagged with Code Review, 研发管理

Code Review的好处

  1. 代码风格可控,代码质量有一定提升;
  2. 新员工入职后能够得到更多人的指导,成长非常快;
  3. 小 bug 频出的情况比之前的项目少了至少一个数量级。

Code Review的流程

  1. 使用 reviewboard 作为工具,通过 SVN hooks 强制每一次签入都是经过 review 的;
  2. 至少要有 2 个团队成员 ship it,才能够签入;
  3. ship it 的成员中,至少有一个是资深的团队成员。

Code Review的详细步骤

  1. 团队成员在提交代码之前,需要先使用 post-review 工具在 reviewboard 上创建一个 review request。一个配置良好的 reviewboard 能够自动发送邮件给所有成员;
  2. 收到邮件通知后大家抽空去 review 代码,而 review 结果也会通过邮件知会给大家,所以发起 ...

Continue reading

服务管理框架

Posted on Sat 31 December 2011 in it • Tagged with Architecture, SOA

使大型分布式系统大型服务化之后足高可用及低运营成本,新的系统架构需要满足以下条件:

1. 服务管理框架需要具备的功能

1.1. 容错性

failover:客户端容错支持,并支持自动失效探测及恢复调用; failfast:快速失败。很多远程服务调用是在关键路径中,它可以容忍失败,但是不能容忍堵塞; failback:故障恢复。能够快速定位错误,进行reset来尝试恢复。

1.2. 中心化的运营管理

【部署】动态启用及停用服务及节点:可以动态启动及停用服务(热发布); 【配置】配置及推送功能:所有client在同一时刻配置的一致性,并且client会跟配置中心保持长连接; 【性能及可用性】负载均衡策略:支持round robin,least active, consistent hash,或者基于脚本的动态路由策略。这个都是由配置中心来控制; 【监控】访问统计及动态运行参数查看:可以对方法级别进行访问统计及实时观察;

1.3. 开发支持

跨语言:支持client能使用常见主流语言来访问; 零侵入:架构对调用方式和具体业务逻辑透明 ...


Continue reading

UML视图分类概览

Posted on Fri 23 December 2011 in it • Tagged with UML

本文属于li3huo原创,转载的兄弟们请标明出处,谢谢哈!

视图是由多个图(Diagram)及一系列UML元素构成的集合,用来表示系统的一个特定方面。对视图的划分方式有好几种,有两种常见的分类方式:4+1视图和正交视图。

4+1 Views:4+1视图,是Philippe Kruchten为软件系统架构设计的视图分类 Orthogonal Views:正交视图,是James Rumbaugh在OMT(Object Modeling Technology)中建议的视图分类

1. Summary

通过对4+1视图和正交视图的介绍,让我们认识到二者的差异:前者的着眼点是应用到工作中的,而后者是为我们更加系统的学习和掌握相关概念而设计的。

2. 4+1 Views

UML图可以应用到系统的生命周期的不同阶段,4+1视图本质上是从软件生命周期的角度来对系统进行分类的。每个视图模拟系统所处的一种生命周期,了解这些能让我们适当的对其进行使用。

The 4+1 Architecture Views from the ...


Continue reading

淘宝技术沙龙后记

Posted on Mon 28 November 2011 in it • Tagged with aDev, Architecture, Asynchronous

淘宝马震的分享

周六参加了aDev(注)淘宝技术嘉年华技术交流,淘宝马震分享的《消息中间件在大型分布式系统的应用》非常不错。他们目前自行研发了Notify和Meta Morphosis两款中间件。后者是用Scala写得开源MQ Kafka的Java版(注)。

对技术架构和使用场景都进行了介绍。

消息中间件应用场景

分布式事务最终一致性:能够保证SOA架构下全局数据的最终一致; 数据复制:Binlog和日志都可以进队列。同类产品可以参考Twitter的Storm; delay queue(定时器):可靠的延迟队列,可以作为分布式环境下的定时器; 广播通知:避免广播风暴,可以为cache失效进行通知

感谢lazycai的分享和更正 ppt可以通过关注淘宝技术嘉年华: @taobaodeveloperclub 获得。 有关淘宝中间件的更多信息,参考 http://rdc.taobao.com/team/jm/archives/921

孙立的Fast Queue

ppt在这里: http://www.slideshare.net/sunli1223 ...


Continue reading

介绍一个多线程下载工具Axel

Posted on Fri 11 November 2011 in it • Tagged with HTTP, linux

介绍

主页:http://axel.alioth.debian.org/ 和wget和curl相比,最大的亮点是支持多线程。

Axel tries to accelerate HTTP/FTP downloading process by using multiple connections for one file. It can use multiple mirrors for a download.

效果

多线程与单线程下载效果对比:195.61 KB/s VS 88.5 KB/s

axel -o . -n 5 http://li3huo.com ...


Continue reading

用Python实现应用Last-Modified和ETag避免下载重复内容

Posted on Wed 09 November 2011 in it • Tagged with HTTP, Program Language, Python

Http 1.1中避免重复下载的标记

使用Http1.1中定义好的头信息来避免重复下载,参考HTTP/1.1 Section 14 Header Field Definitions中的14.19 ETag/14.24 If-Match/14.29 Last-Modified/14.25 If-Modified-Since

开发者把Last-Modified 和ETags请求的http报头一起使用,能够有效利用本地缓存,降低无谓的重复下载。

示例代码逻辑

  1. 客户端下载一个链接(Sample);
  2. 服务器返回Sample,Sample中记录Last-Modified/ETag标记;
  3. 客户端再次下载这个链接,并将上次请求时服务器返回的Last-Modified/ETag一起传递给服务器;
  4. 服务器检查该Last-Modified或ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304和一个空的响应体。 其实在《Dive Into Python》中就有相当详细的实例代码,强烈建议没看过这本书的python程序员们认真学习一下,会提升面向对象编程和网络编程能力的。

示例代码 ...


Continue reading

SOA架构设计概要

Posted on Mon 07 November 2011 in it • Tagged with Architecture, SOA

主要内容也是来自《SteveY对Amazon和Google平台的长篇大论》

1. 通过服务接口提供全部数据和操作

我们理解的SOA必然是通过接口的方式将数据与功能开放出来的,但要想要往平台方向发展,必须保证用且仅用服务接口的形式提供数据和服务: 团队间的程序模块的信息通信,都要通过这些接口; 除此之外没有其它的通信方式。其他形式一概不允许:不能直接读取其他团队的数据库、不能使用共享内存模式、不能使用别人模块的后门; 所有的程序都必须从骨子里到表面都要设计成能对外界开放的。也就是说,团队必须做好规划与设计,以便把接口开放给全世界的程序员,没有例外。

2. 容错与服务保护

作为SOA服务中的开发者,既不能相信为自己提供服务的应用(Server),也不能相信访问服务的应用(Client)。 基本算老调重弹,因为没有无故障的软件,也没有无故障的硬件,再加上千奇百怪的网络条件和完全料想不到的客户,所以要处理异常(容错)才是正常逻辑;而每一个和你相关的团队突然间都可能成为一个潜在性的DOS攻击者。必须要为每一个Service设置配额(quota)与节流阀(throttling)的保护机制。

3. 监控与QA

仅有一个确定主进程不死的响应不是监控。如果测试覆盖到能验证所有业务逻辑的程度,当然是最好的。但我迄今为止,没见过太多的团队(仅有一个团队)完成了如此缜密细致的测试用例。 我觉得比较理想的监控系统要让业务人员“看到 ...


Continue reading

前Amazon的Steve Yegge谈平台战略

Posted on Thu 03 November 2011 in it • Tagged with SOA

本文是《SteveY对Amazon和Google平台的长篇大论》的精编缩略篇,新阳推荐。原文翻译得比较急,缩略过程中对文字进行了修改,尽量让大家阅读得更顺利。

此文很鼓劲儿,我们的SOA步伐还应该再迈得再大些。

注:Steve Yegge, Amazon的前员工,现任Google员工,在两个公司都待了六年以上。

Amazon已经把文化转变成了“一切Service第一”为系统架构的公司,今天,这已经成为他们进行所有设计时的基础,包括那些绝不会被外界所知的仅在内部使用的功能。他们对于SOA的优缺点都了如指掌,能够采取有效的措施克服缺点从而取得成功。因为,SOA驱动出来的设计会产生出平台(Platform)。 对大多数(其他公司)的团队来说,只是让他们开发几个存取他们数据、提供一些运算的小小Servcie,这些服务都提供对外可编程接口。对他们来说就感到翻天覆地了,觉得自己在做产品,但其实只是提供了一些凄惨粗糙的Service。就算是这些粗糙的东西很不错,不过这就好像要汽车的时候,你却只有汽车的零件。//平台提供的服务要具有可用性

没有平台的产品是没用的,再精确一点,去平台化的产品总是被平台化的产品所取代。//提供开放式的API是大势所趋

平台Platform的黄金守则是Eat Your Own Dogfood(吃你自己的狗食——自己都要用自己的平台 ...


Continue reading

我们能在SOA架构里添加哪些特性?

Posted on Mon 10 October 2011 in it • Tagged with Architecture, SOA

新阳写了一个很棒的Thrift技术演进方案,甚至包含了架构基础代码。这个SOA方案有以下几个闪亮的特性: 1. 可用性:消除单点故障隐患,提供水平扩容的基础; 2. 可维护性:提高服务监控的粒度、规范化程度、自动化程度 3. 可改进性:包括Client端调用方式和Server端实现方式 这个方案最大的亮点就是层次分明:虽然是为Thrift量身定做的技术架构,但这些特性对采取什么具体技术来说并没有强制性的要求。

那么还有没有其它需求可以在SOA框架中满足呢?判断标准又是什么呢?我给出我的思考,希望能看到大家的真知灼见。

首先先给出选择特性的基本原则,然后讨论要为需求提供的特性及实现思路。 基本原则


  1. 适用性原则 在架构层面被满足的需求应该是对大多数服务来说都必须要满足的需求。 从公司业务情况来看,高可用性、水平可扩展性(Scale out)、可维护性等是所有服务都必须满足的特性。
  2. 投入产出比原则 主要考虑两方面因素,架构层面实现特性的代价和具体应用获得特性的代价。 举例来说,如果想要的特性在具体业务中的表现是不一样的,那么在架构上实现这个特性时还得考虑到具体业务的场景,那么直接把这个特性放到具体应用中就更合理; 如果具体应用能够添加一个组件或者依靠继承来获得架构特性,这个代价就是合理的。
  3. 轮子原则 大家都知道,在工作中不要重新发明轮子,用现成的就好了。 再往具体了说,如果有现成的工具或系统能支持的特性,一般来说不要带到架构层面实现了 ...

Continue reading

[牛人]UML创始人之Grady Booch

Posted on Sun 12 June 2011 in it • Tagged with UML, 牛人

Booch是Rational软件工程公司的首席科学家和Booch方法的主创人。

他与 James Rumbaugh 和 Ivar Jacobson 一起,是UML(统一建模语言)的创始人,三人合著了UML参考手册,是学习UML的最佳教材。

Booch于一九七七年毕业于美国空军军官学校,并于一九七九年在加州大学圣.巴巴拉分校获得计算机工程硕士学位。 Rational公司成立不久,Booch就加盟这个公司。在过去的十几年里他孜孜不倦地在面向对象领域里研究,取得了开拓性的研究成果。

他开发了面向对象的分析设计方法Booch Method和可重用的、灵活的Booch组件。 他还是Rational公司一些产品的开发者,包括该公司最初的软件工程环境Rational Enviroment及业界领先的可视化建模工具Ration Rose。

Reference

http://en.wikipedia.org/wiki/Grady_Booch


Continue reading

[牛人]软件开发方法学家James Rumbaugh

Posted on Sun 12 June 2011 in it • Tagged with DSM, OMT, UML, 牛人

1947年在美国出生,是享誉全球的软件开发方法学家。 他是对象建模技术(Object Modeling Technique,OMT)的首席开发人员,OMT 是一流的面向对象分析和设计方法,也是 UML 的前身。 在 1994 年加入 Rational 软件公司之前,Jim 在纽约斯卡奈塔第的通用电气研发中心工作了25年多。正是在那里,他开发了 DSM (Domain-Specific Modeling)领域定义建模,提升了代码层面的抽象层次。 他与 Grady Booch 和 Ivar Jacobson 一起,是UML(统一建模语言)的创始人,三人合著了UML参考手册,是学习UML的最佳教材。

他拥有麻省理工学院的物理学学士学位和计算机科学博士学位,同时,他还是加利福尼亚理工学院的天文学硕士。

Reference

http://en.wikipedia.org/wiki/James_Rumbaugh http ...


Continue reading

Maven10年

Posted on Thu 07 April 2011 in it • Tagged with Maven, technoledge

本月的《程序员》刊登了许晓斌(Juven Xu),Maven技术专家的一篇文章,叫做《Maven十年,来认识下》。真是一篇很好的介绍文章。 在这里和大家也分享一下

历史

Maven的原型在2001年提交,2003年已经成为Apache的顶级项目;在2005年10月,Maven 2发布,又走过5个年头后,也就是2010年10月,Maven 3正式发布。

Maven是什么?

作者用BIR(2)D来定义Maven,非常好记:

Build-自动化构建

基于定义好的生命周期模型来完成构建

Information Aggregation-信息聚合

基于项目对象模型和自动化站点机制,方便团队了解项目状态

Rule-规约

预定优于配置的管理方式

Repository-仓库

类库的集中管理

Dependency Management-依赖管理

依赖关系管理:传递性的依赖关系

生态系统

持续集成-Hudson

仓库服务-Nexus/Artifactory

IDE插件-m2eclipse

测试报告-Surefire

集成了JUnit和TestNG,几乎不用配置,就能自动运行单元测试

学习资源 ...


Continue reading

ThoughtWorks Technology Radar

Posted on Thu 16 December 2010 in it • Tagged with Architecture, 技术路线, 职业规划

ThoughtWorks在技术领域的前瞻性报告“技术雷达”,对IT公司的技术选型、开发人员在职业规划中选择技术路线都有借鉴意义。 http://www.thoughtworks.com/radar/ 目前“技术雷达”分为技术、工具、语言和平台四个领域: Techniques方面,我对以下几个比较感兴趣

    2. Scrum certification 4. DevOps 6. Automation of technical test
Tools方面:
    24. Apache camel 25. Next gen test tools 26. NoSQ
Platforms
    53. Google App Engine 62. EC2 & S3
Languages
    36. Java ...


Continue reading

Web Hosting Buying Guide

Posted on Thu 10 June 2010 in it

域名快到期了,免费的google apps就不指望了,想找个最便宜的能放WordPress的空间。

"Can’t decide what hosting is right for you? Answer 2-5 questions and get your perfect hosting match!"这个服务挺不错的,试了一下儿,找到了一个$4一个月的空间,配置很低,点订购,发现还得是一下买两年才这个价格,没兴趣了。不过这个服务还挺好的,有兴趣的可以试试:

Start the Buying Guide

另外还有一个高级搜索,能帮你理顺一下思路,到底需要什么样儿的web服务。

新阳推荐的virtual private server方案性价比挺不错的,但我希望能找一个¥200/年以下的。


Continue reading