六、缓存的威力
缓存是好东西,基本上90%的系统架构优化都是在围绕着如何利用好缓存。缓存真是无处不在,硬件上看,有硬盘缓存,RAID卡缓存,存储缓存,主存,NUMA特性,CPU L3-L2-L1等等。软件架构上看,有全局数据缓存,私有数据缓存,连接池,应用服务器缓存,WEB服务器缓存,CDN缓存,客户端文件缓存,客户端内存缓存等等。基本上大型系统都会有很多级缓存,否则需要非常高的硬件投入才能解决问题。硬件缓存通常都比较智能,或者说99%的情况下我们不需要修改配置,即使修改带来的性能提升一般也不会太多,除非你的软件有较明显的缺陷,你对硬件和你的软件特性已经了解得非常深入。 软件缓存架构带来性能的提高,往往也带来了负面的问题,如架构复杂化,数据同步多,数据不实时,维护成本高,系统调试复杂等问题,所以对于软件架构上任何一个缓存架构,都需要深入分析是否有必要。我认为如果增加一层缓存架构,至少要有5倍以上的提高提升,否则就要分析成本了。 对于中小型系统,不建议有复杂的缓存架构,因为让系统能更快速发展比提供更好的性能更有意义,杂的缓存架构往往需要投入更多的人力成本。
七、客户第一
我不知道客户第一是谁提出来的,但这个词真不能从字面上去理解,否则就会让我们走向歪路。首先,谁是我们的客户,谁是我们的直接客户,谁是我们的最终客户,付钱给我们的是否就是我们的客户?客户类型1与客户类型2发生了利益冲突,我们该以谁为第一。重要的客户与大部份客户利益有冲突时如何处理。这些看似与系统性能优化无关的话题,但往往左右我们系统设计的方方面面。我们做的工作有没有为了个别客户去优化他的界面流程或性能而让大部份用户认为系统更复杂或更难使用。
八、过度优化
大家都清楚性能优化的重要性,因此我们很多经历都是在做系统优化,也导致我们有时会犯过度优化的错误。有人说他性能优化提高了10倍,100倍,1000倍,但我们有时并不需要这种做法,这种事情更多是自己在优化技能上的一个学习。我们在做优化时应该多问一些问题 :你的优化让系统有什么变化:
你的优化有没有让系统更复杂了,以后的维护成本高了一些?
你的优化是否对大部份业务场景有效,还是只是为了一小部份场景优化而让其它主业务变慢或变复杂了?
你的优化对客户体验有感觉吗?
你的优化方法可持续有效吗,还是业务逻辑稍有变化就失效了?
......
我认为系统优化一定要有一个目标,而不是一味的提高性能,因为在性能优化的背后一定会带来或多或少的系统复杂度。系统性能优化在满足需求的情况下,需要开始衡量是否会让系统架构扩展性更差,或系统稳定性变差,可维护性变差等问题。