首页 > 其他分享 >mass mess Monolithic system 单体系统的问题

mass mess Monolithic system 单体系统的问题

时间:2023-06-29 17:45:14浏览次数:42  
标签:需要 开发人员 mess 代码 系统 system 功能模块 mass 模块

1. 单体系统太大了

最首要的一个原因就是应用系统太大。而由于应用系统的过于庞大,如果仅是单体系统的话,就引发了各种各样的问题,体现在以下三个方面:

1.1. 系统本身业务复杂,模块众多

系统随着时间的发展,业务需求越来越多。而为了满足这些需求,就导致整个系统的模块越来越多。而系统模块越来越多,就导致能理解整套系统的人变得越来越少,直到最后没有人可以理解整套系统。

1.2. 系统的代码库非常庞大

代码量也会随着系统的增大而增大,代码量的庞大影响了整个开发流程,会导致整个开发成本变得很高。

  • 首先,代码量大,依赖关系复杂,所以对新接手的开发人员来说,配置开发环境非常耗费精力。

  • 其次,代码量大,加载这些代码和对应的依赖需要的内存就多,所以就会导致开发人员的 IDE 运行非常缓慢,导致编辑代码都很麻烦。

  • 再次,代码量大,如果要把整个代码编译打包,需要的内存也很多,所以也会导致功能开发完成后,对系统的构建会非常缓慢,导致整个构建的时间非常漫长。

  • 再有,代码量大,几乎没人能对整体代码有比较深入的了解,哪怕可能其中一个要改动的功能,都会因为过于复杂导致开发人员理解不深入。而这些不深入的理解又会让开发人员不能使用最佳的方式去做功能开发,从而导致隐藏的 bug。

1.3. 技术团队变得非常庞大

由于功能模块越来越多,这就需要越来越多的开发人员去开发和维护这套系统。但是,这些开发人员都是面对的同一套代码库,虽然可以搞分支,大家各搞各的。可是一旦需要合代码,发布上线,就是场噩梦。

各种代码冲突,代码丢失,都可能在上线的时候发生。

不仅如此,由于顾虑代码丢失和冲突,就需要在上线前,进行足量的测试,而这些测试又需要投入巨大的时间成本。

但是,现在都讲敏捷开发,很可能在还没上线的时候,后续的业务需求又接踵而至,简直要命。

2. 业务需求的个性化

搞微服务,还有一个很重要的原因是业务需求的个性化和颗粒化。

随着业务的发展,不管是由于市场竞争还是本身发展的需要,势必需要对本身业务模型的深度挖掘以及提高用户使用系统的各种体验。而基于此类种种,就势必要把系统的各个功能模块做深做透。

这又会引发几个新的问题:

2.1. 系统功能模块可能变得更多更杂

系统功能模块可能被不断拆分成了更细碎的模块,以致可能碎成了颗粒。而由于功能变得更碎更颗粒了,就会让产品经理们更容易的提出一些非常细致的业务需求。

这些非常细致的需求,很可能会造成频繁的功能修改和上线要求。而这些无穷尽的快速需求相对整体庞大的系统上线和开发人员的疲于奔命形成了最激烈的冲突。

2.2. 功能模块对系统的技术要求出现了冲突

比如,不同的功能模块,订单模块和支付模块。订单模块就希望系统能尽可能的能同时处理大量的订单,甚至可以有一定的容错性,出问题了砍单就可以了。

但是支付模块则不一样,支付模块希望系统能尽量的稳定,并且必须对准确度要求极高,几乎没有容错的空间。

同样的,在同样的支付模块中(根据系统模块划分而定),可能同时存在本地账户转账和三方渠道支付,本地账户转账可能需要即时,要求极高的响应时间。但是对于第三方支付,则可以有一定的响应时间容忍度。

如果系统本身是个单体系统,就势必要求开发人员对整套系统做一定的妥协,对冲突的技术需求做出一定的权衡。而这种权衡很可能影响的就是系统整体的体验度。

2.3. 系统模块对服务器的要求出现了冲突

由于功能的深耕细作,则势必会出现性能上的不同需求。

比如,系统的订单模块,个人下单可能会被频频访问,此时,就需要系统的集群多一些,去处理这些大规模的访问。但是,同样的功能模块里,可能还存在一些企业团购需求,他们没有那么大的访问量,就不需要那么多的服务器集群。

又比如,用户评论截图,可能需要大量的数据存储。但是,同样的,针对用户的个性化推荐就可能需要大规模的密集运算。

除了上面说的,系统庞大引发的问题带来的一些附属问题:

2.4. 故障的连锁反应问题

单体系统从技术上,各个模块是耦合在一起的。在实际运行里,很可能就会出现一处故障导致整个系统崩盘的现象。

比如,不常用的一个 XX 功能出现了内存泄露,导致整个系统全部不可用了。

2.5. 系统的技术锁死问题

坦白来说,你得承认在编程里,没有一种语言是完美的,也没有一个数据库是万能的。

比如,Java 做科学计算就没有 Python 那么方便高效。比如,我们需要存储很复杂的对象关系的时候,MySQL、Oracle 就不如任何一种图形数据库。

所以,系统越复杂,需要不同技术的概率就越高。但是又由于系统的复杂,引入新技术的风险也就越大。所以,新技术的使用非常困难。

同时,系统庞大后,如果一些组件,甚至语言 SDK 本身的问题如果需要升级,也是一件既繁琐,又充满风险的事情,所以,技术版本升级也非常困难。

综上,对于传统的单体应用来讲,系统庞大引发的技术问题,业务发展引发的需求冲突问题……都是无法单凭单体系统的架构思想就可以解决的。

标签:需要,开发人员,mess,代码,系统,system,功能模块,mass,模块
From: https://www.cnblogs.com/Leo_wl/p/17514802.html

相关文章

  • ln -s /dev/null /root/etc/systemd/system/snapd.service
    disablesnapdduringdell-recoveryrunIt'snotneeded,thisspeedsuptherebootbetweenstagesandpreventsOOMonlowmemoryconfigsforinstaller. 这段代码用于在安装过程中禁用snapd服务,以避免在资源较小的配置上出现OOM(OutofMemory)问题。以下是代码的解......
  • Android system & system_ext & product等分区中的build.prop文件是怎么生成的?
    Androidsystem&system_ext&product等分区中的build.prop文件是怎么生成的? #http://aospxref.com/android-13.0.0_r3/xref/build/make/core/sysprop.mk #http://aospxref.com/android-13.0.0_r3/xref/build/make/tools/buildinfo.sh buildinfo.sh脚本内容:#!/bin......
  • 关于CIFS-Common Internet File System-通用Internet文件系统
    服务器消息块(SMB)协议是一种网络文件共享协议,在MicrosoftWindows中实现的称为MicrosoftSMB协议。定义特定版本的协议的消息数据包集称为方言。通用Internet文件系统(CIFS)协议是SMB的方言。VMS、Unix的多个版本和其他操作系统上也提供SMB和CIFS。 CIFS是......
  • 关于SMB协议-Server Message Block-服务器信息块
    SMB:ServerMessageBlock,即服务(器)消息块,是IBM公司在80年代中期发明的一种文件共享协议SMB(全称是ServerMessageBlock)是一个网络协议名,它能被用于Web连接和客户端与服务器之间的信息沟通。SMB最初是IBM的贝瑞·费根鲍姆(BarryFeigenbaum)研制的,其目的是将DOS操作系统......
  • C# 避免使用System.Environment.CurrentDirectory
    我有一个程序A(exe)是通过计划任务程序启动,发现通过System.Environment.CurrentDirectory获取的路径不是程序A的运行目录,而是C:\Windows\System32DirectoryInfotopDir=Directory.GetParent(System.Environment.CurrentDirectory);是因为System.Environment.CurrentDirectory......
  • chrome.runtime.onMessage.addListener sendResponse
    Ifmultiplepagesarelisteningfor onMessage events,onlythefirsttocall sendResponse() foraparticulareventwillsucceedinsendingtheresponse.Allotherresponsestothateventwillbeignored.如果多个页面正在监听onMessage事件,则只有第一个为特定......
  • Online Temporal Calibration for Monocular Visual-Inertial Systems
    摘要:准确的状态估计是各种智能应用的基本模块,例如机器人导航、自动驾驶、虚拟和增强现实。近年来,视觉和惯性融合是一种流行的技术,用于6自由度状态估计。不同传感器测量记录的时间点对于系统的鲁棒性和准确性非常重要。实际上,每个传感器的时间戳通常会受到触发和传输延迟的影响,导......
  • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Secureboot
    regaddHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Secureboot/vAvailableUpdates/tREG_DWORD/d0x10/f命令是用于在注册表中添加一个名为"AvailableUpdates"的DWORD值,并将其设置为十六进制值"0x10"。此操作需要管理员权限才能执行。这个命令的作用是向......
  • 什么是 SAP UI5 应用运行时加载的 messagebundle_en.properties 文件?
    在SAPUI5应用程序中,messagebundle_en.properties文件是一个资源文件,用于存储应用程序的多语言文本和消息。这些消息通常包括用户界面中显示的标签、按钮文字、提示信息、错误消息等。使用资源文件的优势在于它可以轻松地使应用程序支持多种语言,同时保持代码的整洁和可维护性。......
  • system halt during installation with NV graphics card.
    Icheck,itseemsitisstuckat"GETubiquity/install_oem".Canyoucheck/var/cache/debconf/config.dat,iftheubiquity/install_oemvalueisTrue.itisin/usr/share/ubiquity/simple-pluginsscript,itsetthedbtotrueandgetitdirectlyin......