搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
笔触狂放9
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
android.os.DeadObjectException的解决办法_android.os.deadobjectexception: transaction failed
2
java注解实战
3
C# 读取config文件_c#读取dllconfig
4
猿创征文|开源监控软件Zabbix6部署实战_zabbix6一键
5
史上最全因果推断合集-2(阿里大文娱智能营销增益模型)_广告与因果推断
6
PTA——重排链表_给定一个单链表 l 1 →l 2 → →l n 1 →l n ,请编写程序将链表重新排列为
7
wr703n刷openwrt智能控制--进入哦penwrt系统_multiple packages (libgcc1 and libgcc1) providing
8
openwrt 锐捷 单线多拨_openwrt单线多拨
9
[Intensive Reading]目标检测(object detection)系列(七) R-FCN:位置敏感的Faster R-CNN_位置敏感的目标检测
10
sudo和apt是什么的缩写_sudo apt是什么意思
当前位置:
article
> 正文
业务中台的架构案例_销售系统的业务架构
作者:笔触狂放9 | 2024-03-08 10:28:59
赞
踩
销售系统的业务架构
文章目录
业务中台目标
具体案例
性能
缓存
异步
集群
代码优化
存储优化
可用性
集群
多活
风险识别
分级
异步
限流
熔断
降级
重试
规范流程
监控告警
扩展性
领域建模
微服务
扩展点
伸缩性
分割
集群
安全性
校验
加密
风控
业务中台目标
目标:
整体目标:
高内聚、低耦合
,便于开发和维护。
五个方向:性能、可用性、扩展性、伸缩性、安全性。
原因:
单体架构
的大泥球会导致业务迭代困难、无法针对性伸缩、故障没有隔离等问题,需要向微服务方向演进。
演进过程中为了
复用、抽象
,需要沉淀中台能力。
业务中台不仅仅需要关注功能性需求,更需要关注5个方向的非功能性需求,才能高效稳健的支持业务的发展,否则极容易演化成分布式单体。
实现方式:
战略上:
横向分层:分散关注、松散耦合。
应用层:提供具体业务的API和视图,和用户直接交互。
服务层:提供业务编排和业务原子能力。
数据层:提供存储服务,如数据库、缓存、搜索引擎、文件。
纵向分割:通常按照不同
业务
划分,专人做专事、不同等级保障。
分布式部署:包括服务应用、静态资源、数据存储、计算、配置、锁、文件的分布式。由于通常需要避免单点,需要在C和A之间权衡。
战术上(几种方式可能组合使用):
集群。负载均衡和失效转移提供并发特效和可用性。
缓存。在数据热点不均匀、数据有一定有效期的情况下使用。
异步。堆积消息避开故障时刻提高可用性、减少rt、削峰。
冗余。包括集群备份、冷热备份、灾备数据中心。
自动化。发布过程、代码管理、安全监测、监控、失效转移恢复、降级、分配资源都可以自动化。
安全措施。密码、验证码、加密、过滤、风控等。
…
详细理论内容可参考:
大型网站架构
具体案例
结合电商商品中台、交易中台、春晚红包的工作经历梳理使用场景
性能
缓存
分布式缓存。主流的
redis的3种集群
,是电商商品中心各种场景的缓存主力。
主从redis。client 路由。
一致性hash路由。商品主库上的缓存,用于商详等商品单查。已经成功支持过200+ redis实例,抗500w+ qps。
多副本路由。上一条的二级缓存,存放热点数据,防止单redis和主库单分片被打挂。50个 redis实例可抗100w+ qps。
codis。proxy路由。用于C端列表大流量的批量查询,通常多集群部署。单集群256主从server+100proxy可抗近千万qps,并且可以通过节点的方式最多支持到3000w qps。、
redis cluster。前两者的替代品,扩容更加方便。集群规模受限,建议最多200 server和2T内存,可以通过多集群分片的方式扩展集群的规模。
本地缓存。主流Caffeine,用于列表场景大内存(56G)实例抗突发热点,保护分布式缓存。
线程缓存。ThreadLocal,用于aop带出上下文,如商品B端编辑在aop中校验商品状态,并把商品数据带到业务逻辑中修改,减少查库的次数。
异步
消息队列。
消息中间件。春晚红包抢红包实时链路db只记录中奖流水,后续发奖通过kafka异步。抢红包需要支持600w tps,下游发奖等无法支持,并且异步也可以减少用户等待时间能再次摇奖。
事件驱动。用户下单后的预约流程需要商家接单,接单等待时间较长。实现为用户申请落库后直接放回,后续通知商家流程通过可靠领域事件驱动,商家接单之后回调。
rpc异步。商品列表聚合素材、标签等数据使用异步dubbo,并行调用减少列表渲染时间。
线程池。商品列表的缓存回写通过线程池异步,减少为命中缓存时用户请求等待的时间。
集群
服务层k8s实例的集群化。商品列表场景单机房上千实例可抗300w+ qps,并在10ms内返回。单机压力大会导致cpu飙升的长尾。
缓存的集群化。商品列表的缓存集群抗300w+ qps的批量查询流量,并保证rt在1ms左右。
持久化存储的集群化。
mysql。
商品256库256表,可以支持百万qps的查询,日常流量下商详场景的redis雪崩,也可以基本支持业务。
春晚预热的全局预算累计拆分到32个库,可支持几十万的写入。
hbase。商品列表缓存下的持久化存储,支持百万qps的查询。
代码优化
多线程。春晚红包下单回滚库存、限购等资源时并行回滚,减少用户等待时间。
资源复用。下单页对大ab参数的解析只做一次,后续都使用解析后的对象。解析大json有可能占用机器将近一半的cpu耗时。
GC调优。
更换gc方式。商品敏感数据服务由于需要使用本地缓存,gc压力大,上游50ms经常超时。使用zgc,通过损失一定cpu获得1-2ms的gc时间,极大的降低了上游的超时率。
调整其他gc参数
。
存储优化
存储选型。商品操作日志这种写多读少的场景,使用hbase这种追加式的存储,做到毫秒级写入。
索引调优。
添加索引减少每次扫描的数据行数,从而降低响应时间。
商品的sku包含删除和未删除的sku,热门商品修改频繁,删除的sku较多,导致每次可能需要查到上万sku,但实际生效的只有几十上百个。添加商品Id+SKU状态的索引解决这一问题。
添加查询条件引导优化器走扫描数据量少的索引。
春晚红包的索引优化
。
可用性
分布式场景判断是否可用的一般方式:超时
集群
服务层的无状态化k8s集群。可负载均衡+重试做到失效转移。
dubbo调用支持配置retry属性,也可二次开发健康度lb,从而使得请求最终落到下游的正常实例上。
存储层的数据备份。可失效转移。
单主写入
同步备份。
mysql同步复制
异步备份。mysql异步复制,
redis主从复制
半同步备份。商品库采用mysql半同步复制,主备同步复制,主从异步复制,主到灾备异步复制,是C和A的折中。
无主写入。
商品中心的缓存采用单机房三集群,同步时串行写入,异常时跨集群降权重试。
多活
同城双活,异地、跨云多活。
商品中心、交易中心等核心服务均部署两个以上的机房,同时提供服务,并且定期做切流量演练。
风险识别
热点流量。
业务识别。热点商品通过定时任务拉秒杀服务获取,并刷到多副本缓存中,用于商品详情页和下单,避免数据库被打崩。
系统识别。
商品列表使用caffeine本地缓存,通过tiny-lfu识别热点并缓存到本地,保护分布式缓存。
商品详情、下单服务使用改造之后的sentinel,发现db访问热点,并刷到多副本缓存。
分级
高优先级的服务占用更好的硬件资源,部署在不同的宿主机上,甚至异地容灾。
商品服务独立宿主机,和其他服务隔离,并做多机房部署和异地灾备。
高优先级的场景和其他场景隔离,避免被影响。
商品详情的缓存使用独立的redis集群,和其他缓存独立。
电商核心的盈利部门广告从单独的商品集群查询商品。
异步
方式同上一节中的mq,dubbo。
下单流程生成交易快照使用mq+异步dubbo双通道,不影响核心的下单链路。
限流
保证有效流量不超过自身的处理能力。分为集群限流和单机限流。
几种限流算法
。
集群限流。用存储如redis计数,适合流量小、精度高的场景,如1w qps左右。
单机限流。本地内存限流,适用于流量大精度不高的场景。
商品服务均使用单机限流 。dubbo在filter中用sentinel的滑动窗口,每个窗口默认0.5s。
熔断
抛弃下游请求。下单页服务对下游的所有依赖如果超过50%,会被mesh层熔断。
降级
强依赖降级:
无损降级。如读容灾存储。
交易支付流程如果查询账号服务失败,则从容灾的redis中获取账户信息。账号信息每次查询账号服务后更新,由于账户变更不频繁,读容灾存储基本等于无损降级。
有损降级。如异步补偿写。
交易下单流程中如果限购服务异常,可以降级成读历史订单后补偿扣限购,而不是同步扣限购。可能造成超卖。
弱依赖降级:可以失败
缩短超时时间。交易下单页对于历史留资等若依赖超时时间设置成200ms而不是框架默认的1s
支持丢弃请求。以上的留资服务可以手动降级,不去请求。
重试
需要注意:
下游保证幂等。
重试的错误类型。网络超时可以重试,业务异常需要具体问题具体分析,有些异常重试没有意义。
某分布式事务组件的思路是一阶段提交,二阶段无限重试,但是二阶段调下游的入参有问题被拦截,无限重试卡住。
重试次数限制。过多的重试会造成读或写扩散,打挂下游。
规范流程
版本管理。分布式服务场景下,分支开发、主干发布。
大多数互联网公司的做法,开发分支本地调试,测试分支发布到测试环境,主干分支发布到生产环境
测试分支可以建设泳道,减少需求之间的影响,但是也可能遗漏多个需求同时修改触发的bug
自动化发布、自动化测试。
整个公司使用发布平台发布,减少人工操作失误的概率。
预发布、灰度发布。
公司所有上线必须走预发验证,之后滚动发布。
监控告警
监控+告警人工介入。如cat可以监控应用并通过电话消息等多种方式触达开发人员,及时介入线上故障。
扩展性
领域建模
通过DDD战略层面拆分各个业务域
交易中台拆分成商品、营销、交易、履约、结算5个业务域,大多数需求可以闭环在各个业务域内。
DDD战术层面搭建微服务。
使用六边形框架搭建微服务。
交易中台的服务使用DDD构建,切下游模型、接口变更时只需要对rpc适配层进行少量代码改动,无须修改领域层。
领域模型的通用性,必要时可分离为业务子域或者基础设施子域。
商品中心的商品扩展属性通过k-v形式存储,shema通过groovy脚本校验,可以做到不发版迭代业务。已经迭代过数十个需求。
商品详情装修组件也设计为通用的组件+schema+数据的形式,支持业务动态配置详情页。
商品消息通过配置化每个业务可以单独订阅感兴趣的组合,如只关心商品和SKU的消息。
通用的能力,如商品黑名单、商品店铺协议、商品操作日志、计数能力单独抽业务子域,其他业务可以复用。
微服务
通过微服务分解业务模块。是DDD的技术实现。
微服务之间可以通过多种方式交互
同步的rpc、http调用。
异步的消息中间件、异步rpc。
微服务之间的交互协议也是可扩展的
json, hessian,thrift等
序列化方式
hbase等nosql存储
扩展点
开放平台。注重对外部开发者的扩展性。
交易中台会定义一套三方下单的接口,并公开在开平文档中,saas根据供应商提供client_key路由到指定的url
中台扩展点。交易中台通过在编排层流程节点定义接口,业务侧实现接口的方式,将业务定制逻辑剥离。
伸缩性
分割
水平方向:按照业务处理流程分离,比如API层、编排层、原子能力层、中间件层、存储层。
交易中台的服务层无状态,可以快速扩容。有状态的存储层相对伸缩性较差。
垂直方向:
按照业务模块分离。
交易中台新建设预约能力,和正向、履约独立,不用再对现有流程进行修改。
商品中心的库存服务单独拆分,和商品数据动静分离。商品可以往大流量支持场景,使用缓存伸缩,库存往小流量写场景堆存储伸缩。
按照数据冷热程度分离。
商品库会hive表捞删除1年的商品,通过kafka推给业务删除商品库的相关数据并存储到hbase中,hbase提供只读能力。
集群
服务层的无状态化k8s集群。可扩容支持大促流量,负载均衡业务无感知。
双11等大促时,商品中台需要两倍以上的k8s实例做压测和保障,可扩容并依赖dubbo的负载均衡支持业务。
有状态的存储集群可以扩容,并通过2种方法识别到数据在哪个分片上。
元数据服务器。
商品中心使用hbase,依赖meta节点获取rowkey的分布,扩容无须业务感知。
redis cluster的槽迁移,依赖槽的路有扩容同样无须业务感知
路由算法。商品中心客户端路由缓存使用一致性hash,扩容通过平台配置,业务无须修改代码
安全性
校验
字符串强校验。不拼接字符串作为sql入参
下单流程对手机号会进行正则校验,防止sql注入。
加密
单向hash加密(MD5、SHA),对称加密(DES、RC),非对称加密(RSA)等。
订单的用户信息属于用户隐私,需要通过AES加密之后存储在DB,防止泄漏。
风控
规则引擎+统计模型识别黑产。
交易中台下单前过风控拦截,下单后、支付前后通知风控分析用户行为。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/笔触狂放9/article/detail/209439
推荐阅读
article
CTFSHOW
_
WEB
入门1-112
_
ctfshow
的
bird
...
gitsvnhg对于此类题目应该比较敏感网站备份信息泄露.zip.rar.7z.tar,gzbak.swp.txt···...
赞
踩
article
初学
HTML
&
CSS
——
form
标签...
使用get方式提交表单,不安全。
初学
HTML
&
CSS
——
form
标签 <!DOCTYPE ...
赞
踩
article
矩阵
的
转置和
旋转
_
旋转
矩阵
的
转置...
转置:转置很简单
的
,就是a[i][j] -- > a[j][i]即可。可以开辟一个新
的
二维数组。b[i][j] =...
赞
踩
article
Pandas
常用操作,多
个
Excel
合并
成1
个
Excel
_
pandas
合并
多
个
excel
...
Python所有方向路线就是把Python常用的技术点做整理,形成各
个
领域的知识点汇总,它的用处就在于,你可以按照上面的...
赞
踩
article
git
从入门
到
卸载
_
git
卸载
...
git
从入门
到
卸载
_
git
卸载
git
卸载
git
是什么? 从
git
的官网Git可以找
到
: Gi...
赞
踩
article
Python
语法
高亮
显示
和
格式化
库之
pygments
使用详解...
在软件开发和编程领域,代码是我们的主要表达方式。因此,对于代码的可读性和可理解性至关重要。为了提高代码的可读性,代码
语法
...
赞
踩
article
pandas
取
excel
中
的
某
一列_
利用
pandas
处理
excel
表格...
这不是一篇详细介绍
pandas
的
文章,只是我在
利用
python处理
excel
表格时找到
的
一些临时方案,为了避免忘记,记录...
赞
踩
article
虚拟机
安装Windows
Server
2003...
工具:1、VMware Workstation2、Winsows
Server
2003光盘映像文件 (.iso)准备:...
赞
踩
article
【
python
实现】
爬楼梯
...
假设你正在
爬楼梯
。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意...
赞
踩
article
python
在
json
文件
中查找指定
数据
_
Python
中
json
的
取值 如何使用
python
提取js...
python
中为什么用
json
有什么作用如何用
python
读取
json
里面
的
值啊我爱你,所以我给了你伤害我
的
权力,只要我...
赞
踩
article
xss
.
pwnfunction
.com靶机
Warmups
...
通关要求弹出警告框alert(1337)没有用户交互不能使用外链接在chrome中测试。
xss
.
pwnfunction
....
赞
踩
article
Python
读取
excel
中的一(多)列并转为数组_
pandas
读取
excel
数据
转换成
数组...
Pandas 是
Python
语言的一个扩展程序库,用于
数据
分析。Pandas 可以从各种文件格式比如 CSV、JSO...
赞
踩
article
基于
SpringBoot
+
vue
的
学生
成绩
管理系统
设计
与实现(源码+LW+部署文档等)_基于
vue
+...
该系统基于B/S即所谓浏览器/服务器模式,应用java技术,采用
springboot
框架,选择MySQL作为后台数据库。...
赞
踩
article
ProxMox
设置
国内
源
_
proxmoxve
8配置
国内
软件
源
...
删除企业
源
rm -rf /etc/apt/sources.list.d/pve-enterprise.list#下载秘钥...
赞
踩
article
DCFL
: for
Oriented
Tiny
Object
Detection...
检测任意方向的微小目标给现有的检测器带来了巨大的挑战,特别是在标签分配方面。定向微小目标的极端几何形状和有限特征仍然会导...
赞
踩
article
《
Prometheus
+
Grafana
实践派》
专栏
介绍
_
grafana
飞书
通知
...
本
专栏
您将学到企业级监控的选型
Prometheus
的基础知识
Grafana
的基础知识快速搭建
Prometheus
+Gra...
赞
踩
article
MFC
中
文件
读写操作
_
mfc
中
读取
文件
数据
时如何去掉回车和换行再把
数据
保存到变量
中
...
由于要写个游戏工具方便编程,要用到
文件
类的操作,看到这篇文章不错,特转载 计算机室如何管理自身所存放着的大量的信息的呢...
赞
踩
article
免费
的
同步
软件
syncthing
,建立自己
的
同步
盘...
syncthing
是一款P2P
的
同步
软件
,和网盘不一样,它是去中心化
的
。个人几台电脑之间,或者单位
的
局域网同事之间共享文...
赞
踩
article
CleanMy
Mac
X4.14
.7永久免费
Mac
电脑
清理
和
优化
软件...
CleanMy
Mac
X 的应用程序管理功能可以帮助用户方便地卸载不再需要的应用程序,并删除其残留文件,从而保持系统的整...
赞
踩
article
HTML
静态
网页
成品作业(
HTML
+
CSS
)——我的家乡
北京
网页
设计制作(7个页面)...
HTML
静态
网页
成品作业(
HTML
+
CSS
)——我的家乡
北京
网页
设计制作(7个页面)
HTML
静态
网页
成品作业(
HTML
+...
赞
踩
相关标签
前端
php
网络安全
运维
html
css
矩阵的转置
矩阵的旋转
pandas
excel
python
git
开发语言
pandas 取excel 中的某一列
操作系统
LeetCode
python在json文件中查找指定数据
xss
spring boot
vue.js
java
学生成绩管理系统
大学生项目实战
mysql数据库
课程设计