首页 > 其他分享 >Serverless日志处理

Serverless日志处理

时间:2023-01-17 10:46:08浏览次数:36  
标签:Serverless 触发器 服务 函数 处理 访问 VPC 日志

任何单一云产品所提供的业务解决方案都是有限的,而云服务生态下“互相打通、互相连接”的能力,在很大程度上是业务上云的关键。

通常会根据实现方式,把函数计算的连接能力分为三类:触发器连接能力、访问 VPC 资源的能力、访问公网服务的能力。函数计算通过这些连接能力可以与整个云上的产品服务关联,从而形成一个完整的 Serverless 生态。

 

 

 触发器提供的是一种事件驱动的计算模型,充当的往往是一个桥梁的角色,将事件源的服务与函数连接起来。

从场景应用层面来看,按照触发器的联动程度,可以把它划分为三大类,分别是云服务集成触发器、原生触发器、自定义触发器。

云服务集成触发器。顾名思义,它是需要联动其他云服务才可以产生“连接”能力的一种场景。比如,熟悉的对象存储触发器可以用来进行一些音视频转码处理,当音视频文件上传后,可以通过触发器对函数进行调用,从而对其进行处理;消息队列触发器可以用来做一些异步消息的通知,当检测到消息队列内的数据发生变化时,也可以通过函数进行消费。这种方式,要么是函数计算集成云服务的打通能力,要么是云服务集成函数计算的打通能力。通常来说,可以通过 SDK/API 提前对接好,按照服务之前约定的协议(如事件驱动、回调等方式)来互相联动。

原生触发器指的是不需要借助其他云服务,自身即可实现的一类触发器。比如定时触发器仅需配置一个时间点,就可以让云函数实现一些定时邮件通知、定时天气预报之类的任务处理。从联动性和场景使用程度看,原生触发器也可以包括 HTTP 触发器,但更倾向于将把它作为一种延伸的访问云函数的能力,可以通过 HTTP 触发器生成的链接作为的 Web 服务暴露的访问地址。

大部分云厂商为了给用户提供更多的可能空间,通常还会提供自定义触发器的能力,允许用户接入任意云服务的事件,比如通过自定义触发器的方式,对接自研的资源存储或者服务等等。这也极大地丰富了函数计算的使用场景。

跨 VPC 的连接能力

函数计算另一个连接能力的体现,就是跨 VPC 的访问。通过 VPC 建联,能够让函数更加安全地访问用户的私有网络资源。比如通过跨 VPC,使得函数具备访问云数据库、云消息队列的能力,从而实现一个较为复杂的后台处理逻辑;另外,通过 VPC 的提前打通,可以将分布式文件系统直接挂载到函数实例上,使得云函数具备大文件处理的能力。

公网访问能力

部分云服务本身就暴露了公网访问接口,这类服务甚至不需要为云函数做任何配置,就可以访问。但云厂商为了安全考虑,同样地,需要设置鉴权和身份认证等保障机制。

通过 VPC 访问与通过公网访问的服务场景是有重叠的,这取决于服务本身支持哪种访问方式,比如阿里云的云消息队列 Kafka 就支持公网与 VPC 两种访问方式。

连接器的组合

在实际应用中,往往会通过不同的组合方式来实现一个完整的解决方案。

日志ETL实现

在很多边缘计算的场景中,日志信息往往并不能做到实时上报,所以通常会采用定时上传日志文件的方式来进行后续的日志处理和分析。比如我们最常见的车载日志,大量的车载终端源源不断地产生着行驶日志。实时分析这些行驶信息非常困难,一般都会是在收集到一定数量之后,以文件的形式整体上报。这样不仅可以提高日志传输效率,还能够对整体的日志文件进行暂存,方便后续的溯源。

连接器常规组合

 

日志文件的触发是属于异步调用方式的,而异步调用还可以通过异步策略的配置来支持在异常情况下进行重试、分流处理,以确保数据的高可靠性。也就是说,我们可以为刚才的函数设置超时时间。

日志文件一旦上传就可以通过 OSS 触发器让云函数进行处理,并将抽取转化处理的日志关键信息发往云消息队列服务,同时异步策略也提供了额外的重试保障。

主要的日志处理逻辑

一共有 3 个要点,分别是资源初始化、输入数据的获取、数据结果输出。

首先,来看资源的初始化部分,在 initialize 函数中会先完成全局的初始化操作,主要是 Kafka 的相关信息,这也是使用模板的原因,因为模板里面已经包含访问 Kafka 的依赖库。

其次,是如何获取数据,处理并输出。来看 handler 的逻辑。因为在发生日志上传时,需要将文件下载到函数实例内处理,因此,这一步主要是初始化一个 OSS 的客户端。

最后,利用刚才创建的 client 以及 event 内的对象信息,可以调用 client 的接口将日志文件下载到本地。拿到日志文件之后,处理过程就简单了。只需要遍历文件内容,提取关键信息,再推送到 Kafka 就行了。

比如这里提取的就是 distance 和 carID,然后调用 p.produce 进行推送,供下游服务进行处理。在 p.produce 函数存在一个 callback 的参数,因为 deliveryReport 是一个向 Kafka 发送消息后的回调函数,会根据发送结果输出一个提示信息。

优化版本

只是为了数据的暂存而选择了对象存储,那么,是否有一种方式,可以直接上传日志,而不需要额外占用对象存储的资源呢?拿阿里云的“连接器”函数计算 FC 来说,还可以采用日志服务 SLS 触发器。

 

 

SLS 触发器能够定时获取到日志的增量信息,而不用像对象存储触发器那样,每次将日志文件上传的时候才会触发 ETL 任务。

配置了触发间隔后,SLS 触发器就会按时调用函数,并传入日志数据变化的游标。这样就可以直接获取变化的增量数据。

相比于 OSS 触发器,SLS 触发器具有更加丰富的接入方案,可以直接采集阿里云产品的日志,也可以通过 Logstash、FluentD 等开源软件采集日志,通过 HTTP/HTTPS、Promethues 等标准协议接入数据。

 

标签:Serverless,触发器,服务,函数,处理,访问,VPC,日志
From: https://www.cnblogs.com/muzinan110/p/17057197.html

相关文章