10-03 单元化架构设计

news2024/9/20 16:34:54

设计原则

透明

  • 对开发者透明
    在做实现时,不依赖于单元划分和部署
  • 对组件透明
    在组件运行时,不感知其承载单元
  • 对数据透明
    数据库并不知道为哪个单元提供服务

业务可分片

  • 系统业务复杂度足够高
  • 系统可以按照某一维度进行切分
  • 系统数据必须可以被区分

业务自包含

  • 同一业务功能必须在单元内完成
  • 同一业务操作所需数据也在该功能单元内
  • 尽量避免跨单元依赖

单元化设计三要素

在这里插入图片描述

系统切分

业务切分

  • DDD切分领域服务、数据和业务流程
    • 切分出的服务和数据属于同一单元
    • 出现交集(重叠)时,以单元间访问量做决策指标
  • 业务流程所需组件和数据划分在同一单元
    • 一个业务流程在同单元执行,保证性能和稳定性
    • 尽量避免跨单元的服务访问和数据库读写
    • 同单元高内聚,单元间低耦合
  • 与组织架构和核心业务流程强相关
    • 核心业务保证高可用,高增长必须单元化部署
    • 边缘业务跟随核心业务数据分配单元
  • 功能粒度要适当
    • 粗粒度单元,轻易超过单元资源承载上限,需要二次拆分
    • 细粒度单元,单元内资源浪费,性价比低
  • 开发团队随单元化架构调整
  • 整个过程要持续迭代

按用户属性切分

  • 用户属性对系统核心功能有决定性作用
    • 外卖、叫车、共享等业务严重依赖于用户的地域属性
    • VIP用户、大买家等不同类型的用户
  • 新建用户按规则自动分配单元,存量数据按规则做数据迁移
    • 相同属性的数据聚集在同一单元
    • 一个单元内完成系统所有核心业务,单元内不再按功能拆分
  • 数据ID规则
    • 不同单元同时生产数据,且数据有同步需求,ID必须保证跨单元不重复
    • 由ID可以按规则推算所属单元
  • 用户属性划分导致单元规模层次不齐
    • 过于庞大的单元,二次拆分
    • 合并多个小单元为一个常规单元
  • 当用户属性改变时、系统自动同步数据
    • 该类属性是低频变化
    • 系统同步速度高于属性变化速度

按数据切分

  • 按照数据某种属性进行单元划分
    • 无业务含义,不可更改,不重复,一般选ID或者时间戳
    • 水平扩展上限高
    • 账户、订单、流水、商户、商品等比较易于切分
    • 通过规则推算所属单元
  • 设计规则是数据均分
    单元分配的数据比例等于其整体流量比例
  • 无业务依赖,跨单元访问不可控
    引入中间件实现开发者透明
  • 无法切分的数据,高频访问,创建特殊附属单元
    • 该单元必须与切分单元在同一数据中心、机房,以降低访问延时
    • 任意切分单元对附属单元的写入都会同步到其他附属单元
    • 大部分系统都是写少读多,写复制的成本远低于高频读操作
    • 数据实时性要求高的系统可能会失败
  • 无法切分的数据,低频访问,系统共享同一单元
    • 低频读写,时延不影响主业务,代价可接收
    • 根据数据中心距离,选择与所有数据中心都相对最近的数据中心作为共享单元的部署地
  • 单元内部垂直切分
    单元瓶颈优秀考虑内部垂直切分
  • 综合库
    创建单独的综合库,同步汇总所有单元的数据,供非实时业务使用

单元组成的元素

  • 组件
    • 服务,业务逻辑
    • 不直接被单元外访问
    • 独立构建、发布
  • 数据
    仅限该单元数据
  • 中间件
    • 内部通信
    • 与单元路由有关的中间件
  • 反向代理
    • 单元内服务的反向代理服务器,供外部访问
    • 单元选择功能的路由器
    • 安全和控制策略的中心
  • 网关
    • 单元内访问外部服务的代理服务器
    • 单元选择功能的代理服务器

单元路由

外网访问

  • 为不同数据中心的不同单元分配不同域名
    • 建立全局路由规则服务
    • 或客户端登录后本地计算所属单元(或数据中心)
    • 客户端直接访问所属单元
  • 未改造客户端、匿名用户等
    • 利用公有云就近提供服务
    • 由业务服务设置Cookie标志指定所属单元
  • tag、Cookie或URL参数指定要访问单元
    公有云或CDN提供次服务

单元网关

  • 单元网关也是该单元的反向代理服务器
  • 单元网关根据规则计算请求所属单元
    • 属于当前单元,直接路由请求到正确的组件(服务)
    • 属于其他单元,转发到对应的正确单元并上报路由错误信息
    • 无法判定,根据路由规则发送给组件,由业务逻辑进一步分辨

应用层

  • 统一封装的开发框架处理请求,在拦截器或者过滤器层对开发者透明
    • 根据请求计算所属单元,属于本单元则继续处理
    • 不属于本单元则转发
    • 无法判定就交予业务逻辑层或数据库访问层来决定
  • 业务层
    • 普通对单元无感知的业务,按原有逻辑直接处理
    • 依赖于单元信息的业务,可以自行计算或从容器注入单元信息

中间件

  • 远程调用框架要透明化支持自动单元路由
    • RPC
    • HttpClient
    • 根据请求计算出正确的目标单元并自动路由
  • 数据访问层
    • 最后防线
    • 通过数据访问的驱动程序或框架改造,使其对开发者透明
    • 如果有误,将错误的访问路由到正确的数据库(或表)

数据复制

  • 单元化的数据为本单元组件服务
    • 依赖决定是否需要复制数据
    • 单元间互相复制
    • 通过数据中台复制
  • 根据业务场景选择
    • 强一致、最终一致
    • 最大数据延迟
    • 读写失败对业务的影响
  • 关系型数据库复制
    MySQL、Oracle
  • NoSQL数据库复制
    MongoDB、Redis
  • 消息中间件复制
    Kafka,RabbitMQ

实例

电商

在这里插入图片描述

外卖

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/536567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络】交换机基本原理与配置

目录 🍁交换机工作原理 🍁交换机接口的双工模式 🍁交换机命令行模式 🍁交换机常见命令 🧧帮助命令 🧧常用命令介绍 🍁交换机的基本配置 🧧配置接口的双工模式及速率 🦐博…

knife4j生产环境资源屏蔽

问题描述 knife4j是目前比较主流的自动API文档生成工具,在生产环境使用的过程中,我们一般会屏蔽或者去除Swagger的文档口径,防止接口信息泄露,保证系统安全。 但是最近在开发过程中使用knife4j-spring-boot-starter 3.0.2过程中&…

dolphinscheduler使用impala shell执行sql

目录 一、背景 二、方法 1.impala shell -f 文件名 2.impala shell -q sql 一、背景 因为dolphinscheduler工具sql组件不支持impala数据源,只能折衷方法通过shell来执行impala sql。 二、方法 1.impala shell -f 文件名 操作步骤: 1).【资源中心】…

受邀参加【第七届】中国客户服务节

在AI浪潮的推动下,客户服务“智能化”是企业高质量发展的重要途径之一,目前人工智能、大数据、云计算等技术已广泛应用于全行业的客户服务场景中,一个全面、完善、稳定的智能通讯服务平台可助力实现企业智能化应用转型和升级。 讯鸿网络作为国…

嘉立创EDA原理图封装画错了怎么办

摘要:本文以贴片电阻封装由1206修改为0805为例,介绍一下封装修改的一种方法。 1.问题描述 设计原理图的时候,误将封装设计成为1206了,现在想把它改为0805封装。 2.修改封装的步骤 首先在原理图中,修改对应的电阻器件…

Flutter 3.10 适配之单例 Window 弃用,一起来了解 View.of 和 PlatformDispatcher

Flutter 3.10 发布之后,大家可能注意到,在它的 release note 里提了一句: Window singleton 相关将被弃用,并且这个改动是为了支持未来多窗口的相关实现。 所以这是一个为了支持多窗口的相关改进,多窗口更多是在 PC 场…

统计学习方法:序贯概率比检验SPRT

Sequential Probability Ratio Test 应用:制造过程中的质量控制和医学试验中的异常检测 1.theory/principal 区别(vs固定样本检验):在固定样本检验中,一定数量的观察结果被用来从两个或多个备选方案中选择一个假设。而SPRT则是一次检查一个…

AI“应用商店”来了!OpenAI首批70个ChatGPT Plugin最全梳理

OpenAI放出大招,本周将向所有ChatGPT Plus用户开放联网功能和众多插件本周将向所有ChatGPT Plus用户开放联网功能和众多插件,允许ChatGPT访问互联网并使用70个第三方插件。 本批第三方插件能够全方位覆盖衣食住行、社交、工作以及学习等日常所需&#x…

Electron自定义窗口

Electron标题栏隐藏和自定义 Electron应用自定义标题栏样式 标题栏样式允许隐藏浏览器窗口的大部分色彩,同时保持系统原生窗口控件完整无损,并可以在 BrowserWindow 的构造器中使用 titleBarStyle 选项来配置。 应用 hidden 标题栏样式的结果是隐藏标…

无线充+台灯专用PD诱骗芯片LDR6328S

近几年,日常生活中到处可以看到消费者使用支持Type-c接口的电子产品,如手机,笔记本,筋膜枪,蓝牙音箱等等。例如,像筋膜枪,蓝牙音箱,无人机,小风扇。 无线充台灯方案&…

librosa语音信号处理

librosa是一个非常强大的python语音信号处理的第三方库,本文参考的是librosa的官方文档,本文主要总结了一些重要,对我来说非常常用的功能。学会librosa后再也不用python去实现那些复杂的算法了,只需要一句语句就能轻松实现。 先总…

数字化时代,初创公司如何建设业财一体化

业财一体的关键是构建“业务活动跟财务活动之间的线上化链接”,财务可以通过线上支撑业务,业务活动数据可以通过线上高时效触达财务;从业务数据到财务数据,除了需要运营系统的支撑还需要会计引擎的实现,会计引擎将业务…

优秀的开发者,如何借助免费低代码平台实现数据采集?

采集和管理数据, 从未如此简单自然 一款免费的零代码产品‘敲敲云’,可以帮助每个人轻松创建表单,自由收集问卷样本、活动参与者名单、客户数据,原本几天的工作在 1 个小时内轻松搞定。 表单编辑器,让你和数据专家一样…

分享5款高效率软件,免费无广告

人类与99%的动物之间最大差别在于是否会运用工具,借助好的工具,能提升几倍的工作效率。 1.多设备键鼠共享——Synergy Synergy让你可以轻松地在办公桌上多台计算机之间共享你的鼠标和键盘。你只要将鼠标(指针)从一台计算机的屏幕…

用小程序技术服务数字城市

“十四五”规划大纲明确指出,要迎接数字时代,激活数据要素潜力,加快建设网络强国,加快建设数字经济、数码社会和数码政府,以数字化转型为变革的方式改变生产方式、生活方式和治理。 数字城市的技术内涵 数字城市的发…

轨道交通信号安全完整性等级(SIL)

轨道交通行业中,对于信号系统、车辆子系统等安全相关的系统有安全完整性(SIL)等级的要求,需要进行通用产品层安全评估和工程特定应用项目安全评估,已经形成了行业共识。对于初次了解SIL的人,在实际应用中存…

一文告诉你:为什么小程序更安全

随着数字时代的到来,数据不再是普通的符号和徽标,也不仅仅是普通的计算和统计工具。而安全问题也已经成为了一个非常重要的议题。今天就来探讨下小程序的安全架构,以了解小程序如何做到安全保障。 小程序的安全架构 先说说小程序自身的安全架…

【C++】YY带你手把手掌握C++系列 (P2)未完结

前言 大家好,这里是YY的带你手把手掌握C系列。大部分知识点都含有【特性介绍】【使用场景】【注意要点】【易混淆点】【代码演示】【画图演示】由于C体系之庞大,所以该系列以分P形式更新!本篇博客为P2! 大家可以通过本篇博客查找C…

【jmeter】同一线程组下多个请求分别执行不同次数

今天介绍下JMeter如何控制请求执行次数 主要有两种方式: 方式一:通过循环控制器控制每个请求的执行次数 例如:脚本执行规律是这样的,login-->customerPage-->search 我想执行一遍login,然后运行3遍customerP…

智能的本质人工智能与机器人领域的64个大问题阅读笔记(3)

目录 哥德尔不完备定理是什么? 文件重命名的快捷键 第一个质疑这类言论的哲学家是休伯特德雷福斯 (HubertDreyfus),他在《Alchemy and Artifcial Intelligence》(1965)一书中写道:“人工智能的长足发展......必须有待于全新计算机的问世。现有的计算机…