菜鸟供应商服务平台(入驻中心)

我要开发同款
繁译2024年05月10日
170阅读
开发技术redis、spring、rocketmq、javamysql
所属分类 PC网站

作品详情

菜鸟供应商服务平台(b.cainiao.com),包含了入驻、合同、采购、履约、绩效等部分,提供了包括企业入驻,合同签订,招投标、询报价,绩效考核奖罚(查询,申诉)等功能.

本人在其中负责整个入驻中心的维护,迭代升级,以及完成业务需求.入驻中心包含面向商家的入驻流程页,以及面向员工的后台管理页-主数据中心(主数据中心是公司的核心项目之一).

商家的部分主要是入驻成为菜鸟的供应商.按照商家的入驻流程类型可分为首次入驻,非首次入驻,资质&个性化信息变更,以及企业信息变更(含实名认证/企业认证信息变更).经过人工审批后流程完结,完成入驻/资质变更&新增/企业信息变更等.可在"入驻中心-我的企业信息"页查看当前生效的企业信息.
后台管理页,涉及到了供应商各维度的列表查询,审核列表池,以及辅助入驻的相关功能,如邀请入驻-业务通过填写邀请人信息,以及邀请对象的公司名称,邮箱,手机等信息,向供应商发出邮件,短信邀请,附邀请链接,邀请供应商入驻,跟踪供应商的入驻进度.

技术层面,后端是使用Java开发的,基于Spring-Boot,JDK1.8,使用GitLab作为代码仓库,Idea作为开发工具,Maven做版本管理,定时任务SchedulerX2.0作为发起审批,完结审批的调度器,RocketMQ与合同中心交互生成签约信息(入驻的廉洁承诺函,信息安全承诺书),MySQL作为数据库,Tair作为缓解db查询压力的工具(阿里版本的Redis).
代码单测经历过最原始的Junit单测,到结合Mockito的方式,后为提高效率(在多个branch场景下,mockito的单测仍比较繁琐,需要根据不同分支写重复代码,费时费力),使用了Spock+Mockito的方式(这里用的Groovy语法了),代替之前的传统Junit单测.相较于传统单测,用例多,项目老的场景下,单测的运行时间从10min+缩短到2min,并且本地结合idea的插件JustTest可以方便查看用例运行情况,覆盖率,失败情况等.提高了单测效率.

难点:入驻中心是典型的多查询,少修改的系统.但是因为信息来源不单一(主数据中心作为菜鸟的核心应用之一,数据来源并不只是供应商入驻,还与其他系统有联动,如菜鸟的商业中心BusinessCenter,还有上游若干系统),仍要防止数据并发修改带来的不一致性.在主数据中心最终采用了单独的lock表,select for update使用mysql的行级锁,按照企业的唯一编码LeCode字段,为数据加锁,使用编程型事务,加锁后先查后改(改也根据数据来源,限定了修改范围),最后统一commit完成,且每次修改都在版本表记录了一次修改记录,并将修改请求的提交时间作为version,每次查询使用lastest version来保证查询的数据是最新的,修改完成还会更新redis中的信息.因为lock表独立于企业信息之外,对查询无影响.此外为了缓解查询压力,对企业信息做了拆分,单独梳理出了企业信息的所有索引字段(也是主要的查询字段)单独一张索引表,查询到信息后再根据索引字段对应的系统内企业唯一编码LeCode,逐一(或联表,看具体情况)查询出企业的其余信息,包装好后统一返回.总结一下,就是用加锁-mysql行级锁解决并发修改的问题,用本地缓存+redis+分表的方式缓解查询压力(查询按先本地缓存,没有再查redis,没有最终再查询db的次序).
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论