使用函数计算,数禾如何实现高效的数据处理?

作者|邱鑫鑫,王彬,牟柏旭

公司背景和业务

数禾科技以大数据和技术为驱动,为金融机构提供高效的智能零售金融解决方案,服务银行、信托、消费金融公司、保险、小贷公司等持牌金融机构,业务涵盖消费信贷、小微企业信贷、场景分期等多个领域,提供营销获客、风险防控、运营管理等服务。数禾科技通过自主开发的消费信贷产品,连接金融机构与普罗大众,赋能金融机构数字化转型,迎接中国消费升级的大潮。
数禾当前有三款主要产品,还呗,还享花,小店邦。每款产品都有大量的受众,每天会产生大量的应用日志,数据通过压缩后归档到阿里云 OSS 存储,以达到最优的存储成本。

低效的数据处理

应用日志通过 SLS 收集,压缩并归档到 OSS,整个链路都非常顺滑。但日常有些业务需要查看详细的应用日志,由于日志收集会将 APP 上不同应用的日志都打到一起。因此,获取某个应用的日志,需要从 OSS 解压大量的文件,并从中过滤出特定的应用,才可以进一步分析排查。这个过程在实效性和数据处理效率上都存在很大的问题,为此,数禾运维团队计划从源头重构整个任务处理链路,以求以最低的开发成本,最高的处理效率,最优的资源费用,最好的扩展性打造高可用,易升级,低维护的解决方案。
首先想到的采用容器自建的方案。自建的处理程序从 Kafka 获取数据,并负责数据的处理,K8s 集群保证任务的弹缩,配合自建的发布平台,初步能够满足设计的需求。
该方案的优势在于,对于 K8s 的使用和任务发布平台,数禾运维团队都有了不少的积累,整体实施起来难度会比较小。但对比设想的链路目标,却还有些欠缺,主要表现在:

  1. 任务开发成本较高:从 Kafka 获取数据,数据的业务处理、异步压缩上传,任务的发布更新系统对接,K8s 的弹缩策略,都需要研发人员全新开发。
  2. 链路弹性有限:一是 K8s 通过指标弹出资源速度需要10+s,对于突发的日志流量,可能会出现资源弹出不及时的情况;二是 Kafka Topic 数据处理的并发度受限于 Topic Partition,当消费程序达到 Partition 数目时,消费程序没法继续水平扩大并发度。
  3. 资源利用率不够极致:在业务低峰期,特别是夜间,存在流量很小甚至是无流量的时段,但处理程序还是得最小保持1个实例的运行,造成了一定的资源浪费。
  4. 升级维护工作依然很多:业务处理逻辑的修改,发布平台的更新对接,K8s 平台的弹缩规则等,都需要持续的维护。

就在数禾运维团队陷入选型沉思的时候,阿里云函数计算(后面简称FC)团队的交流让数禾运维团队眼前一亮,阿里云函数计算在 Kafka->FC 的链路已经打磨多时,对于数禾的业务需求,正可以使用到函数计算很多的已有功能,数禾的研发团队只需要专注在自身的业务处理逻辑,就能快速的搭建一套高可用,易升级,低维护的任务处理链路。

函数计算的出现恰逢其时

函数计算是事件驱动的全托管计算服务。使用函数计算,客户无需采购与管理服务器等基础设施,只需编写并上传代码或镜像。函数计算会准备好计算资源,弹性地、可靠地运行任务,并提供日志查询、性能监控和报警等功能。
通过函数计算自带的 Kafka 触发器和定时触发器,数禾运维团队架构出了一套理想的解决方案。架构图如下:

函数的处理逻辑如下:

  1. 数据拆分函数:通过 Kafka 触发器触发,触发器会将 Kafka 数据攒批,以batch的形式发送到函数计算,函数计算处理逻辑负责将数据块通过标识字段拆分,同一个应用的数据汇聚到一起,在 NAS 目录形成独立的文件。属于 io 密集型操作。
  2. 数据压缩函数:在一批数据到达函数计算拆分汇聚之后,先对数据进行压缩,然后将压缩后的数据追加到 NAS 目录对应的文件,在写 NAS 前,借助 Redis 处理并发锁的问题,大大减少了小文件的数量,属于算力密集型操作。
  3. 数据上传函数:通过定时触发器触发,将第二步压缩完成的数据上传到 OSS 对应目录,然后清理本地目录。属于 io 密集型操作。

通过将处理逻辑拆分,将对资源要求不同的操作拆分到不同函数,实现了每个函数资源利用率的最大化,降低了总体实现的费用成本。
相比通过 ECS/K8s 自建的方案,优势还是十分明显的:

从对比可以看出,采用函数计算的方式,在开发效率,弹性,升级部署,费用成本方面,相对 ECS/K8s 自建方案,都有明显的优势。

落地中的问题

Serverless 理念跟整个任务的架构十分的契合,但在落地中还是可以看到有些处理不够优雅的地方,总结起来主要有两处:

  1. 函数计算同步调用的攒批大小是16M,异步调用的攒批大小是128K,为了降低调用函数的计算频率,达到更好的攒批效果,从而在成本和性能上都达到好的效果,使得触发器配置时只能配置同步调用,同步调用时,函数计算侧的并行度取决于调用方,这就要求触发器任务配置多任务分片,造成了一定的资源浪费。
  2. 在第一个函数中,主要处理逻辑是根据 Kafka 消息的应用id信息,拆分数据,将同一个id应用的数据聚合在一起,由于本身 NAS 和 OSS 都没有提供文件锁,所以当多个函数并发写同一个id应用文件时,如果程序层面不处理文件锁的问题,会导致写数据相互覆盖。对于每个函数实例拆分小文件的方案,由于 Kafka 消息中应用的种类很多,拆分数据总是会形成很多小文件,数据合并需要很长的时间。经过多种方案的检验比较,最终选择了通过 Redis 处理文件锁,每个应用全局最多产生10个并发写文件,函数计算运行实例写 NAS 文件时,先去 Redis 获取文件锁,获取成功才能真正开始写入。这种方案在写数据性能上有很好的表现,代码复杂度得到了一定的增加,但总体可控。

最终,这些问题没有成为数禾方案的卡点,通过交流和方案验证,最终都得到了一定程度的解决。

出色的效果和进一步的期待

在全链路角度看,整条链路非常的 Serverless,资源使用效率也非常高,再配合函数计算2023云栖大会推出的梯度计价,整个方案在资源成本上也达到了非常好的控制。
在期望方面,针对本次场景落地中遇到的问题,还是希望可以得到更好的优化。异步调用放宽消息体大小,可以以最少的触发器资源,达到函数计算的大并发处理。通过 NAS/OSS 原生支持文件锁的能力,可以减少文件的数量,同时也减少业务层代码在这方面的处理复杂度。
任务从10月份上线以来,数禾运维团队在该任务的运维投入上得到了人力释放,几乎达到了0运维;在功能迭代上,通过函数计算控制台提供的多版本和灰度能力,快速的完成了升级的灰度。
后续数禾运维团队会将更多适合 Serverless 的业务采用函数计算方案,最大限度将精力专注在公司业务,逐渐剥离运维和底层资源的简单维护。数禾运维团队也十分开放的与函数计算团队探讨更多的场景,希望将公司的业务架构在新一代的 Serverless 架构上。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Node.js快速搭建简单的HTTP服务器并发布公网远程访问

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

什么牌子的灯具性价比高?性价比高适合学生的护眼台灯推荐

国家卫生健康委疾控局副局长再那吾东玉山在发布会上介绍,国家卫生健康委2020年9到12月全面开展了近视专项调查,覆盖了全国8604所学校,共筛查247.7万名学生。结果显示:2020年,我国儿童青少年总体近视率为52.7%。其中6岁…

王树森深度强化学习 笔记

本笔记基于王树森的深度强化学习课程 文章目录 王树森深度强化学习 笔记一、基础1. 概率论2. 名词3. Return U t U_t Ut​4. Action-Value Function Q π ( s , a ) Q_\pi(s, a) Qπ​(s,a)5. State-Value Function V π ( s ) V_\pi(s) Vπ​(s) 二、Value-Based Reinforc…

深入理解Sentinel系列-2.Sentinel原理及核心源码分析

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理、分布式技术原理🔥如果感觉博主的文章还不错的话&#xff…

04 ECharts基础入门

文章目录 一、ECharts介绍1. 简介2. 相关网站3. HTML引入方式4. 基本概念 二、常见图表1. 柱状图2. 折线图3. 饼图4. 雷达图5. 地图 三、应用1. 动画2. 交互 一、ECharts介绍 1. 简介 ECharts是一个使用JavaScript实现的开源可视化库,用于生成各种图表和图形。 EC…

RT_Thread_修改为外部晶振及验证

关注两处: 1、stm32f4xx_hal_conf.h,外部晶振频率HSE宏定义 2、drv_clk.c,system_clock_config函数 1、外部晶振频率HSE宏定义 根据实际外部晶振的频率去定义,使用的是8MHz; 2、system_clock_config 开启HSE&#…

改造python3中的http.server为简单的文件上传下载服务

改造 修改python3中的http.server.SimpleHTTPRequestHandler,实现简单的文件上传下载服务 simple_http_file_server.py: # !/usr/bin/env python3import datetime import email import html import http.server import io import mimetypes import os …

Thymeleaf生成pdf表格合并单元格描边不显示

生成pdf后左侧第一列的右描边不显示,但是html显示正常 显示异常时描边的写法 cellpadding“0” cellspacing“0” ,td,th描边 .self-table{border:1px solid #000;border-collapse: collapse;width:100%}.self-table th{font-size:12px;border:1px sol…

markdown学习(初学者)

学习途径&#xff1a; 在线markdown编辑器_微信公众号markdown排版工具 Markdown 基本语法 | Markdown 官方教程 标题 要创建标题&#xff0c;请在单词或短语前面添加井号 (#) 。# 的数量代表了标题的级别。例如&#xff0c;添加三个 # 表示创建一个三级标题 (<h3>) (…

【华为网络-配置-023】- 一般企业网架构方案(单节点方案)

要求&#xff1a; 1、防火墙 FW1 G1/0/0 接口使用 PPPoE 拨号获取 IP 地址。 2、FW1 配置信任&#xff08;内网包含服务器&#xff09;和非信任区域&#xff08;Internet 外网&#xff09;。 3、FW1 配置 NAPT 使内网可以上网。 4、核心交换机 LSW1 划分 VLAN 并配置各接口及三…

Python 日期时间模块详解(datetime)

文章目录 1 概述1.1 datetime 类图1.2 类描述 2 常用方法2.1 获取当前日期时间&#xff1a;now()、today()、time()2.2 日期时间格式化&#xff1a;strftime()2.3 日期时间大小比较&#xff1a;>、、<2.4 日期时间间隔&#xff1a;- 3 扩展3.1 Python 中日期时间格式化符…

Java / Scala - Trie 树简介与应用实现

目录 一.引言 二.Tire 树简介 1.树 Tree 2.二叉搜索树 Binary Search Tree 3.字典树 Trie Tree 3.1 基本概念 3.2 额外信息 3.3 结点实现 3.4 查找与存储 三.Trie 树应用 1.应用场景 2.Java / Scala 实现 2.1 Pom 依赖 2.2 关键词匹配 四.总结 一.引言 Trie 树…

案例054:基于微信的追星小程序

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

安装node.js并创建第一个vue项目

目录 一&#xff0c;下载node.js 二&#xff0c;创建一个vue项目 一&#xff0c;下载node.js 1.进入官网&#xff1a;Node.js (nodejs.org) 2.选择版本 3.选择安装方式 4.运行安装包&#xff0c;下载文件 5.选择要安装的路径后一直next 6.安装完成后打开命令提示符&#xff…

PHP短信接口防刷防轰炸多重解决方案三(可正式使用)

短信接口盗刷轰炸&#xff1a;指的是黑客利用非法手段获取短信接口的访问权限&#xff0c;然后使用该接口发送大量垃圾短信给目标用户 短信验证码轰炸解决方案一(验证码类解决)-CSDN博客 短信验证码轰炸解决方案二(防止海外ip、限制ip、限制手机号次数解决)-CSDN博客 PHP短信…

推荐几款转换视频格式的好用转换工具,小白也能上手

视频格式转换工具是一种专门转换视频的软件&#xff0c;可让你将一种视频格式转换为另一种视频格式&#xff08;例如&#xff0c;MOV 到 MP4&#xff09;&#xff0c;通常可以节省空间。 本文将介绍一些用于转换视频格式的好用转换工具&#xff0c;并且详细描述了它们的主要功…

【FPGA】数字电路设计基础

数字电路基础 1 什么是数字电路 在学习数字电路之前&#xff0c;我们先要了解下什么是数字电路。想要搞明白数字电路&#xff0c;就要搞明白生活中有 两种概念&#xff0c; 数字信号和模拟信号&#xff0c;模拟信号一般包括压力、气温、速度等信号&#xff0c;模拟量的值是可…

智能成绩表 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题目描述 小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗? 输入描述 第1行输入两个整数,学生人数n和科目数量m。0<n<100,0<m<10 第2行输入m个科目名称,彼此之间用空格隔开。科目名称只由英文…

这书看着贼得劲儿

作者呕心沥血2年&#xff0c;再出力作~~~ 给大家推荐一本好玩的书 神经网络与TensorFlow 本来以为出版了第一本书&#xff0c;应该对于漫长的审核有免疫力了&#xff0c;结果又被这本书折磨了2年。于是作者痛定思痛&#xff0c;决定第三本书写一本纯科普的书籍。 墙裂推荐 这…

跨境电商危机公关:应对负面舆情的策略优化

随着跨境电商的快速发展&#xff0c;企业在全球市场中面临的竞争与挑战也日益复杂。在这个数字时代&#xff0c;负面舆情一旦爆发&#xff0c;可能对企业形象和经营造成深远影响。 因此&#xff0c;跨境电商企业需要建立有效的危机公关策略&#xff0c;以迅速、果断、有效地应…