作者:Anders小明

1. 性能调优的三个维度
A. 性能的解决不仅仅是一个技术问题,而是一个流程制度;
B. 性能的解决的前提是合理的性能需求评估管理;
C. 性能调优依赖的技术包括两个方面:程序设计人员(调整应用程序)和基础服务维护人员(调整应用服务器,数据库应用和硬件服务);

2. 性能调优的锁问题
并发系统一大性能问题是锁问题。锁可以分为乐观锁和悲观锁,分别适应对于资源的中低竞争和高竞争的并发环境,如果是高竞争环境下使用乐观锁性能问题反而不如悲观锁;对于高竞争环境下的程序,应该通过调整业务,降低资源的竞争度。更好的是没有锁的并发程序,通过应用无锁集合,以及调整程序解除锁应用。

3. 应用程序的设计
设计中涉及到的组合方式,包括类(接口)组合,继承组合以及产生组合三种。三种组合各有优缺点,设计时适应不同场合。这就涉及到现有面向对象的设计粒度:类(第一公民)和方法(二等公民)。
类(接口)组合实际上复用的是类一级粒度的设计,而继承组合本质上是一种有方向的组合,复用的方法一级粒度的设计,提供与或非的逻辑操作。而产生组合,例如AspectJ,也是在方法一级粒度的设计复用。
因为继承组合复用在方法一级的粒度上,因而其更适合存在嵌入式,最低粒度的差异性的设计中,借助于虚拟机的支持,无需额外工作。而类(接口)在类一级上,更适合在更高一级的逻辑复用上;其实不一定需要接口,普通的类也可以,但是在这一级粒度的差异性替换,采用接口优于类,因此称为类(接口)组合;接口是类(接口)组合的编码需要;对于接口一级,需要通过框架的集成和适配来提供差异性的设计。产生组合其实也是在方法一级,不过更关注于广泛的横切面,同时由于现有的语言对它的支持不同,Java需要额外的编译器,而.Net则是在内置编译器上支持。
更高一级的组合是组件组合。对于组件边界的设计,遵从两点:严格把关设计和代码优先。接口优先的设计通常导致成本太高,实践中会导致开发人员在项目的进度压力下把代码写在不合适的地方。

4. 技术管理
技术管理在于疏不在堵:不是去规定开发人员应该这样,不应该那样,然后通过很多的人力以及工具来监督管理;而应该采用好的设计(任何改动最多涉及一个接口和一个实现类),架构设计上给出最优路径,框架上提供丰富多样的分解和集成能力,并提供最小的学习成本,开发人员自然会follow。

技术管理中一个重要的方面是技术评估,包括
A. 程序设计的评价。一个简单原则是:任何改动最多涉及一个接口和一个实现类。
B. 技术选型的评价。学习成本和维护成本的高低是一个重要指标;同时要尊重现有人力资源,技术选型如果太新或者太窄,将面临人力资源的困境。

技术管理的另一个方面是需求的管理。
这里不是说如何去获取需求,而是对于需求的评估和跟踪。其中很重要的一点应该有制度可以明确的跟踪需求到一个可以管理的设计粒度(类和方法)。这样也可以帮助我们确认一个需求的影响面,帮助我们改进设计。