浅谈架构实战

目录

背景

1 架构演变

2 如何实现高层的复用

2 中台产生案例

3 技术架构的核心要点

4 技术架构的高可用案例


背景

      业务架构、数据架构、应用架构和技术架构它们是相互关联和相互支持的,共同构成了企业的总体架构,业务架构是源头,然后才是其他架构。在软件工程中,产品经理定义了系统的外观,满足了用户,业务架构师在此基础上,进一步定义了系统的内部模块结构,满足了开发人员。架构目标实现业务的可复用和扩展,本文主要讲解了架构的演变历史和实战

1 架构演变

  • 架构图

       

  • 各个阶段的架构图
    名称架构图备注
    单体单体:表示层,业务层,数据访问层,DB层
    分布式通过网络连接的多个组件,通过交换信息协作而形成的系统
    传统 SOA

    在分布式的基础上,
    解决的是企业内部大量异构系统集成的问题。

    新的SOA解决的是系统重复建设的问题
    微服务小应用 + 小服务
    中台
     
    简单地说,前台要快,后台要稳,中台因此诞生。
    中台通过实现基础业务的平台化,实现了企业级业务能力的快速复用

2 如何实现高层的复用

首先服用可分为技术复用(代码复用,组件复用),业务复用(产品复用,业务实体复用,业务流程复用),其中产品复用 > 业务流程复用 > 业务实体复用 > 组件复用 > 代码复用

而实现高层的复用,必须做好 “基础服务边界的划分原则”

  • 服务的完整性原则

     对外提供完整的业务语义,最大程度地简化服务的使用

  • 服务的一致性原则

      比如订单的优惠计算过程,却不是由订单服务来负责,而是由独立的促销服务负责的

  • 正交原则

     服务之间不会有任何的调用关系

     服务之间有数据的依赖关系,但没有接口的调用关系     

  

中台产生案例

下面以一个餐饮公司的例子,来讲解中台的产生,餐饮公司餐饮服务已聚合外卖服务,

支持在第三方外卖平台和门店下单。目前需新增自有小程序下单渠道。

  • 妥协且务实方案,可快速落地的方案

    • 存在如下的问题
      • 存在两套订单系统(小程序订单和外卖订单)
      • 小程序订单处理链路过长(由于消息队列堵塞,外卖系统不能及时同步给小程序的订单服务,这样导致了小程序用户不能及时地看到取餐码)
      • 降低了系统整体的稳定性(使两套订单系统解耦,我们使用了消息队列在两个库之间同步订单数据)

             

  • 统一订单服务中台方案

    • 变化
    • 原来外卖系统的两个模块“外卖同步接口”和“POS 接口”,升级为了两个独立的应用。

    • 原来外卖和小程序各自有一个订单库,现在合并为了一个订单库,由这个订单服务统一对外提供订单数据的访问和状态管理。

    • 明显的层次结构,自上而下分为三层(渠道端,渠道端对应的服务段,底层的订单服务)

3 技术架构的核心要点

上面讲述了中台的架构的演变,,业务架构的实现必须依懒技术架构的,下面我们继续解析技术架构的核心点

  •  系统物理模型

     

       

  • 系统故障点

       

  • 解决原则

       

  •          
    • 第一个设计原则是冗余无单点  
    • 第二个设计原则是水平扩展
    • 第三个原则是柔性事务
    • 第四个原则是系统可降级(限流,降级,熔断,功能禁用)
    • 第五个系统可监控

   

4 技术架构的高可用案例

餐饮公司司在全国有大量的门店,他们准备搞一个长期的大型线上促销活动,促销的力度很大:用户可以在小程序上先领取优惠券,然后凭券再支付 1 元,就可以购买价值数十元的套餐。预计每秒 10 万 QPS,首日的订单数量会超过 500 万。

现有体系架构图

现有体系的流程

1 小程序前端通过 Nginx 网关,访问小程序服务端

2 小程序服务端会调用一系列的基础服务,完成相应的请求处理,包括门店服务、会员服务、商品服务、订单服务、支付服务等,每个服务都有自己独立的数据库和 Redis 缓存;

3 订单服务接收到新订单后,先在本地数据库落地订单,然后通过 MQ 同步订单给 OMS 履单中心

4 门店的收银系统通过 HTTP 远程访问云端的 OMS 履单中心,拉取新订单,并返回取餐码给 OMS,OMS 再调用小程序订单服务同步取餐码

5 小程序前端刷新页面,访问服务端获得取餐码,然后用户可以根据取餐码到门店取餐或等待外卖。

实现高可用99.99%的性能的架构

 具体的实施

  •  前端接入改造
    • 小程序端的 CDN 优化
    • Nginx 负载均衡
    • 应用和服务的水平扩展
    • 订单水平分库
    • 异步化处理
    • 主动通知,避免轮询
      • 在原来的架构中,前台小程序是通过轮询服务端的方式,来获取取餐码;同样,商户的收银系统也是通过轮询 OMS 系统拉取新订单
      • 新增消息推送中心
        • 收银系统通过 Socket 方式,和推送中心保持长连接
        • 当 OMS 系统接收到前台的新订单后,会发送消息到消息推送中心;然后,收银系统就可以实时地获取新订单的消息,再访问 OMS 系统拉取新订单
        • 为了避免因消息推送中心出问题(比如消息中心挂掉了),导致收银系统拿不到新订单,收银系统还保持对 OMS 系统的轮询,但频率降低到了 1 分钟一次。
        • 同理,小程序前端会通过 Web Socket 方式,和消息推送中心保持长连接。当 OMS 系统在接收到收银系统的取餐码后,会发送消息到消息推送中心。这样,小程序前端可以及时地获取取餐码信息。
    • 缓存的使用
      • 当收银系统向 OMS 拉取新订单时,OMS 不是到数据库里查询新订单,而是把新订单先保存在 Redis 队列里,OMS 通过直接查询 Redis,把新订单列表返回给收银系统
      • 在商品服务中,菜单和商品数据也是放在了 Redis 中,每天凌晨,我们通过定时任务,模仿前端小程序,遍历访问每个商品数据,实现对缓存的预刷新,进一步保证缓存数据的一致性,也避免了缓存数据的同时失效,导致缓存雪崩。
    • 一体化监控
      • Zabbix 做系统监控
      • CAT 做应用监控
      • 拉订单曲线做业务监控

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强推!创新直发核心!时序分解+优化组合+模型对比!VMD-SSA-Transformer-BiLSTM多变量时间序列预测

强推!创新直发核心!时序分解优化组合模型对比!VMD-SSA-Transformer-BiLSTM多变量时间序列预测 目录 强推!创新直发核心!时序分解优化组合模型对比!VMD-SSA-Transformer-BiLSTM多变量时间序列预测效果一览基…

如何将图表数据拟合为函数

1. 数据准备 收集图表数据,包括独立变量(如 x值)和因变量(如 y 值)。这些数据可以是离散的点,通常表示为一组 (x1,y1),(x2,y2),…,(xn,yn)。 2. 选择模型 选择拟合函数的模型。这取决于数据的特征及其在…

YOLO配合 PYQT做自定义虚拟电子围-自定义绘制多边形虚拟电子围栏

1、目标检测: YOLO可以识别检测物体,这是众所周知的。使用YOLO来做目标检测,并获取坐标信息。 2、电子围栏 比如在监控中,指定一块区域,如果有目标进入,则发出警报,并提示。比如下图标红的区…

使用rabbitmq发送消息和caffeineCache保存本地

目录 使用stock_job工程采集到国内大盘的最新交易时间的信息并插入数据库,使用rabbitmq发送消息 1.导入依赖 2.编写yml文件,配置连接rabbitmq的信息 3.编写mq的配置类,生成交换机,消息队列,并将他们绑定 4.采集最新…

Centos安装配置Gitea(Ubuntu等系统也可参考)

准备工作 安装好宝塔面板,再进入宝塔面板安装好MySQL,添加配置一个MySQL数据库gitea,用户名和密码也为gitea (也可用命令行做相关操作,自行搜索教程) 通过终端下载安装git,添加普通用户git&a…

《Nginx核心技术》第16章:实现Nginx的高可用负载均衡

作者:冰河 星球:http://m6z.cn/6aeFbs 博客:https://binghe.gitcode.host 文章汇总:https://binghe.gitcode.host/md/all/all.html 星球项目地址:https://binghe.gitcode.host/md/zsxq/introduce.html 沉淀&#xff0c…

网络安全AI大模型训练从入门到精通

前言 2022年下半年,国内安全圈内开始完chatGPT,当时在安全圈内小火了一把。大家纷纷注册去体验一把,希望chatGPT能帮助解决日常安服渗透问题。当时以为仅此而已,谁知年后大火,随后以chatGPT为代表的大语言模型&#x…

掌握Hive函数[3]:从基础到高级应用

目录 窗口函数(开窗函数) 概述 常用窗口函数 1)聚合函数 2)跨行取值函数 (1)LEAD 和 LAG (2)FIRST_VALUE 和 LAST_VALUE 3)排名函数 案例演示 1. 数据准备 1&…

数据库锁之行级锁、记录锁、间隙锁和临键锁

1. 行级锁 InnoDB 引擎支持行级锁,而MyISAM 引擎不支持行级锁,只支持表级锁。行级锁是基于索引实现的。 对于普通的select语句,是不会加记录锁的,因为它属于快照读,通过在MVCC中的undo log版本链实现。如果要在查询时对…

spring security 中的授权使用

一、认证 身份认证,就是判断一个用户是否为合法用户的处理过程。Spring Security 中支持多种不同方式的认证,但是无论开发者使用那种方式认证,都不会影响授权功能使用。因为 SpringSecurity 很好做到了认证和授权解耦。 二、授权 授权&#x…

【Anaconda】修改jupyter notebook默认打开的工作目录、jupyter notebook快捷键

jupyter notebook快捷键 针对单元格的颜色蓝色命令行模式绿色编辑模式 两种模式的切换编辑模式切换到命令行模式 >>> esc键命令行模式切换到编辑模式 >>> 鼠标左键或者直接按enter键1.标题的书写方式1:1.esc进入命令行模式2.按m键3.写内容4.运行单元格即可方…

基于SpringBoot的智能制造云平台系统的设计与实现计算机毕设

一、选题背景与意义(300字左右) 根据工业4.0智能制造生态链中云工厂在实际生产当中的工作流程进行充分调研和整理出来的,描述最终用户在本系统中对于生产订单的处理、排产、以及生产的完整在线处理流程和业务需求的文档。 针对制造业而言&a…

COD论文笔记 BiRefNet

本质还是一个 U 型编码器解码器结构的分割模型。 我可以考虑将©和(d)结合,即对解码器的输入不进行 patchify,同时在各个阶段引入梯度参考信息 最近的相关工作,中间监督、额外先验(频率,梯度,边缘等)取得不错效果 作者观察到…

【数据分享】《中国城市统计年鉴》(1985-2023)全PDF版本 第一次补档

数据介绍 中国城市,如同一本生动的历史书,承载着经济、社会的快速变迁。《中国城市统计年鉴》记录了城市的发展轨迹,是我们理解城市化进程、洞察城市挑战的重要指南。 这份年鉴的数据庞大而详实,囊括了中国城市发展的多个方面。…

二、Maven工程的创建--JavaSEJavaEE

1、idea创建Maven JavaSE工程: 2、idea创建Maven JavaEE工程: (1)手动创建 (2)插件方式创建 在idea里安装插件JBLJavaToWeb; 选择需要生成的项目文件后,右击: 项目…

【verilog】1. 流水灯例程

文章目录 前言一、定义概念 缩写1. verilog 二、性质三、代码分解释四、完整代码参考文献 前言 数电课设 一、定义概念 缩写 1. verilog Verilog 是一种以代码形式来描述数字系统和电路的硬件描述语言 (HDL)。它由 Gateway Design Automation 在 20 世纪 80年代中期开发&a…

【Linux】进程控制(一)

1. 进程创建 (一)认识fork函数 从已存在进程中创建一个新进程(新进程为子进程,而原进程为父进程) 进程调用fork,当控制转移到内核中的fork代码后,内核做: 分配新的内存块和内核数…

JVM 调优篇1 类的加载器与加载过程

一 基本知识 1.1 JIT&AOT JIT: Just Time compilation 即时编译器 在程序运行时将字节码或中间表示转换为机器代码。 AOT: Ahead of Tmie Compilation : 预编译 在程序运行之前将高级语言代码完全编译成机器代码。 1.2 字面量和符号引用* 字面量&am…

逻辑代数的基本规则

目录 逻辑代数的基本规则 带入规则 反演规则 对偶规则 逻辑代数的基本规则 带入规则 将逻辑等式两边的某一变量均用同一个逻辑函数代替,等式仍然成立。 可以用A非代替A,也可以用C代替B。 也可使用BC这样一个整体代替B。 反演规则 可以把与换或&#x…

Mysql高级教程

1.安装部署 安装依赖性: [rootmysql-node10 ~]# dnf install cmake gcc-c openssl-devel ncurses-devel.x86_64 libtirpc-devel-1.3.3-8.el7_4.x86_64.rpm rpcgen.x86_64 下载并解压源码包 [rootmysql-node10 ~]# tar zxf mysql-boost-5.7.44.tar.gz [rootmysql-no…