1.所在项目组为营销存储服务(Marketing Inventory Service),简称Mis,项目主
要业务是向外提供api接口来访问marketing data(每个商品的信息),对客户端屏蔽
掉内部数据存储和处理的复杂性。支持高效低延迟的根据item ID, seller ID, category
ID的查询,也可以支持自定义查询标准UDF(User Defined Functions)。mis同样
也支持stream流推送服务,消费者经过注册后,可以监听到item所发生的改变,例如
new listing、price change 和item expirations。
其业务核心主要是由大数据工程(spark)和service工程组成,数据量化目前大约
40亿条左右,由关系型数据库tidb负责存储,主要是商品信息,如
price,item_id,tax等将近130个字段。内部复杂性来自于大数据量以及对这些数据
量的不同的访问方式,通过NuKv缓存数据库为客户端带来高效低延迟的数据检索,同
时在关系型数据库方面为表字段添加主键索引和组合索引。在大数据领域并没有单一
的解决方案,因此我们依靠不同的数据库处理方式来实现它们。我们这些方案用来解
决数据的不同和一致性挑战,给客户端提供方便来访问我们的数据。
性能方面,我们通过上述这些手段,外加service端的集群部署(630个节点),目
前Mis支持百万级并发,数据延迟保持在50毫秒以内。
2.涉及技术栈:
Scala,Java,Spark,Flink,Hadoop,Tidb,Nukv,kafka,DeltaLake等。
3.我在项目组所做的工作。
参与设计Spark job业务流程,并编写相关核心Spark job业务代码,例如superset
job上游数据流,generic stream job实时数据流,dump job加载Tidb数据
流,batch_correction job批量比对数据流,blacklist job敏感数据过滤流等。
参与设计Tidb dao层面的代码业务工程,主要负责消费kafka数据,使得数据落
盘,然后同样发送kafka消息更新缓存,使业务代码具有通用性,不止适用于mis,还
适用于其他多项业务处理。
设计并编写spark job的分布式锁。
设计并编写kafka在多线程和单线程条件下的限流。