系列目录

软件架构(一)概览

软件架构(二)编程语言的历史

软件架构(三)名词解释:架构、设计、风格、模式

软件架构(四)单体架构(Monolithic Architecture)

软件架构(五)分层架构

软件架构(六)MVC架构历史

一、软件发展趋势

  • 模块化(Modular)
模块化编程是在20世纪60年代末和70年代提出的解决方案。它是从类到更粗粒度的代码单元显式定义的演变。编程语言以不同的显式等级实现模块化。
例如,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

1997 – Brian Foote, Joseph Yoder – Big Ball of Mud

2017* – Wikipedia – Modular programming

2017* – Wikipedia – Component-based software engineering

 

软件架构(四)单体架构(Monolithic Architecture)的更多相关文章

  1. 软件架构的演进,了解单体架构,垂直架构,SOA架构和微服务架构的变化历程

    软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程,博客里写到了这四种架它们的特点以及优缺点分析,个人学习之用,仅供参考! 1.1.1      单体架构 特点: 1 ...

  2. 事件驱动架构 (Event-Driven Architecture,EDA) 简介

    EDA 是一种侧重于以生成/消费为基础的异步通信的架构模式.这主要对照于传统的基于线程的同步系统. EDA 是一种以事件 (event)为核心,提供事件产生,路由,消费已经结果回调等机制的架构模式. ...

  3. 学习一下 SpringCloud (一)-- 从单体架构到微服务架构、代码拆分(maven 聚合)

    一.架构演变 1.系统架构.集群.分布式系统 简单理解 (1)什么是系统架构? [什么是系统架构?] 系统架构 描述了 在应用程序内部,如何根据 业务.技术.灵活性.可扩展性.可维护性 等因素,将系统 ...

  4. JHipster生成单体架构的应用示例

    本文演示如何用JHipster生成一个单体架构风格的应用. 环境需求:安装好JHipster开发环境的CentOS 7.4(参考这里) 应用名:app1 实体名:role 主机IP:192.168.2 ...

  5. 大型网站技术架构(四)--核心架构要素 开启mac上印象笔记的代码块 大型网站技术架构(三)--架构模式 JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)

    大型网站技术架构(四)--核心架构要素   作者:13GitHub:https://github.com/ZHENFENG13版权声明:本文为原创文章,未经允许不得转载.此篇已收录至<大型网站技 ...

  6. 微内核架构(Microkernel Architecture)

    微内核架构(Microkernel Architecture) 微内核架构有时也被成为插件架构模式(plug-in architecture pattern),通常用于实现基于产品的应用,如Eclip ...

  7. 持续提升程序员幸福指数——使用abp vnext设计一款面向微服务的单体架构

    可能你会面临这样一种情况,在架构设计之前,你对业务不甚了解,需求给到的也模棱两可,这个时候你既无法明确到底是要使用单体架构还是使用微服务架构,如果使用单体,后续业务扩展可能带来大量修改,如果使用微服务 ...

  8. 编译器架构Compiler Architecture(下)

    编译器架构Compiler Architecture(下) Combining Scanning and Parsing 实际上没有必要将扫描(词法分析/标记化)与解析(语法分析/树生成)分开.基于P ...

  9. 编译器架构Compiler Architecture(上)

    编译器架构Compiler Architecture(上) 编译器是程序,通常是非常大的程序.它们几乎都有一个基于翻译分析综合模型的结构. CONTENTS Overview • Compiler C ...

  10. 有状态 无状态 stateful stateless monolithic architecture microservice architecture 单体架构

    为什么游戏公司的server不愿意微服务化? - 知乎 https://www.zhihu.com/question/359630395 我大概说了,方便测试,方便维护,方便升级,服务之间松耦合,可多 ...

随机推荐

  1. c++ container容器(string,vector,map,queue,stack等等)

    STL和c++标准库 标准模板库STL部分包含在C++标准库中的软件库. c++标准库:即以std::开头,但是部分编译器厂商也会把STL的内容放在std:: namespace里面 由于一个常见的误 ...

  2. 利用Mybatis拦截器实现自定义的ID自增器

    原生的Mybatis框架是没有ID自增器,但例如国产的Mybatis Plus却是支持,不过,Mybatis Plus却是缺少了自定属性的填充:例如:我们需要自定义填充一些属性,updateDate. ...

  3. 【学习日志】Java基本数据类型的自动装箱和拆箱

    // 测试代码 public static void main(String[] args) { Integer a = 1; Integer b = 2; Integer c = 3; Intege ...

  4. 解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题

    解锁ChatGLM-6B的潜力:优化大语言模型训练,突破任务困难与答案解析难题 LLM(Large Language Model)通常拥有大量的先验知识,使得其在许多自然语言处理任务上都有着不错的性能 ...

  5. Python xlwt数据保存到 Excel中以及xlrd读取excel文件画图

    1.方法一:xlwt 1.1 安装包 pip install xlwt 1.2 保存数据到 Excel import xlwt import numpy as np import random # 新 ...

  6. socket编程 [补档-2023-07-10]

    Linux网络编程 1.socket编程 socket是一种通信机制,用于在网络中不同计算机之间进行数据传输,当然也可用用于进程间通信.在linux中,有文件描述符这么个东西,我们可以通过socket ...

  7. 基于.NET实现Matlab备用方案

    基于.NET实现Matlab备用方案 今日圈内的朋友都在刷这样的消息: 正值哈工大百年校庆之际,哈工大.哈工程的师生收到了MATLAB软件停止服务的邮件,在与 MATLAB 开发公司 MathWork ...

  8. Advanced Installer添加快捷方式和卸载功能

    依次点击左侧"资源 "中的"文件和文件夹"选中"应用程序快捷方式文件夹 ",在右侧空白处右键-新建快捷方式 在弹出的对话框中,选择需要创建快 ...

  9. 自然语言开发AI应用,利用云雀大模型打造自己的专属AI机器人

    如今,大模型层出不穷,这为自然语言处理.计算机视觉.语音识别和其他领域的人工智能任务带来了重大的突破和进展.大模型通常指那些参数量庞大.层数深.拥有巨大的计算能力和数据训练集的模型. 但不能不承认的是 ...

  10. 1.变量和简单的数据类型--《Python编程:从入门到实践》

    1.1 变量 在Python中使用变量时,需要遵守一些规则和指南. 变量名只能包含字母.数字和下划线.变量名可以字母或下划线打头,但不能以数字打 头. 变量名不能包含空格,但可使用下划线来分隔其中的单 ...