美菜网技术体系发展
共 2987字,需浏览 6分钟
·
2021-06-16 12:55
美菜网作为一家B2B生鲜电商平台创立于2014年,如今已服务于300万家商户,遍布全国200多个城市。其发展不断深耕供应链、优化服务、完成了获客留存,为支持业务的持续迭代,其技术体系也在不断的发展。
美菜网技术体系从2014年到现在逐渐摸索出一套涵盖商城、供应链、物流三大业务方向,支持了在线toB、toC的自营模式和提供了三方的售卖、线上线下履约、配送的业务能力。
在2019年美菜网引入了中台化策略,目的是消除各业务线重复建设电商基础能力,提供统一的中台服务,包括用户、货主、商品、营销、交易、支付、搜索、推荐等能力,帮助业务快速迭代、优化业务。
在技术支撑层,提供适合电商业务场景的各种基础组件,如快速支持业务和中台的分布式系统、消息传递系统、混合缓存系统、动态扩容系统、资源管控系统、自动化监控和部署系统等。
在2019年,为进一步提供网站的数据和稳定性,实现核心业务链路的双活,通过数据备份提供了数据安全能力。
依托大数据能力不断驱动平台发展,通过埋点接入、日志汇总、主动采集等手段,建立了电商数据仓库。通过在线和离线数据挖掘、机器学习,构建了全链路数字化体系、智能分析、决策辅助体系、智能策略和业务链路赋能。
早期阶段
和传统电商平台不同,美菜业务涉及:用户下单 -> 供应商采购 -> 仓库分拣 -> 司机配送,链路较长,早期的架构还是一体化架构,一套数据库、一套代码,牵一发动全身,稳定性差,扩展能力低,交付周期长。
服务化阶段
之后系统进行了服务化拆分,首先将商城、物流通过MQ解构开,后续将其他系统服务化,所以服务做了分层处理,明确了系统边界。
大促是考察一个系统稳定性的试金石,单体系统时期是不敢做活动的,经过服务化拆分系统稳定性大大提升。
每次大促前,商城、供应链、仓储物流、支付财务全链路所有系统的研发需要自查、压测、梳理可能存在的问题环节。测试进行全链路回归测试,验证正确性。运维人员线上扩容,联系服务商提前准备CDN、宽带资源等。经过多次大促洗礼,美菜技术体系整体上完善和健全了,进入了一个新阶段。
技术基础设施完善
技术基础设施包括了MQ、配置中心、任务调度中心等基础组件。主要看下MQ组件的迭代和发展。
美菜网历史上是多套MQ共存的,大数据团队使用Kafka、线上业务使用NSQ和RocketMQ。
多集群共存的问题:
维护成本和资源成本高:需要独立部署一套,资源成本高;
易用性差:需要知道topic在哪套集群上,客户端进行接入;
可靠性低:NSQ是多通道之间复制,其本身是单副本,存在消息丢失风险;
集群统一迁移方案:
综合考虑希望以RocketMQ统一整体MQ方案,RocketMQ可以支持如消息延迟、顺序消费、事务消息、消息回溯等基本功能,基于多种刷盘和同步机制可以实现消息可靠性,公司主要技术栈为java,一脉相承。
迁移方式:
RocketMQ使用仅需要依赖一个jar,NSQ需要使用http协议。
Producer通过Http连接NSQ,对于生产者需要提供一个http网关,用来接收业务生产的消息,转发到RocketMQ。对于消费者,实现一个transfer工具,将消息透传到NSQ,这样对消费端是无感的,生产完成迁移后,消费者可以逐步往RocketMQ上迁移了。
多语言支持:
消息生产提供http网关接入;消费处理器,不断从RocketMQ拉取消息,通过消费网关的http方式发送到消费端;基于topic做SLA维度的路由、流量调度等工作。
稳定性:
1. 集群隔离:按照SLA隔离出业务集群、日志集群、计算集群。业务集群采用主从同步、同步落盘,计算集群采用主从异步、异步落盘;日志集群采用单主结构;
2. 完善故障预案:节点故障时:可以快速下线,一键扩容;主节点挂掉:从节点提升为主节点,主节点改为只读;
3. 完善监控报警机制:生产延迟告警、TPS告警、TP99告警等多维度指标数据告警;
同城双活:
如果所有数据都在一个机房,一旦这个机房出现问题,数据就有丢失风险,不能实现数据的可靠性;单机房维度,资源容量有限,多机房可以分单流量。
实现双机房容灾可以有两种方案:
同城冷备:备用服务不对外提供功能,只有当在线服务流量出现问题时才切换流量到备用服务,但当出现问题时一般不敢切流量。
同城双活:平时就是双机房对外提供功能,在出现问题时切掉故障机房流量,实现真正的容灾目的。
有了双活机房的目标后,有如下几点诉求:
机房就近,生产者在a机房的话,生成后的数据最好也在a机房的broker里面;消费者在b机房的话,消费者的消息最好也在b机房的broker里面;
平滑迁移,支持按topic粒度的逐步平滑迁移能力;
故障发生时,可以快速切换;
关键设计:
就近识别算法:
IP段识别方式:不同IP段表示不同机房,这个方案对公司网络要求高,公司网络调整时,也需要修改算法、升级客户端;
协议层增加机房标识:在生产和消费的client通信的时候都添加所在机房标识,改造成本高;
broker名称增加机房标识:客户端clientID增加机房标识,改造成本低,对MQ核心功能无入侵;
数据复制:
实现主-从-从结构,基于slave异步复制,减轻master节点的压力;
故障预案:
机房或链路出现问题时,需要关闭一层机房的写权限;机房接入层故障,无影响;
后续需要提升的包括,无人值守的运维能力;按SLA进行自动topic路由调整能力等;
数据驱动
新阶段主要推进了中台建设和数据驱动。
基于区块链技术实现了业务全链路数字化,美菜积累了大量餐厅食材需求、生鲜供应链数据、农产供给采购需求数据等,成为了美菜最优价值的数字资产。
在业务全链路数字化基础上,美菜大数据实现了全链路智能分析与决策辅助。比如销售智能助手、智能营销系统、采购智能辅助、区县指挥等辅助系统,大幅提高了业务链路各环节的运营效率,支持了业务快速增长。
同时业务链路各环节策略建模与自动化,开始赋能业务。餐厅商品需求模型、商品销量预测、商品区域价格弹性、市场供需指数、供应商评级画像等基础决策在业务上开始赋能。
总结来说,美菜网经历了3个主要阶段。
公司初创、业务规模小。这个阶段的主要目标是让业务运行起来,系统相对简单,依托业务现状,开发了一些工具;
搭建完整技术体系。建立完整业务闭环,包括营销、商品采购、供应链、物流配送等业务及系统能力;
中台化及数据驱动阶段。为降低个业务线重复建设,提高效率,驱动整个体系中台化,同时做了新技术的引入;
赋能合作伙伴
通过数据驱动,为供应商提供了“天眼”功能。通过天眼可以实时看到供应商每天的销售额、采购数量、销售数量、库存数量、用户复购率等情况,识别整个环节中哪些可能存在问题。
同时可以把履约的客户反馈情况及服务诊断情况进行反馈,每个合作伙伴可以看到客户的满意情况,退货、投诉、缺货等信息,帮助供应商自我改进。
天眼可以与美菜供应链预测协同,让供应商可以提前洞察可能的用户需求,提前指定、调整采购计划,打造智慧供应链。