为什么需要设计?

通常,软件设计会被做为在软件研发阶段的头等大事。大家都明白兵熊熊一个,将熊熊一窝的道理,所以在大型企业中软件设计都由资深或专家级以上的人员来做。一个好的设计可以避免后续程序在迭代的过程中出现各种莫名其妙的问题,相信大家都遇到过在程序初版上线后使用非常顺畅,但在用户使用一段时间或增加功能后反而没有之前好用的情况,大多研发团队会将此类问题归为技术债,其实根本还是设计出了问题。

设计并非说是在程序立项之初,需求分析之后一蹴而就,后续就无须关注的一项工作,而是贯穿整个软件生命周期,有必要还需要设计重构(尽量避免,但仍频繁出现)的一项核心工作。想要做好软件设计,必须从多种角度出发,避免在设计程序时拿业内的方案进行生搬硬套。既要能够满足通用需求,又要兼顾到特定业务的特点,才能够称为合理设计。

设计阶段的性能关注点

分布式

随着现代软件行业的发展,原有的单体式部署架构已经不能够满足大部分业务场景的使用。跟一根筷子轻轻一折就断,一把筷子就不容易被折断类似,这就是集群思想,结合到分布式至于一把筷子的根数以及可支持扩展的分布式节点数就是需要在设计时需要关注的核心点。

缓存、内存

从计算机各项硬件设备的执行效率来说,磁盘往往会是垫底的,而我们现在所使用的数据库大多又是建立在物理存储(磁盘)之上,这就会导致程序在运行过程中涉及到需要操作数据库的业务时出现瓶颈。可以通过将部分数据存放至缓存、内存中,从而获取更高的效率。但也需要考虑当缓存、内存失效时的数据安全问题,以及使用不当时导致的系统崩溃问题。

任务拆分、并行

这种场景在日常生活中经常遇到,比如我们去超市结账排队较长时,超市增加收银窗口,或是蒸馒头时多用几口锅的道理是一样的。在程序设计时可根据开发语言考虑是否增加多线程、批处理、分布式执行等功能。

异步处理、回调

异步往往适用于在业务过程中涉及到链路等待过程过长,将当前任务状态临时保存,交由其他程序或线程处理,有必要时进行回调处理。比较典型的场景可参考MQ(消息队列)

CDN技术

广泛的采用CDN技术已经成为趋势,大家都知道数据在网络的传输过程中会受到传输距离的影响,CDN技术可以将对应的资源放在离用户比较近的网域中,这样便可以使用户感受到程序速度的提升。

扩展性

在技术不断创新的过程中,系统架构也在不断的趋向完整,在设计系统架构的过程中会采用一系列的设计模式,层出不穷的新名词也标志着程序的扩展性在未来会被不断的提升。关于扩展性相关的内容可参考:模块化、服务化、容器化、无状态、ServerLess。