单体架构的应用比较容易部署、测试, 在项目的初期,单体应用可以很好地运行。然而,随着需求的不断增加, 越来越多的人加入开发团队,代码库也在飞速地膨胀。慢慢地,单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,维护成本越来越高。下面是单体架构应用的一些缺点:
复杂性高: 以一个百万行级别的单体应用为例,整个项目包含的模块非常多、模块的边界模糊、 依赖关系不清晰、 代码质量参差不齐、 混乱地堆砌在一起。可想而知整个项目非常复杂。 每次修改代码都心惊胆战, 甚至添加一个简单的功能, 或者修改一个Bug都会带来隐含的缺陷。
技术债务: 随着时间推移、需求变更和人员更迭,会逐渐形成应用程序的技术债务, 并且越积 越多。“ 不坏不修”, 这在软件开发中非常常见, 在单体应用中这种思想更甚。 已使用的系统设计或代码难以被修改,因为应用程序中的其他模块可能会以意料之外的方式使用它。
部署频率低: 随着代码的增多,构建和部署的时间也会增加。而在单体应用中, 每次功能的变更或缺陷的修复都会导致需要重新部署整个应用。全量部署的方式耗时长、 影响范围大、 风险高, 这使得单体应用项目上线部署的频率较低。 而部署频率低又导致两次发布之间会有大量的功能变更和缺陷修复,出错率比较高。
可靠性差: 某个应用Bug,例如死循环、内存溢出等, 可能会导致整个应用的崩溃。
扩展能力受限: 单体应用只能作为一个整体进行扩展,无法根据业务模块的需要进行伸缩。例如,应用中有的模块是计算密集型的,它需要强劲的CPU; 有的模块则是IO密集型的,需要更大的内存。 由于这些模块部署在一起,不得不在硬件的选择上做出妥协。
阻碍技术创新: 单体应用往往使用统一的技术平台或方案解决所有的问题, 团队中的每个成员 都必须使用相同的开发语言和框架,要想引入新框架或新技术平台会非常困难。
二、分布式应用
中级架构,分布式应用,中间层分布式+数据库分布式,是单体架构的并发扩展,将一个大的系统划分为多个业务模块,业务模块分别部署在不同的服务器上,各个业务模块之间通过接口进行数据交互。数据库也大量采用分布式数据库,如redis、ES、solor等。通过LVS/Nginx代理应用,将用户请求均衡的负载到不同的服务器上。其架构图如下所示:
当下,无论是上天揽月的“嫦娥五号”,飞往火星的“天问一号”,还是下万米深海潜航的“蛟龙号”,或是抗击疫情中利用AI进行CT影像识别,几乎任何一项伟大的科学成就与工业创新,都离不开高性能计算机的强力支撑。
比如为保证嫦娥五号能顺利从月球取回土壤,在发射之前,需要对发射的整个过程进行模拟,包括轨道修正、近月制动、组合体分离、月面着陆、月面采样、月面上升、交会对接与样品转移、环月等待与月地转移、轨道器和返回器分离、着陆地球等,这一过程需要利用高性能计算机进行大量的仿真分析,以论证方案的可行性。除发射前的模拟测试,在发射后的飞行控制过程中,还需要实时采集大量的飞控数据进行实时处理分析,以更好地判断相关设备的运行状态,及时做好飞控调整。
这就是为什么领先的科技与工业大国宁愿投入巨资,也要在全球超级计算机产业中占据一席之地的原因所在。超级计算机不仅是一个国家综合科技实力的象征,也是工业创新、国防建设、科学研究、石油勘探等重要经济行业的发展基础和动力之源。

(编辑:淮南站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|