系统架构设计模块拆分维度和原则

2023-11-04

在我们从零开始做一个新系统的时候,会首先进行系统功能模块架构设计,那么是直接做一个大而全的垂直的MVC系统,使用一个war包进行发布管理,还是需要按一些规则进行模块拆分,设计成SOA或者微服务系统比较好呢?这个笔者认为需要依据项目具有什么样的人力物力条件以及项目需要支撑多少用户量和交易量为基础。一个好的系统设计应该能够满足解决当前的需求和问题,把控实现和进度风险,预测和规划未来,避免过度设计,在上线一个基础核心版本之后,再进行不断迭代和完善。

今天我们来谈一谈进行SOA、微服务系统架构设计时模块拆分的一些维度和原则。

  1.  功能维度

按照系统业务功能进行划分,例如对于电商系统,按功能维度我们可以拆分为商品中心,订单中心,用户中心,购物车,结算等功能模块。

 

  2.  状态维度

对于一个功能模块可以按照不同的业务逻辑状态再进行划分,比如电商的优惠券模块按状态可以划分为创建模块,领券模块,使用模块。这个是从一个业务从开始到结束的不同状态进行的模块拆分。

  3.  读写维度

按照读写不同的压力进行拆分,例如对于商品中心而言,读取商品详情的量会特别大,远远大于写入商品详情的量。这个时候就可以拆分为商品的写服务、读服务。读取服务可以考虑使用redis或者memcache缓存来提高性能,也可以做读写分离,而且可以依据访问需求量增加或者减少读写服务的部署数量。当写入的量太大时,可以考虑做分库分表,有些聚合读取的场景,比如商品详情页可以考虑使用数据异构,将分散的数据聚合到一个存储,从而提升系统的可靠性和性能。

  4.  纵深维度

按照纵深的维度,最底层的是基础服务,最上层的是业务服务,代码结构一般按照MVC三层架构来进行划分。

  5.  AOP维度

根据访问特征,按照AOP进行拆分,比如商品详情页可以分为CDN、页面渲染模块等。而CDN就是一个AOP。

版权声明:本文为博主原创文章,欢迎转载。 https://blog.csdn.net/u011095110/article/details/74772807

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

系统架构设计模块拆分维度和原则 的相关文章

  • 微信、whatsapp 和其他通讯应用程序背后的技术是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我渴望了解不同实时通讯应用程序的架构 他们使用任何通用协议 架构吗 Facebook斥资190亿美元收购的WhatsApp架构 htt
  • Android上如何实现app子组件的模块化结构?

    我的 Android 主应用程序将包含一个主程序 以及一些预安装的模块 然后我想稍后提供不同的模块 最好作为单独的文件 模块如 位置 天气 议程 你将如何实现这一目标 我想将已安装 存在的模块保留在数据库中 因此 有时我必须将模块放入数据库
  • 如何将扩展 PUB-SUB 模式中的发布者和订阅者与 C++ 中 ZeroMQ 中的中介同步?

    Extended PUB SUB topology https i stack imgur com GEgpx png 我在一个有 1 个中介的用例中有多个发布者和多个订阅者 在 ZeroMQ 指南中 我了解了如何使用额外的方法来同步 1
  • 使用JMS临时队列进行同步使用是一个好习惯吗?

    如果我们使用 临时队列 的 JMS 请求 回复机制 该代码是否可扩展 截至目前 我们不知道是否会支持每秒 100 个请求 或者每秒 1000 个请求 下面的代码是我正在考虑实现的代码 它以 同步 方式使用 JMS 关键部分是创建 消费者 以
  • 使用heroku上传文件

    据我所理解heroku http heroku com不允许存储单个 Rails 应用程序的上传文件 在他们的文档中 他们提到文件可以上传到亚马逊S3 http aws amazon com s3 实例 我目前没有 S3 帐户 因此假设我只
  • 什么是自以为是的软件?

    Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 我经常看到人们说某些软件 非常固执己见 或者微软倾向于编写 不固执己见 的框架 这实际上意味着
  • 如何通过WMI确定操作系统平台?

    我试图弄清楚 WMI 中是否有一个位置可以返回可在 所有 版本的 Windows 上工作的操作系统架构 即 32 位或 64 位 当我发现以下内容时 我以为我已经弄清楚了我的Win2k8系统 Win32 OperatingSystem OS
  • 哪种语言(在 JVM 上运行)最适合创建 DSL?

    我们需要创建复杂的固定长度和可变长度字符串 这些字符串可能代表客户资料 订单等 你们建议使用哪种基于 JVM 的编程语言 想法是让最终用户使用此 DSL 创建字符串 所以我正在寻找验证 代码完成等 Groovy http docs code
  • 使用 Google Cloud Functions 实现微服务的 API 网关

    Inputs 例如 我们有一些服务 账户服务 产品服务 支付服务 每项服务都是一个单独的 Google Cloud Function 每个服务都有自己的 HTTP API 例如 账户服务有 https REGION FUNCTIONS PR
  • 如何发出 JMS 同步请求

    我有一个 Web 应用程序 预计将从外部应用程序获取和显示数据 该外部应用程序只能通过消息传递 JMS 访问 因此 如果用户在浏览器上提交请求 则同一 HTTP 请求线程将必须与消息系统 MQ 系列 交互 以便同一请求线程可以显示从消息系统
  • C:epoll和多线程

    我需要创建专门的 HTTP 服务器 为此我计划使用 epoll sycall 但我想利用多个处理器 核心 但我无法提出架构解决方案 ATM我的想法如下 使用自己的epoll描述符创建多个线程 主线程接受连接并将它们分配给线程epoll 但还
  • 泛化和专业化——有什么区别

    我很难真正找到泛化和专业化之间的区别 以及何时使用其中之一 谁能启发我吗 最后还有一个使用 UML 的插图 Animal是一个概括 Dog是专业化 您的超类是一个通用类 但您的子类将是您的超类的专门继承者 当您沿着继承层次结构向下移动时 它
  • 就MVC模式而言,Struts 2中使用的Action是什么?

    在Struts2中 控制器将请求分派给Action Action将其传递给后端逻辑 这可以看作是一个非常大的过程 model 处理请求 JSP代表视图 Struts2中如何定义Action 肯定是not一个看法 是控制器还是模型 Strut
  • WPF 和 WCF 应用程序的用户身份验证/授权的“最佳实践”是什么?

    假设我有一个 NET 富客户端 WPF 应用程序 它将同时部署在 3 个不同的场景中 客户端和服务器代码在单个进程中运行 客户端代码在 Intranet 计算机上运行 并通过 WCF 与运行应用程序 域 基础设施代码的服务器计算机进行通信
  • 策略模式还是命令模式?

    假设我有一个金融交易列表 我需要针对这些交易执行一系列验证规则 一个例子是我有一笔购买产品的交易 但是首先我需要验证交易中的帐户是否有足够的可用资金 产品没有售完等 由于这些规则 交易将是标记为拒绝 并应指定错误代码 当然 我正在考虑用一个
  • Ember.JS - 如何在同一页面中使用多个模型、控制器和视图?

    我主要了解 Ember JS 的基础知识 大多数示例实际上只处理单个控制器和模型以在页面上显示某些内容 我真的很想用 Ember 构建一个完整的 Web 应用程序 所以有人能告诉我如何组织和连接多个控制器 模型和视图到一个页面中吗 例如 如
  • CISC 机器 - 它们不只是将复杂指令转换为 RISC 吗?

    也许我在架构上存在误解 但如果机器有 比如说 乘法指令 该指令是否未转换为更小的指令 或者过于复杂以至于最终与等效的 RISC 指令具有相同的速度 乘法是一个不好的例子 它在两种体系结构中都是一条指令 将上面的 乘法 替换为 CISC 中更
  • Web 应用程序架构 - 需要作业/任务队列吗?

    我目前正在设计一个 Web 应用程序 该应用程序将允许用户安排将针对 HTTP API 代表他们 执行的任务 这些任务可以重复出现 并且可用于调度的最小时间分辨率为一分钟 由于任务的性质 我认为异步执行它们是有意义的 但是 这部分的架构应该
  • JavaFX 中的 MVC 模式与场景生成器

    我是 JavaFX 新手 根据我当前的设置 正在努力创建合适的 MVC 架构 我使用 Scene Builder 单击了一个 UI 并指定了一个 Controller 类 Startup public class Portal extend
  • Google BigQuery 底层架构

    所以我大约 10 分钟前才开始摆弄 Google BigQuery 我想知道是否有人知道他们用来存储数据的底层架构 例如 这只是他们自己的下一代 BigTable 基础设施吗 另外 他们在索引 索引重建等方面使用什么样的策略是否清楚 我只是

随机推荐

  • UI自动化框架设计

    这个框架的话使用了PO分层思想和单用例设计模式然后使用Python selenium进行UI自动化框架设计 框架目录的结构 二 config包当中的config ini文件主要是用来存项目的绝对路径 是为了后续跑用例和生成测试报告做准备 然
  • Chrome浏览器的options参数

    options add argument headless 无头模式 options add argument window size x format width height 直接配置大小和set window size一样 optio
  • Linux:虚拟机配置免密登录和文件同步分发

    记录下 以后照抄就好了 文章目录 ssh免密登录 SCP安全拷贝 rsync同步修改 xsync集群分发 ssh免密登录 免密登录原理 生成公钥和私钥 ssh keygen t rsa后连敲三个回车 将公钥拷贝到要免密登录的目标机器上 遇到
  • 数据结构与算法期末复习总结

    为了方便复习 下面内容摘自 数据结构期末总结 夏日 blog CSDN博客 数据结构期末 目录 绪论 知识点 习题 线性表 知识点 习题 栈和队列 知识点 习题 串 数组和广义表 知识点 树和二叉树 知识点 习题 赫夫曼树及其应用 一步一步
  • R语言学习—添加回归模型拟合线(一)

    回归模型重要的基础或者方法就是回归分析 回归分析是研究一个变量 被解释变量 关于另一个 些 变量 解释变量 的具体依赖关系的计算方法和理论 是建模和分析数据的重要工具 常见的回归分析模型有 线性回归 逻辑回归 多项式回归 逐步回归 线性回归
  • OpenGL-GLSL语言入门教程(1)

    目录 GLSL简介 GLSL的内建变量 顶点着色器变量 gl PointSize gl VertexID 片段着色器变量 gl FragCoord gl FragDepth 参考网站 LearnOpenGL 参考书籍 OpenGL编程指南第
  • IOS 启动画面和图标设置(适配IOS7 and Xcode5)

    关于IOS程序设置启动画面以及图标的设备目前主要为 IPhone设备 和IPad设备 IPhone启动画面以及图标的设置 目前IPhone的分辨率为 320X480 640X960 640X1136 Default png 320X480
  • HTML DOM 利用下拉框实现网页跳转

  • C语言 结构体

    1什么是结构体 结构体是一种集合 它里面包含了多个变量或数组 它们的类型可以相同 也可以不同 每个这样的变量或数组都称为结构体的成员 结构的成员可以是标量 数组 指针 甚至是其他结构体 2结构体的定义 1 定义结构体的一般格式 struct
  • Kotlin入门-没有分号是个有趣的事情

    前言 第一眼看Kotlin的示例代码 突然发现没有分号 这个事情就值得商榷了 看两个范例 范例一 fun sum a Int b Int Int Int 参数 返回值 Int return a b 范例二 fun sum a Int b I
  • Acwing-对称的二叉树

    除了根节点都有一个性质 自己对应的节点是相同的 并且左右儿子 左右和右左分别对称 即根节点的左右两棵子树 每一棵都是左右对称的 Definition for a binary tree node struct TreeNode int va
  • 后台管理系统UI作品

    最近整理完成一个基于layUI的后台管理系统UI 分享交流 有兴趣的留言哈 演示地址 http roywu888 gitee io git
  • html使用ajax实现文件分片上传

    在实用中 经常有上传文件的操作 但是上传的文件有时会很大 所以需要将文件分片 然后一片一片上传到后台 其实前端写法跟普通的文件上传没有区别 只是需要把文件切割一下就好了 下面是一个例子 代码 结果 js部分 获取文件后就开始分片上传 有两个
  • ARIMA时间序列分析——(一)数据平稳性检验

    时间序列 指的是按时间顺序索引的一系列数据点 是面板数据的一种 属于一维面板数据 时间序列分析包括用于分析时间序列数据以及提取有意义的统计数据和数据其他特征的方法 ARIMA模型构建流程 1 判断模型的平稳度 2 差分法对非平稳时间序列进行
  • Java JDK 8的安装与配置

    文章目录 前言 1 安装JDK 8 Step1 选择JDK的版本 Step2 选择系统平台 Step3 下载安装包 Step4 开始安装 2 配置JDK 8 Step1 配置 环境变量path 前言 本教程是在Windows 64位平台上安
  • 解决:adb devices error protocol falut(no status)

    今天用Android Studio运行项目到模拟器时 出现错误提示 远程主机强制关闭了一个连接 用adb devices检查一下设备状态 结果意外发现报错 adb devices error protocol falut no status
  • C语言基础——二维数组、二级指针和数组指针

    目录 二维数组 定义方式 初始化 二维数组的理解 二级指针 数组指针 二维数组 定义方式 lt 数据类型 gt lt 数据名 gt 行号 列号 初始化 int a 3 2 0 所有数组元素均为0 int a 3 2 1 2 3 4 5 6
  • ES6——箭头函数

    1 ES6引入箭头函数的两大优点 使代码更加简洁 从代码中去掉function return和 节省了那些宝贵的键盘输入 改变this的行为特性 在箭头函数内部 this的绑定将不是动态的 而是词法的 在前面的代码中 如果使用箭头函数作为回
  • 关于npm配置国内淘宝镜像出错问题解决

    关于npm配置国内淘宝镜像出错问题解决 今天在学习win10上安装vue环境时 在配置淘宝镜像那一步出错 出错信息如下 C Users gao gt npm install g cnpm registry https registry np
  • 系统架构设计模块拆分维度和原则

    在我们从零开始做一个新系统的时候 会首先进行系统功能模块架构设计 那么是直接做一个大而全的垂直的MVC系统 使用一个war包进行发布管理 还是需要按一些规则进行模块拆分 设计成SOA或者微服务系统比较好呢 这个笔者认为需要依据项目具有什么样