- 性能之道:分布式系统全栈性能优化
- 于君泽 曹洪伟 李伟山 秦金卫 陈龙泉
- 1184字
- 2025-02-21 17:02:49
1.4 软件架构的常用技术栈
如果缺乏良好的技术储备,那么就很难设计出良好的软件架构。而当前新技术层出不穷,若想涉足每个技术领域,则几乎是不可能的事情。怎么办?我们可以尝试从时空视角对软件架构中的常用技术栈进行分类。架构设计的常用技术栈如图1-2所示。

图1-2 架构设计的常用技术栈
图1-2左侧所示的是空间维度的相关技术。
• 操作系统:确定了软件架构的环境边界。
• 数据存储:因为数据是软件的核心,所以我们必须了解文件系统、对象存储、关系型数据库以及NoSQL数据库等与数据存储相关的技术。
• 网络通信:这是一个覆盖更广泛的概念,至少要掌握7层协议模型和一些主流的通信协议,如DNS、TCP/IP、HTTP,以及不同网络协议对网络编程的影响。
• 框架与库:与采用的编程语言密切相关,不同的语言有不同的框架与库,可选项众多,需要从面向领域和场景的角度进行选择。
• 安全:这里就不展开介绍了。
• 微服务:这是一种架构方法,这里仅将微服务架构作为典型代表进行介绍。服务的划分与业务紧密相关,服务独立后需要考虑服务的发现和服务间的通信,最后是服务治理。
• 云服务:云服务的出现使得小团队也能完成大事情,这里的云服务指的是基础设施即服务(XaaS)。
• 大数据/AI:这必将成为工程师团队的重要战力,涉及专业知识、数学算法和计算环境。大数据的相关技术也是人工智能赋能软件的基础。
图1-2右侧所示的是时间维度的相关技术,主要包括运行架构(尤其是与性能相关的)的技术,以及决策流程所涉技术和方法(尤其是与研发效率相关的)。
• 开发环境:工具对工作的重要性不言而喻,开发环境在工程效率中占据首要地位,也是开发架构中的重要组成部分。
• 编程语言:不同的编程语言适用于不同的场景。一般来说,编程语言并没有优劣之分,不同的编程语言各有所长。
• 敏捷开发:每个人都不是“单打独斗”的,掌握协同工具以及支持CI/CD的工具链或者平台,可以使团队更加敏捷并提高整体的研发效率。此外,敏捷开发并不是以牺牲软件质量为代价的。
• DevOps:开发架构中的一种组织方式。
• 业务与代码:业务是软件提供的能力,代码是软件的实现载体,都是软件不可或缺的要素。
• 运行时调优:在运行架构中,性能是诸多非功能性约束中的首要因素,直接影响用户的体验。首先,要从业务和代码层面确保性能,而单元测试是必要的条件。在运行时进行调优,或者说是单机性能优化时,通常从加载和依赖开始,包括代码优化和虚拟机优化,如Java语言的VM调优、Linux内核参数调优。
• 数据访问:数据库往往是整个系统的性能瓶颈,数据访问必须具备高可用性,选择和使用数据连接池是必备条件。
• 缓存:该技术是降低负载、提高系统性能的必备技术,可以在客户端、网络侧和服务端3个环节应用缓存技术。
• 均衡:指的是负载均衡,这同样是一种以空间换时间的技术。
• 消息队列:可以通过消息队列来提升传输性能。
那么,为什么系统性能在诸多非功能性约束中排在第一位呢?下一章将对系统性能展开进一步讨论。