【系统分析师】高分论文:论大数据架构的应用
【摘要】
本文以我参与过的生鲜网购平台为例,闸述大数据架构在项目开发中的应用。某某公司的生鲜平台是一个以销售生鮮、酒水为主的平台,该平台面向的客户为酒店、食堂之类的买家。该项目有着并发高,数据量大的特点,这就需要平台能够处理实时的数据,并且保证数据的准确性。我以茶统架构师的身份参与了这个项目,并在这个项目中采用了 Lambda 架构去解决大数据的统计问题。在新的生鲜网购平台的 Lambda三层架构中,从加速层处理实时数据:以批处理层处理历史数据:服务层则根据加速层和批处理层结果进行处理,并快速响应请求。实践证明,Lambda 架构将实时的流式运算和历史数据的批处理计算分离,通过加速层的流式计算保证了数据计算的实时性,通过批处理层的计算保证了數据的准确性。项目最终顺利完成,我在得到了领导的嘉奖的同时,也对Lambda 架构有了更深的理解。
【正文】
随着中国互联网的飞速发展,很多商家逐渐把线下的生意搬到了互联网上,与此同时,人们也把自己的采购商品的习惯从线下搬到了线上。本公司作为一个以买卖生鲜的企业也不例外,也早已把业务搬到了线上。同时该公司又是一个以销售驱动为业务核心的企业,把销售的市场区域,划分为网格,每个网格由对应的销售经理负责。每个网格都有一定的特殊性,销售经理需要经常通过销售系统查看各个网格的销售情况以及各种销售指标,用以指导每个销售员制定销售方案。仓储系统可以根据销售数据分析每个仓库需要分配并囤积的生鲜品类及数量。然而,随着业务系统的扩张,
我们的订单量从之前每天几百张的订单量,增加到现在每天几万张的订单量,并且订单数量还在以很高的速率增长,预期在未来几年内达到每天超十万的订单量。因此2023 年,公司投入260万,重新开发了一套新的生鲜网购平台,用于以适应新的业务、具备更高的业务处理能力。我担任了该项目的系统架构师,并在这个项目里选择了 Lambda 架构来支持大数据的计算。以下便是我在项目中对 Lambda 架构使用的详细说明。
生鮮网购平台项目在处理统计数据方面有两个要求。第一,要能够处理实时的数据,对请求返回的结果要能反映实时情況。第二,由于历史的订单可能存在变动,比如说用户的退货,这种往往不能计算在有效订单中,所以我们需要在一段时间内定期对数据做批量处理,保证数据的准确性。而 Lambda 架构既能够处理历史数据又能处理实时数据,所以在生鲜网购平台项目中,Lambda 架构是处理统计数据的不二之选。
大数据开发主要的架构有 Kappa 架构和 Lambda 架构。其中 Lambda 分为加速层、批处理层、服务层三个组成部分。加速层以流式方式做处理实时数据,每次处理的数据量相对较少,处理速度快,处理时间短,能为系统提供低近乎实时的数据视图。批处理层用于批量处理历史数据,负责存储和管理不易改变的原始数据,并运行预定义的批处理作业来预计算结果。批处理层处理的数据集量大,处理时间长。服务层的作用是,汇总批处理层和加速层的处理结果,提供全面的数据视图,并对客户端的请求进行快速响应。
Lambda 加速层用于处理实时数据。从业务上米讲,财务部门认定5天以后的数据不会再改变,而最近5天的数据可能因为客户的退货,或者补增订单等的原因导致销售订单会发生改交,所以我们以S天作为一个时间点,对城近5天的数据做流式处理,而利下的数据使用批处理层进行修正。通过跟业务人员沟通,他们也允许在这段时间内的一些指标性数据存在一定的误差。教照这个思路,我们指定了实现方条,金订单学例,当每次产生有效订单,生成订单的服务在把订单借息在入数据库的同时,也会传入Kafka 消息队列中,而 Spark 服务器从Rafka 中该取数据,经过流式处理,不断地把结果更新到 Redis 中去。并且,我还部署了多台 Spark 服务器,不但保证了 处理的效率,还保证了 Spark 服务的高可用性。
Lambda 批处理层用于处理历史数据。生鲜网购业务的复杂性是客观存在的,流式处理的数据也会因为业务的复杂,在统计时产生一定的误差。所以,需要把最近5天之外的数据放在批处理层重新计算:也因为5天之后的数据不会产生变动,所以我们认为这次生成的数据是最正确的数据。为实现这样的功能,我负责搭建了 Hadoop,编写处理脚本,从Mysal 数据库中读取数据,然后使用 MapReduce 对数据进行统计,最终生成年度数据,月度数据和周数据,并将它们存入 Mysql 数据库中。这个过程在每天凌晨4点钟运行,并在运维人员监督下完成。然而这个服务也产生过一些问题,由于批处理时间稍长,期间读取数据库过于频繁,导致前端业务产生一些性能问题,所以我们只对最近一年的数据进行重新统计。一年之外的数据基本没有人再查询调用,所以我们将这些数据从 Mysql 中提取出来转存进 HDFS 中归档。这样大大降低了数据库的查询时间,也为后面其他的数据分析任务奠定了基础。
Lambda 服务层根据加速层和批处理层计算结果进行简单计算,并快速响应请求。举个简单的例子说明,销售人员有时会希望查询自己当月的 KPI 绩效,只需要通过 APP 客户端访问 Spring Boot服务。从 Redis绶存中取出最近 5天的统计数据,以及从数据库中取出当天凌晨通过批量运算生成的本月数据,相加便是最终的结果,然后将结果返回给请求的 APP 客户端。通过这 类简单的计算,销售人员不但可以查询自己当前网格的销售情况,管理人员也可以看到自己管辖下的销售人员的工作情况,而领导也可以通过这些数据快速地看到一些战略指标。仓储人员还可以通过这些数据预测每个仓库需要分配的生鲜,滅少了转运的菜品折损,为公司大大降低了成本。这些操作并不需要经历太多的计算,只需要借助这些预处理的数据,就可以很快地得出需要的结果。这个项目经历了6个月的时间,项目也成功上线。Lambda 架构生鲜网购平台不仅可以提供公司领导期望的数据分析功能,还能完成大规模订单数据统计,实现用户行为分析。这是我第一次使用 Lambda 架构,在领导的信任和同事的支持下,我最终完成了任务,最终完成了公司领导赋子的研发任务。而我对 Lambda 架构也有了更深刻的理解。