微服务架构<2>

news2024/9/29 9:36:45
在电商项目中,我们针对一些核心业务,比较复杂的业务需要做一些设计以及优化的过程

首先我们针对于订单的模块拆分了2个子模块

在这里插入图片描述

1.order-curr实时下单业务 
2.order-his 做一些历史的订单归档
我们的订单业务 
>商品添加至购物车
>购物车结算--> 订单确认页
>填写信息 提交订单--》订单支付页

在这里插入图片描述

购物车结算页

填写信息  提交订单

在这里插入图片描述
在这里插入图片描述

支付  这就是我们整个订单的详情,这种业务在高并发情况下该怎么做优化呢
1.>  我们在做设计的时候,针对于订单表做分表处理 我们可以考虑数据量做分表操作
在整个下单业务会出现什么过程呢
1> 重复下单 基于一个商品下2个单, 这种就会容易产生重复下单的问题  基于这种问题,会加一些Js的控制
比如说 点击一次结算,将按钮置灰

在这里插入图片描述

但是,在前端控制的时候他安全性不高,比如说黑客可以直接跳过前端发送请求到后端,这种情况下前端控制的就会安全性不高
怎么防止重复下单

用户F5刷新进入页面的时候  先生成这个id 保存在页面中, 当提交订单的时候,订单号随着业务数据一起传输到后端进行传输
这样的话 即便点击多次提交订单,每一次提交的订单号都是一样的 我在后端根据这个订单号就可以判断有没有下单

在这里插入图片描述

也就是我后端提供这2个接口就可以了 
前端传了这个订单id 我们怎么来判断这个id 有没有下过单  insert的时候就会报错
或者我拿这个订单我去db 中去查询一下
=================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
不查数据库有什么方法来判断这个订单是否重复  布隆过滤器,我可以基于布隆过滤器来判断这个orderId有没有下过单
布隆过滤器可以借助于redis分布式缓存来做

还有下单的时候会查询库存,如果超卖的时候该怎么办 ABA 问题
我们可以增加个版本号来控制
我们可以增加一个版本号来判断  我们增加一个vision 字段  来做版本控制

对于分库分表的处理 能不分就不分,因为随着数据库的分库分表,会有很多问题的要考虑
我们此时要考虑分库分表
1> 提高我的数据存储性能,我数据量过大 我单表存不下
2> 也要考虑我服务器查询承载的情况 ,比如说数据在一个库中的化,查询慢,很多查询集中在一个库中此时压力会变大
--------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.
分库分表的一方面是提高数据的承载量
另一方面是提高他的查询性能 这也是我们要设计分库分表要考虑的东西'=

提高查询性能 我们可以考虑读写分离的方案

在这里插入图片描述

读写分离,原本我的数据部署在一个库中 
我做读写分离 首先需要 针对于每一个数据库搭建一个从数据库,从数据库基于mysql的binlog 的主从同步机制去做数据的同步

服务器将select的请求路由到slave上,将insert请求路由到master上, 这样就形成了一个读写分离的方案
我原本数据库要承载很多数据的请求,包括 write和read
现在做了读写分离,主库只负责写入,这部分占比是比较低的
对于读多写少的场景,读写分离式很合适的,另外读请求分配到从库中, 从库也可以做水平扩展
有更多的从库就可以进一步分读数据的请求了

在高并发场景下 我们主库都会搭建一个从库 目的就是为了体现读写分离的 思想

读写分离可以解决数据读取压力大的问题 ,但是他不能解决单表数据量大的问题
我们还需要进行分库分表处理  我们该怎么落库一个分库分表的项目
1> 我需要对我的数据进行一个预估,预估我数据量有多大,也就是说我要拆分多少个表,根据业务量来预估我们要拆分多少个表   我们要对数据的预估,以及数据的增量进行一个预估
我们根据当前实际情况预估32个表

在这里插入图片描述

确定好规模之后 我们的指定一个策略, 我们到底怎么分库分表
有很多方案去选择,既要考虑数据分布的均匀 也要考虑很多场景
最简单的方式 就是基于orderId进行取模  比如说1放在第一个表中,这就是最简单的分片操作
--------------------------------->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
分片键该怎么去选择,选择区分度比较高的数据orderId(唯一独立)  如果分片键仅仅是orderId这个字段的化,
呢么此时根据memberId是没有办法确定那个分片的
我们基于memberId来查询的时候 就只能全路由分片

所以我们要考虑分片键的化,还得依托于我们的需求
如果未来有memberId的化, 在生成分片键的时候,我们可以将用户id和orderId综合来考虑

在这里插入图片描述

这样不管是用orderId 还是memberId 都可以查到那在那个表中了
我再进行取模的时候  orderId的后2位置就是memberid 的后2位
这样就可以兼容 基于订单id和用户Id来查我也能确定用户再那个分片

主键生成策略 弊端就是只能支持2个字段,未来如果加上其他字段 比如说商户 就不能够支持了
orderId +memberId 这种只能够兼容2个字段 这种方式  如果有多个字段 我们这种方案就不适合了
我们选择了 订单id+userid这种分片键之后  接下来我们要实现分片算法
我们为了兼容订单Id 和用户id 2中方式
我的数据插入数据库是怎么插入到每个表的, 我查询的时候就该怎么去查询

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

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

相关文章

sklearn 逻辑回归Demo

逻辑回归案例 假设表示 基于上述情况,要使分类器的输出在[0,1]之间,可以采用假设表示的方法。 设 h θ ( x ) g ( θ T x ) h_θ (x)g(θ^T x) hθ​(x)g(θTx), 其中 g ( z ) 1 ( 1 e − z ) g(z)\frac{1}{(1e^{−z} )} g(z)(1e−z)1​…

Go语言中的`sync`包同步原语

通过sync包掌握Go语言的并发 并发是现代软件开发的基本方面,而Go(也称为Golang)为并发编程提供了一套强大的工具。在Go中用于管理并发的基本包之一是sync包。在本文中,我们将概述sync包,并深入探讨其最关键的同步原语…

第二十一章博客

计算机应用实现了多台计算机间的互联,使得它们彼此之间能够进行数据交流。网络应用程序就是在已连接的不同计算机上运行的程序,这些程序借助于网络协议,相互之间可以交换数据。编写网络应用程序前,首先必须明确所要使用的网络协议…

1 手写第一个Win32窗口程序

1 基础概念 什么是窗口? 答:窗口就是屏幕上的一片区域,接受用户的输入,显示程序的输出。可以包含标题栏、菜单栏、工具栏以及控件等。什么是句柄? 答: 作为一种管理和操作系统资源的机制,提供了…

【AI提示词故事】雪的诗意:静谧与活力的奇妙交织

雪的诗意:沉浸在雪景的浪漫氛围中 冬日的清晨,窗外的世界被一层洁白的雪覆盖着,仿佛是大自然为我们准备的一幅美丽画卷。 我走出房门,踏上雪地, 那柔软的雪粒在脚下发出轻柔的咯吱声,仿佛是在诉说着冬日的…

SQL进阶:子查询

一般情况下,我们都是直接对表进行查询,但有时候,想要的数据可能通过一次select 获取不到,需要嵌套select,这样就形成了子查询。 子查询可以位于查询语句的任意位置,主要的注意点在于用于不同的位置,和不同的关键字一起使用时,需要注意返回的列的数量和行的数量。 位于…

Kubernetes(K8S)快速入门

概述 在本门课程中,我们将会学习K8S一些非常重要和核心概念,已经操作这些核心概念对应组件的相关命令和方式。比如Deploy部署,Pod容器,调度器,Service服务,Node集群节点,Helm包管理器等等。 在…

第十四章 集合(List)

一、集合框架体系 集合: (1)可以动态保存任意多个对象。 (2)提供了一系列方便的操作对象的方法:add、remove、set、get等。 二、Collection 1. Collection 接口常用方法 (1)add&a…

华为OD机试 - 多段线数据压缩(Java JS Python C)

在线OJ刷题 题目详情 - 多段线数据压缩 - Hydro 题目描述 下图中,每个方块代表一个像素,每个像素用其行号和列号表示。 为简化处理,多线段的走向只能是水平、竖直、斜向45度。 上图中的多线段可以用下面的坐标串表示:(2,8),(3,7),(3,6),(3,5),(4,4),(5,3),(6,2),(7,3),(…

C语言中常见的笔试题(二)

题目一: 问题: 在C语言中,const关键字有哪些用途?请列举出至少三种用途,并给出相应的代码示例。 答案: 定义常量:使用const关键字可以定义常量,它们的值在程序运行期间不能被修改…

React 路由跳转

1. push 与 replace 模式 默认情况下,开启的是 push 模式,也就是说,每次点击跳转,都会向栈中压入一个新的地址,在点击返回时,可以返回到上一个打开的地址, 就像上图一样,我们每次返…

U4_2 语法分析-自底向上分析-算符优先分析

文章目录 一、回顾1、推导 vs 规约2、句型、短语、简单短语、句柄 二、自底向上(移进-规约)分析方法1、基本思想2、分析过程3、移进—归约分析(Shift-Reduce Parsing) 三、算符优先分析1、概念2、分析流程1)先确定终结符之间的优先…

Codeforces Round 917 (Div. 2)(A~D)(又是数学题)

A - Least Product 题意&#xff1a; 思路&#xff1a;若有奇数个负数&#xff0c;则不需要任何操作。若存在0&#xff0c;也不需要任何操作。其余情况将任意一个数改为0即可。 #include <bits/stdc.h> using namespace std; void solve() {int n;cin >> n;int …

CUMT--Java复习--网络编程

目录 一、Java网络API 1、InetAddress类 2、URL类 3、URLConnection类 4、URLDecoder类和URLEncoder类 二、基于TCP的网络编程 1、Socket类 2、ServerSocket类 三、网络通信过程 一、Java网络API Java中有关网络方面的功能都定义在java.net中。 1、InetAddress类 Jav…

MySQL undo日志精讲3-从回滚段中申请 Undo 页面链表

回滚段-Rollback Segment Header 页面 回滚段的概念 我们现在知道一个事务在执行过程中最多可以分配4个 Undo 页面链表&#xff0c;在同一时刻不同事务拥有的 Undo 页面链表是不一样的&#xff0c;所以在同一时刻系统里其实可以有许许多多个 Undo 页面链表存在。为了更好的管…

工业互联网:数字化制造的未来

引言 在当今的数字化时代&#xff0c;制造业正经历着革命性的变革。工业互联网&#xff08;Industrial Internet of Things"&#xff0c;简称 IIoT&#xff09;作为这一变革的核心引擎&#xff0c;正在重新定义现代工业和制造。本文将探讨工业互联网的基础、关键技术、应…

论文润色的原理是什么 PaperBERT

大家好&#xff0c;今天来聊聊论文润色的原理是什么&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;论文润色的原理――探究论文润色背后的科学依据 一、…

第十五节TypeScript 接口

1、简介 接口是一系列抽象方法的声明&#xff0c;是一些方法特征的集合&#xff0c;这些方法都应该是抽象的&#xff0c;需要有由具体的类去实现&#xff0c;然后第三方就可以通过这组抽象方法调用&#xff0c;让具体的类执行具体的方法。 2、接口的定义 interface interface_…

利用STM32和可控硅控制220V加热电路

利用STM32和可控硅控制220V加热电路 Chapter1 利用STM32和可控硅控制220V加热电路一、错误原理图二、正确原理图 Chapter2 可控硅驱动芯片MOC3081/3061Chapter3 一个MOC3061的可控硅触发电路的分析Chapter4 可控硅的两种触发方式&#xff1a;移相触发和过零触发1、过零触发2、移…

C++面试宝典第9题:找出第K大元素

题目 给定一个整数数组a,同时给定它的大小N和要找的K(1 <= K <= N),请根据快速排序的思路,找出数组中第K大的数(保证答案存在)。比如:数组a为[50, 23, 66, 18, 72],数组大小N为5,K为3,则第K大的数为50。 解析 这道题主要考察应聘者对于快速排序的理解,以及实…