大厂的供应链采购系统设计

news2025/1/18 20:32:16

关注我,紧跟本系列专栏文章,咱们下篇再续!

作者简介:魔都技术专家兼架构,多家大厂后端一线研发经验,各大技术社区头部专家博主,编程严选网创始人。具有丰富的引领团队经验,深厚业务架构和解决方案的积累。

负责:

  • 中央/分销预订系统性能优化

  • 活动&优惠券等营销中台建设

  • 交易平台及数据中台等架构和开发设计

    目前主攻降低软件复杂性设计、构建高可用系统方向。

参考:

  • 编程严选网

0 前言

公司发展面临商业环境变化,如流量模式、竞争格局和公共卫生事件。采购系统作为供给端核心系统之一,做好顶层设计并持续进行系统演进,才能适应剧烈的业务变化,服务好最终用户。本文从定义宏观设计蓝图落地系统持续演进展开整个采购系统架构过程,看业务系统架构设计过程。

1 定义宏观

不断聚焦,推演采购系统的底层架构关键点。

1.1 最大的变化和不变

商业定位,确定架构底层逻辑:

  • 变化:企业面临商业环境变化及自身发展诉求。企业商业定位面临调整,业务范围可能扩张或收缩,业务模式可能微调或颠覆。架构重心发生极大变化,需提前规划调整,不然系统和业务发展间隙越大
  • 不变:商业定位决定公司长期走向,商业定位一旦确立有长期稳定性,以一个明确定位来占领用户心智,同时业务都围绕定位展开

如定位平台模式和品牌模式的电商公司,业务特点和架构特点匹配如下:

业务特点架构特点
平台模式(如:天猫)撮合大量商家和消费者,关注交易量,关注GMV。入驻品牌多,品类广,更关注商品交易属性,基本不关注生产制造起量快,得确保系统设计易扩展,无论表拆分、机器扩容。营销玩法多变,为快速响应业务,需灵活前台设计和坚实中后台
品牌模式(如:严选)关注忠诚用户,关注利润率,以品为核,从设计制造环节抓起,到商品交付给用户,乃至售后都兼顾。但品类数量增长慢,资产重需向多渠道铺货,业务前端要匹配各平台玩法。业务后端从商品企划到设计、生产、制造、运输、仓储的链条极长,流程联动,数据准确性保障都要考虑。为匹配业务前端,往往要做渠道库存、渠道订单这样的抽象设计

1.2 全链路视角:深度协同 &双向驱动

  • 商业链条极长,选品,采购溯源,计划下单,合同签署,备料协同,生产制造,品质管控,物流运输,仓储管理,退供翻新,金融结算等环环相扣
  • 协同角色极多,从商品开发,采购,计划,品控,关务,财务等密切合作
  • 层次错综复杂,从传统的供应链三流:实物流、信息流、资金流和商流,纵横交错

供应链业务和技术是互咬齿轮:

  • 前期业务驱动,大量场景需线上化,完成初期流程闭环和数据积累
  • 发展一定阶段,大量技术驱动场景,展现数智化特征,如服务供需平衡的销量预测、智能补货,服务库存平衡的采购分仓、仓间调拨

整体供应链采购发展是技术和业务双驱。架构设计过程,要认清当前系统和业务的发展阶段,平衡好当前诉求和未来发展,做好业务支撑同时,挖掘数智化机会,为变化留有余地同时拒绝过渡设计。

1.3 找准系统演进关键特征

以准确性、可用性为基:

img

理清业务特点后,需圈出采购系统关注的技术特征及这些关键特征的演进目标:

  • 可用性。作为履约核心链路,多角色日常工作需频繁操作在线系统,能全天候完整为用户提供服务能力是基础和关键
  • 准确性。业务链路长(从计划下单到采购请款结算中间要经多个关键流程),业务完结周期长(短则几天,长则一年多),数据准确有很大挑战。又因采购是关键的成本结算链路,所以对数据准确性有很高要求

需进一步量化这些架构特征,用以观察和保证系统是向目标方向拉动。如关注服务可用性,可用在线率、故障率俩指标。指标构建落地要结合公司技术,若有SLA/SLO/SLI相关服务质量平台,可直接借力,把指标纳入架构观察大盘,而非重复构建。类似也可借力自动化测试平台,构建一些性能、安全性的架构特征的量化观察指标。

2 设计蓝图

确定阶段性目标架构。理清关键底层逻辑后,可开始确定阶段性目标架构蓝图。如RUP 4+1视图,本文谈如下视角

2.1 限界上下图

分治之基、扯皮之盾:

分治,大系统小做。采购系统包含跨境采购、采购执行、退供/翻新等大量业务,同时要和大量外部系统如商品中心、供应商、财务等交互,这种业务场景多,和外部联动多的系统,只有界定好内外部边界,才能将系统和人员职责拆分到位。

系统的服务化粒度可直接映射参考内部子域划分。如系统大小合适,系统负责人和系统之间一对一配比最好。

2.2 业务架构图

业务场景和系统能力平滑匹配:

业务架构图要将业务、系统思考清,图要明确横向纵向的意图。

① 横向:表达业务流程
  • 利益相关者:可通过用户利益关注点不同做用户群体划分,可通过角色来抽象划分后的用户
  • 横向业务闭环:业务最终必定服务用户,所有利益相关者的关注点应该在每个横向层次上得到承载和体现
② 纵向:表达能力分层
  • 纵向关注拆解,从“业务愿景”不断拆解到一个个细小的‘业务能力’载体
  • 分层,对拆解过程进行抽象,归纳,提炼 4 层表达结构:场景层、产品功能层、系统能力层、业务模型层

场景分析是关键。业务架构产出靠不靠谱,其中一个因素就是业务域下的作为输入场景是否考虑清晰,是否覆盖全面,即‘场景分析’是否到位。该层是基础,至于分层业务架构产出,如L0,L1,L2层可在该基础做抽象和结构化。

3 落地系统

有层次,有节奏的构建系统:

3.1 一层:横向扩张

以域为核心,打造系统版图:

搭建业务和系统大的框架结构,做业务域级别的覆盖和服务系统级别的落地。供应链采购作为相对成熟的业务,可参考业务侧整体版图来预判系统形态。

然后结合当前系统和业务现状,规划系统发展路径。若新需求不在当前子域,可考虑将新的系统直接构建出来,承接这块业务需求,以满足未来发展。若有板块内的关键子域落入其他板块,可边界治理,划回业务和系统能力,划出不属于采购系统的,以保证规划整体性和系统内聚。

3.2 二层:垂直深挖

精细化场景覆盖:

多角度验证场景完整性,做场景级业务覆盖和系统能力级别的补全。业务域初步搭建成型后,在支撑基本业务流程基础上,不断挖掘用户在成本控制、提效、体验的深度诉求,迭代细分场景以丰富系统。如审批域:

  • 可提供专门服务紧急场景的紧急审批能力,除了几个关键节点审批,其他日常审批节点都绕过,极速完成审批
  • 也可根据便携化审批诉求,提供移动审批

3.3 三层:自动化 &数智化

当前的终极阶段,需长期思考探索。在精细化做了段时间后,系统有一定成熟度基础,团队也对业务有深入理解,可挖掘自动化&数智化机会。

如探索个性化流程场景:为不同业务方个体搭建个性化采购流程。关键思路,采购是重流程系统,而有些流程节点的设计是在风险控制和效率间博弈,如某些审批节点。而每个业务人员个体靠谱度不同,若能为某些靠谱业务人员跳过某些主要基于风险控制考量的节点,极大提升流程效率。

4 持续演进:动态平衡

img

目标架构,只是某时间对架构的理想状态的判断,当一些关键因素变化,目标架构需及时调整,而变化是持续的,所以目标架构其实也是连续变化的。当目标架构变化后,会开启新一轮定义、设计和落地,所以系统能力和需求的匹配一直处于一个动态平衡中。如双十一说明市场环境变化导致业务变化,而业务变化后系统侧需要做出调整:

  • 市场变化:本年双十一销售高峰除当天,还有‘11.1-11.3’,形成 2 个销售波峰,波峰之间有 7 天缓冲

  • 业务变化:对采购侧业务方,这市场变化,多‘一次复盘,一次补货’

    • 一次复盘:‘11.1-11.3’大促后,可快速复盘下当前采购量和目标偏差,调整关键数据如大促系数(大促期间对比平销期采购量倍数)
    • 一次补货:复盘后发现一些采购量偏差、一些爆品缺货风险
  • 系统变化:一波大促变两波,对流量、系统容量需重新评估设计。可提供一些数据辅助决策工具帮助业务快速‘11.1-11.3’复盘,和‘11.11’采购量重新预测。最后提供紧急补货工具,缩短采购履约时间,完成偏差采购量补货

5 总结

供应链这种B端系统门槛高,对架构师业务深度、技术深度提出双向要求,埋头做系统可不行。将业务敏感度和架构方法论结合,用发展动态眼光看,才能发现真正技术价值和业务价值。

本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

嵌入式CAN通信协议原理(下)

本篇文章结合实际CAN控制器继续介绍协议相关的内容,还有示例讲解。 好了,继续吧! 二. STM32 CAN 控制器介绍 STM32 的芯片中具有 bxCAN 控制器 (Basic Extended CAN),它支持 CAN 协议 2.0A 和 2.0B 标准。 该 CAN 控制器支持最…

【JAVA】计算机软件工程人工智能研究生复试资料整理

1、JAVA 2、计算机网络 3、计算机体系结构 4、数据库 5、计算机租场原理 6、软件工程 7、大数据 8、英文 自我介绍 1. Java 1. == 和 equals的区别 比较基本数据类型是比较的值,引用数据类型是比较两个是不是同一个对象,也就是引用是否指向同 一个对象,地址是否相同,equ…

【Java】零基础蓝桥杯算法学习——线性动态规划(一维dp)

线性dp——一维动态规划 1、考虑最后一步可以由哪些状态得到,推出转移方程 2、考虑当前状态与哪些参数有关系,定义几维数组来表示当前状态 3、计算时间复杂度,判断是否需要进行优化。 一维动态规划例题:最大上升子序列问题 Java参…

【C++第二阶段-重载-关系运算符函数调用】

你好你好! 以下内容仅为当前认识,可能有不足之处,欢迎讨论! 文章目录 关系运算符-重载-判断相等函数调用运算符重载 关系运算符-重载-判断相等 场景:两个对象,若有年龄和性别的不同,是否可以直…

算法学习——LeetCode力扣贪心篇1

算法学习——LeetCode力扣贪心篇1 455. 分发饼干 455. 分发饼干 - 力扣(LeetCode) 描述 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[…

android 控制台输出 缺失

问题 android 控制台输出内容缺失 详细问题 笔者进行android开发,期望控制台打印Log日志或是输出内容 Log.i("tag","content");或 System.out.println("content")但是实际上,上述内容并没有按照笔者期望打印 解决方…

【sgSearch】自定义组件:常用搜索栏筛选框组件(包括表格高度变化兼容)。

sgSearch源码 <template><div :class"$options.name" :expand"expandSearch" :showCollapseBtn"showCollapseBtn"><!-- v-clickoutside"(d) > (expandSearch false)" --><ul class"search-list"&…

代码随想录算法训练营Day57|647. 回文子串、516.最长回文子序列、动态规划总结

目录 647. 回文子串 前言 思路 算法实现 516.最长回文子序列 前言 思路 算法实现 动态规划总结 动规五部曲回顾 动规各小专题问题 647. 回文子串 题目链接 文章链接 前言 本题利用动态规划求解时&#xff0c;dp数组的定义与前面的就有些不同了&#xff0c;是难点之…

Python算法题集_翻转二叉树

Python算法题集_翻转二叉树 题226&#xff1a;翻转二叉树1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【DFS递归】2) 改进版一【BFS迭代&#xff0c;节点循环】3) 改进版二【BFS迭代&#xff0c;列表循环】 4. 最优算法 本文为Python算法题集…

黄金交易策略(Nerve Nnife.mql4):利用锁定单消除保留单

完整EA&#xff1a; Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客 趋势突然转变有大约30%的概率会产生一张锁定单&#xff0c;反复转变之后难免就会形成几个保留单了&#xff0c;可以选择一张与保留单同向同大小&#xff08;接近也行&#xff09;的单&#xff0c;去消除这…

详解Python中的str.format方法

字符串的内置方法大致有40来个&#xff0c;但是一些常用的其实就那么20几个&#xff0c;而且里面还有类似的用法&#xff0c;区分度高比如&#xff1a;isalpha,isalnum,isdigit&#xff0c;还有一些无时不刻都会用到的split切分&#xff0c;join拼接&#xff0c;strip首尾去指定…

深度学习:Pytorch安装的torch与torchvision的cuda版本冲突问题与解决历程记录

今天不小心将conda环境中的一个pytorch环境中的torch包给搞混了&#xff0c;将其更新了一下&#xff0c;发生了一些问题&#xff1a; 当时运行了一下这个代码&#xff1a; pip install torchvision --upgrade 导致了环境中包的混乱&#xff1a; 只能说欲哭无泪&#xff0c;当…

代码随想录day21--回溯基础

理论基础 回溯法也可以叫回溯搜索法&#xff0c;它是一种搜索的方式。我们在二叉树中也多次提到了回溯。回溯是递归的副产品&#xff0c;只要使用了递归就会有回溯&#xff0c;我们我们就可以笼统的将回溯函数称为递归函数 回溯法解决的问题 1.组合问题&#xff1a;N个数里面…

IMX6ULL移植U-Boot 2022.04

目录 目录 1.编译环境以及uboot版本 2.默认编译测试 3.uboot中新增自己的开发板 3.编译测试 4.烧录测试 5.patch文件 1.编译环境以及uboot版本 宿主机Debian12u-boot版本lf_v2022.04 ; git 连接GitHub - nxp-imx/uboot-imx: i.MX U-Boot交叉编译工具gcc-arm-10.3-2021.0…

《剑指Offer》笔记题解思路技巧优化 Java版本——新版leetcode_Part_2

《剑指Offer》笔记&题解&思路&技巧&优化_Part_2 &#x1f60d;&#x1f60d;&#x1f60d; 相知&#x1f64c;&#x1f64c;&#x1f64c; 相识&#x1f353;&#x1f353;&#x1f353;广度优先搜索BFS&#x1f353;&#x1f353;&#x1f353;深度优先搜索DF…

esp8266-01s WIFI模块使用(一)- AT指令

时间记录&#xff1a;2024/2/15 一、注意事项 &#xff08;1&#xff09;使用英文双引号表示字符串数据 &#xff08;2&#xff09;默认波特率115200 &#xff08;3&#xff09;AT指令以“\r\n”结尾 &#xff08;4&#xff09;3.3V电源接口先连接单片机的3.3V&#xff0c;如…

Spring 用法学习总结(二)之基于注解注入属性

Spring学习 5 基于注解方式创建对象6 基于注解注入属性 5 基于注解方式创建对象 注解是代码的特殊标记&#xff0c;可以简化xml配置&#xff0c;格式&#xff1a;注解名称(属性名称属性值&#xff09;&#xff0c;可以作用在类、方法、属性上 以下注解都可以创建bean实例 Com…

VS Code中的JDK设置

在VS Code使用中&#xff0c;如果机器只安装了一个版本的JDK版本&#xff0c;一般不需要特别关注JDK 的配置&#xff0c;但是在以下状况下&#xff0c;需要对JDK进行特别的配置&#xff1a; 机器有多个JDK版本&#xff0c;不同的项目使用不同的JDK版本项目使用的JDK版本较低&a…

【web | CTF】BUUCTF [护网杯 2018] easy_tornado

天命&#xff1a;这题是框架性的漏洞&#xff0c;Python的web服务器框架&#xff0c;应该已经比较古老了 开局先看一下三个文件 简单阅读后会发现&#xff0c;这里存在文件包含漏洞&#xff0c;可以直接读取文件&#xff0c;但是有一个哈希值校验 一开始我以为是扫描文件后得到…