软件架构(四)单体架构(Monolithic Architecture)
系列目录
软件架构(四)单体架构(Monolithic Architecture)
一、软件发展趋势
- 模块化(Modular)
例如,JAVA中默认级别意味着类只在其package中可见,而public意味着类在其package内外都可见。一直到JDK9,模块化直接作为重大特性发布。其实就是将JDK中类,模块化拆分。
- 组件化(Componentized)
组件是另一种模块化风格。组件是按照业务领域划分的模块。理想情况下,它们是可以组成应用的独立的“应用程序”。微服务可以理解为应用的组件。
组件化,也是早在 20 世纪 60 年代末就已经存在了。
二、现代单体架构
2.1 单体架构介绍
相信大部分程序员接触的第一个程序都是:一个工程中,一个文件,打印 "Hello World ! "。当初的喜悦仿若还在身边。实际上这就是一个单体架构。
如今,单体架构意味着代码被部署并作为单个节点上的单个进程运行。有可能进行初步的模块化拆分(类级别),但由于整个工程一起打包部署,所以还是一个组件。如下图所示:

2.2 单体架构缺点
- 领域组件无法独立可伸缩:例如订单模块访问频率最高无法做到单独给订单模块独立水平拓展。
- 不同的领域组件,适合用不同编程语言实现时,无法拆开组件实现;
- 各组件无法做到单独发版,只能一起发布。拖慢研发节奏。
Anti-pattern: 大泥球(Big Ball of Mud)/ 意大利面(Spaghetti)架构
单体架构可能会演变成“大泥球”,又名意大利面条架构。其中包的结构和关系不显式,结构内聚和封装程序低,依赖不遵循规则,很难进行更改和重构。系统是不透明的,粘性的,脆弱的和僵硬的,就像一个大的泥球!
2.3 解决方案
将单体架构按照面向服务的架构风格拆分成不同的应用程序。即服务拆分,微服务化。国内15年开始火,一直延续至今。但很多传统企业内部仍存在很多单体架构服务,这无所谓好坏,只有合适否。有时候,能很好的支撑运行就够了,毕竟改造是需要成本的。
==========参考=============
2017 – hgraca – Monolithic Architecture
2017* – Wikipedia – Modular programming
2017* – Wikipedia – Component-based software engineering
软件架构(四)单体架构(Monolithic Architecture)的更多相关文章
- 软件架构的演进,了解单体架构,垂直架构,SOA架构和微服务架构的变化历程
软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程,博客里写到了这四种架它们的特点以及优缺点分析,个人学习之用,仅供参考! 1.1.1 单体架构 特点: 1 ...
- 事件驱动架构 (Event-Driven Architecture,EDA) 简介
EDA 是一种侧重于以生成/消费为基础的异步通信的架构模式.这主要对照于传统的基于线程的同步系统. EDA 是一种以事件 (event)为核心,提供事件产生,路由,消费已经结果回调等机制的架构模式. ...
- 学习一下 SpringCloud (一)-- 从单体架构到微服务架构、代码拆分(maven 聚合)
一.架构演变 1.系统架构.集群.分布式系统 简单理解 (1)什么是系统架构? [什么是系统架构?] 系统架构 描述了 在应用程序内部,如何根据 业务.技术.灵活性.可扩展性.可维护性 等因素,将系统 ...
- JHipster生成单体架构的应用示例
本文演示如何用JHipster生成一个单体架构风格的应用. 环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里) 应用名:app1 实体名:role 主机IP:192.168.2 ...
- 大型网站技术架构(四)--核心架构要素 开启mac上印象笔记的代码块 大型网站技术架构(三)--架构模式 JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)
大型网站技术架构(四)--核心架构要素 作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载.此篇已收录至<大型网站技 ...
- 微内核架构(Microkernel Architecture)
微内核架构(Microkernel Architecture) 微内核架构有时也被成为插件架构模式(plug-in architecture pattern),通常用于实现基于产品的应用,如Eclip ...
- 持续提升程序员幸福指数——使用abp vnext设计一款面向微服务的单体架构
可能你会面临这样一种情况,在架构设计之前,你对业务不甚了解,需求给到的也模棱两可,这个时候你既无法明确到底是要使用单体架构还是使用微服务架构,如果使用单体,后续业务扩展可能带来大量修改,如果使用微服务 ...
- 编译器架构Compiler Architecture(下)
编译器架构Compiler Architecture(下) Combining Scanning and Parsing 实际上没有必要将扫描(词法分析/标记化)与解析(语法分析/树生成)分开.基于P ...
- 编译器架构Compiler Architecture(上)
编译器架构Compiler Architecture(上) 编译器是程序,通常是非常大的程序.它们几乎都有一个基于翻译分析综合模型的结构. CONTENTS Overview • Compiler C ...
- 有状态 无状态 stateful stateless monolithic architecture microservice architecture 单体架构
为什么游戏公司的server不愿意微服务化? - 知乎 https://www.zhihu.com/question/359630395 我大概说了,方便测试,方便维护,方便升级,服务之间松耦合,可多 ...
随机推荐
- c++ container容器(string,vector,map,queue,stack等等)
STL和c++标准库 标准模板库STL部分包含在C++标准库中的软件库. c++标准库:即以std::开头,但是部分编译器厂商也会把STL的内容放在std:: namespace里面 由于一个常见的误 ...
- 利用Mybatis拦截器实现自定义的ID自增器
原生的Mybatis框架是没有ID自增器,但例如国产的Mybatis Plus却是支持,不过,Mybatis Plus却是缺少了自定属性的填充:例如:我们需要自定义填充一些属性,updateDate. ...
- 【学习日志】Java基本数据类型的自动装箱和拆箱
// 测试代码 public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Intege ...
- 解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题
解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题 LLM(Large Language Model)通常拥有大量的先验知识,使得其在许多自然语言处理任务上都有着不错的性能 ...
- Python xlwt数据保存到 Excel中以及xlrd读取excel文件画图
1.方法一:xlwt 1.1 安装包 pip install xlwt 1.2 保存数据到 Excel import xlwt import numpy as np import random # 新 ...
- socket编程 [补档-2023-07-10]
Linux网络编程 1.socket编程 socket是一种通信机制,用于在网络中不同计算机之间进行数据传输,当然也可用用于进程间通信.在linux中,有文件描述符这么个东西,我们可以通过socket ...
- 基于.NET实现Matlab备用方案
基于.NET实现Matlab备用方案 今日圈内的朋友都在刷这样的消息: 正值哈工大百年校庆之际,哈工大.哈工程的师生收到了MATLAB软件停止服务的邮件,在与 MATLAB 开发公司 MathWork ...
- Advanced Installer添加快捷方式和卸载功能
依次点击左侧"资源 "中的"文件和文件夹"选中"应用程序快捷方式文件夹 ",在右侧空白处右键-新建快捷方式 在弹出的对话框中,选择需要创建快 ...
- 自然语言开发AI应用,利用云雀大模型打造自己的专属AI机器人
如今,大模型层出不穷,这为自然语言处理.计算机视觉.语音识别和其他领域的人工智能任务带来了重大的突破和进展.大模型通常指那些参数量庞大.层数深.拥有巨大的计算能力和数据训练集的模型. 但不能不承认的是 ...
- 1.变量和简单的数据类型--《Python编程:从入门到实践》
1.1 变量 在Python中使用变量时,需要遵守一些规则和指南. 变量名只能包含字母.数字和下划线.变量名可以字母或下划线打头,但不能以数字打 头. 变量名不能包含空格,但可使用下划线来分隔其中的单 ...