微服务架构<2>

在电商项目中,我们针对一些核心业务,比较复杂的业务需要做一些设计以及优化的过程首先我们针对于订单的模块拆分了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.mzph.cn/news/578278.shtml

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

相关文章

摇杆控制人物移动

摇杆控制人物移动 一、UI搭建二、3d模型搭建三、脚本JoyStickBar.csPlayerController.cs 工程在我资源里名字叫Joystickbar.unitypackage [连接](https://download.csdn.net/download/qq_42194657/12043019?spm1001.2014.3001.5503) 一、UI搭建 JoyStickBar是图片背景 JoySt…

培训班毕业生的出路

前面几篇文章讲的都是如何规避培训班的包装简历,是不是意味着包装简历就没有机会了呢? 首先一点,以我了解的帝都IT市场,各种各样的IT公司数目繁多,面试官的水平也是参差不齐,更何况还有onsite(…

算法设计与分析实验报告-分治法相关练习题

课本分治法章节课后部分练习题。 算法设计与分析实验报告-递归与分治策略 算法设计与分析实验报告-动态规划算法 算法设计与分析实验报告-回溯法 算法设计与分析实验报告-分治法相关练题 北京大学出版社-算法设计与分析 五、程序题 1. 试给出用分治法求某集合中元素值为偶…

Nestjs使用log4j打印日志

众所周知,nest是自带日志的。但是好像没有log4j香,所以咱们来用log4j吧~ 我只演示最简单的用法,用具体怎么样用大家可以自己进行封装。就像前端封装自己的请求一样。 一、安装 yarn add log4js stacktrace-js 二、使用 主要就三个文件&a…

ArkUI动画概述

目录 1、按照页面分类 2、按照功能分类 3、显示动画 4、属性动画 动画的原理是在一个时间段内,多次改变UI外观,由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画。UI的一次改变称为一个动画帧,对应一次屏幕刷新&a…

一开始我还不信!高德导航红绿灯竟然能读秒?

高德导航红绿灯为啥能读秒? 1 内部员工吐露 每天工作其实就是负责自己片区的红绿灯,一大早就去校对时间,然后发布到后台。是的,统计出来的,而且还是人工统计,有误差请见谅[害羞] 真的是很辛苦了&#xf…

npm常见错误

三个方面 1. npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! phantomjs-prebuilt2.1.15 install: node install.js npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the phantomjs-prebuilt2.1.15 install script. np…

如何使用队列处理 API 速率限制

对于遇到速率限制的应用程序来说也是一个挑战,因为它需要“放慢速度”或暂停。这是一个典型的场景: 初始请求:当应用程序发起与 API 的通信时,它会请求特定的数据或功能。API 响应: API 处理请求并响应请求的信息或执…

12.25

led.c #include "led.h" void all_led_init() {RCC_GPIO | (0X3<<4);//时钟使能GPIOE_MODER &(~(0X3<<20));//设置PE10输出GPIOE_MODER | (0X1<<20);//设置PE10为推挽输出GPIOE_OTYPER &(~(0x1<<10));//PE10为低速输出GPIOE_OSPEED…

单集群400TB,OceanBase稳定支撑快手核心业务场景

一款日均超过千万人访问的短视频 App 快手&#xff0c;面对高并发流量如何及时有效地处理用户请求&#xff1f;通过在后端配置多套 MySQL 集群来支撑高流量访问&#xff0c;以解决大数据量存储和性能问题&#xff0c;这种传统的 MySQL 分库分表方案有何问题&#xff1f;快手对分…

评估回馈电子负载的重要指标?

回馈电子负载是用于测试电源、电池和其他电子设备性能的设备。它可以模拟实际负载&#xff0c;同时将多余的能量回馈到电网或电池中。在选择和使用回馈电子负载时&#xff0c;有几个重要的指标需要考虑&#xff1a; 功率范围&#xff1a;回馈电子负载的功率范围是指其能够提供的…

巅峰画师Midjourney:新时代的独角兽

介绍 AI绘画领域中&#xff0c;Midjourney处于绝对地位&#xff0c;并且一年时间就登顶。 Midjourney是一家独立的AI研究实验室,探索新的思维媒介,拓展人类的想象力。 它由一个小型的自筹资金团队组成,专注于设计、人类基础设施和AI。 在AI绘画领域,Midjourney取得了非常突出…

百度Apollo五步入门自动驾驶:Dreamview与离线数据包分析(文末赠送apollo周边)

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式&#xff1a;通过连接报名观看课程&#xff0c;即可免费获取精美周边 ⛳️活动链接&#xf…

pytest 断言异常

一、前置说明 在 pytest 中,断言异常是通过 pytest 内置的 pytest.raises 上下文管理器来实现的。通过使用 pytest.raises,可以捕获并断言代码中引发的异常。 二、操作步骤 1. 编写测试代码 atme/demos/demo_pytest_tutorials/test_pytest_raises.py import pytest# 示例…

【PDF密码】 一键强制去掉pdf密码

想要给PDF文件设置一个密码防止他人对文件进行编辑&#xff0c;那么我们可以对PDF文件设置限制编辑&#xff0c;设置方法很简单&#xff0c;我们在PDF编辑器中点击文件 – 属性 – 安全&#xff0c;在权限下拉框中选中【密码保护】 然后在密码保护界面中&#xff0c;我们勾选【…

通过three.js玩转车展项目

1.项目搭建 1.1 创建文件夹 mkdir 文件名1.2 初始化package.json npm init -y1.3 安装打包工具并配置相关依赖 npm i parcel -d在package.json中打包路径和指令 1.4 安装three.js npm i three -d2.项目搭建 2.1 新建index.html&#xff0c;并再index.html引入car.js,在…

【es6】async、await原理

async、await是es6新出的&#xff0c;主要是为了解决多个promise函数产生的嵌套层级过多的问题。 async、await是基于generator实现的代码中断操作&#xff08;上一个await未处理完时&#xff0c;代码不会继续向下执行&#xff0c;看上去就是中断了代码&#xff09; generator…

Mysql数据库批量更新表编码及排序规则

SELECT CONCAT( ALTER TABLE , TABLE_NAME, DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ) AS 修正SQL FROM information_schema.TABLES WHERE TABLE_COLLATION ! utf8mb4_unicode_ci AND TABLE_SCHEMA edu-integrated; SELECT…

从流星雨启程:Python和Pygame下载与安装全过程

文章目录 一、前言二、下载安装过程1.官网下载安装包2.安装python过程第一步第二步第三步第四步第五步安装完成 3.简单测试Python3.1 检查 Python 版本号3.2 打开 Python 解释器3.3 输入你的第一个代码3.4 运行 Python 脚本 4.安装Pygame4.1 cmd命令安装Pygame4.2 pip升级4.3 安…

zookeeper 面试

1zookeeper 是什么&#xff1f; 是一个开源的分布式协调服务&#xff0c;它提供了一个具有高可用性和一致性的分布式环境&#xff0c;用于协调和管理分布式系统中的各种数据和状态。 2 zookeeper 都有哪些功能&#xff1f; 分布式锁&#xff1a;可以通过 ZooKeeper 实现分布式…