前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战分享:Pulsar Functions 在腾讯微服务观测平台 TSW 中的落地实践

实战分享:Pulsar Functions 在腾讯微服务观测平台 TSW 中的落地实践

作者头像
腾讯云中间件团队
修改2021-04-27 17:30:25
1.1K0
修改2021-04-27 17:30:25
举报
文章被收录于专栏:腾讯云中间件的专栏

导读

腾讯微服务观测平台 TSW(Tencent Service Watcher,以下简称 TSW)是一款分布式架构链路追踪中间件,用于提供云原生服务可观察性解决方案。TSW 能够追踪到分布式架构中的上下游依赖关系,绘制拓扑图,为您提供多维度调用监控与统计,助您掌控系统关键指标,及时发现错误调用与性能瓶颈。TSW 还支持各类主流框架与协议,兼容业界通用的 Opentracing 标准,拥抱开源生态,支持多种主流编程语言。

作者介绍

刘潇

腾讯云中间件团队高级工程师 微服务平台TSF、微服务观测平台TSW 研发 热衷于云原生和开源技术,在微服务、APM、大数据、消息队列等领域拥有丰富经验,目前致力于服务可观测性技术的落地和推广

冉小龙

腾讯云微服务产品中心研发工程师 Apache Pulsar Committer

Apache BookKeeper Contributor

TSW 应用场景

基于分布式架构的微服务链路监控诊断

在分布式场景下,服务调用错综复杂,问题分析与定位非常困难,TSW 的链路跟踪系统能迅速定位到有问题的服务,快速发现问题节点。

  • 完整的应用调用拓扑关系:自动发现该服务之前的调用以及对所有中间件的调用,绘制整个系统的完整调用拓扑关系。
  • 服务性能分析:依赖拓扑图中的服务都可以单独进行下钻分析,可以从吞吐量、错误率、响应时间等指标对应用性能进行详细分析。

微服务性能优化

在依赖拓扑图中能对各个服务的调用次数以及耗时进行分析,找到负载较高以及负载较少的服务,对资源进行合理分配。

  • 调用链路聚合汇总:对所有的调用信息进行聚合汇总,对各个服务的调用情况以及响应情况进行分析。
  • 关键路径:快速发现整个系统调用拓扑中关键服务路径与接口路径。
  • 优化不合理调用:及时发现某些不合理的调用,如频繁进行数据库操作、循环依赖等。

TSW 关键设计

数据协议

TSW 兼容 Opentracing (https://github.com/opentracing-contrib/opentracing-specification-zh/blob/master/semantic_conventions.md)标准协议,OpenTracing 中的Trace(调用链)通过归属于此调用链的Span来隐性的定义。特别说明,一条Trace(调用链)可以被认为是一个由多个Span组成的有向无环图(DAG图), Span与Span的关系被命名为References。

Span 数据定义

系统设计

Trace 数据从客户端 Agent 采集,通过 APM Gateway 进行协议转换、鉴权等接入,数据写入 Pulsar 进行数据堆积、流量削峰等,使用 Pulsar Functions 实现的 Span splitter 进行数据的 ETL,一部分数据通过Pulsar IO Functions 数据写入 ES 做倒排索引,一部分数据通过 Flink 进行复杂计算,计算出 metrics 数据并写入到时序数据库。从此图看出 TSW 大量使用了 Pulsar Functions 来做数据转换、数据写入等操作,后面会详细介绍落地细节。

什么是 Pulsar Functions

Apache Pulsar (https://pulsar.apache.org/en/)是新一代云原生流数据平台, 采用业界主流的计算与存储分离,分层分片的体系架构,极大的简化了消息处理,存储以及计算的能力。在提供最基础的消息处理以及消息持久化的功能之外,还基于 serverless 的事件触发模型,设计并实现了 Pulsar Functions。

Pulsar Functions 是一个轻量级的计算框架,像 AWS 的 lambda、Google Cloud 的 Functions 一样,Pulsar Functions 可以给用户提供一个部署简单、运维简单、API 简单的 FASS(Function as a service)平台。开发者可以使用 Pulsar Functions 编写用户所需要的计算逻辑,并将其作为 instance 的一部分,交给 Function Worker 处理和调度。

为什么需要 Pulsar Functions

当我们进行流式处理的时候,很多情况下,我们的需求可能只是下面这些简单的操作:

  • 简单的 ETL 操作
  • Real-time 的聚合操作
  • Event 路由
  • Data enhancement
  • 数据过滤

Pulsar Functions 的优势

Pulsar Functions 作为 serveless 的计算框架,具有以下特点:

  • 可以从指定的 input topics 中监听并消费数据
  • 将用户自定义的计算逻辑应用于每一条消息
  • 将处理后的结果生产到一个或多个 output topic 中

在此基础上,Pulsar Functions 具备如下优点。

灵活的 Runtime

允许用户在不同的环境及场景下部署 Pulsar Functions,目前支持如下三种形式:

  • Thread runtime
  • Process runtime
  • K8S runtime

多语言支持

允许用户使用不同的语言来编写指定的 function 计算逻辑,目前支持如下三种语言:

  • Java Function
  • Python Function
  • Go Function

语义保证

Pulsar Functions 提供了以下三种消息传递语义,来保证不同场景下对消息传递的语义要求。

  • At most once
  • At least once
  • Effectly once

灵活的订阅类型

Apache Pulsar 通过对 consumer 的抽象,支持了灵活的订阅模型,可以应对 Queue 和 Streaming 两种不同的消费场景,在 Pulsar Functions 中,将这一优势同样继承过来,支持了如下三种订阅模式:

  • Shared
  • Key-Shared
  • Failover

Pulsar Functions 的落地

TSW 面临的需求

  • 需要将 Span 数据进行过滤、拆分。在客户上报数据中,存在不确定、重复、缺失字段的情况,需要在计算和落库之前就对数据进行清洗;根据Span 数据协议结合TSW 业务使用场景,我们将数据分为4部分:Span元数据(Context,包含 SpanId、TraceId、Timestamp 等),标签数据(tags),日志、错误堆栈等信息(Logs,baggages),以及监控信息(Metrics,包含 Duration 等)。各个部分数据在不同业务场景使用,所以需要在使用前进行数据拆分。
  • 需要将 Span 数据写入到第三方组件。对于已拆分的元数据和标签数据,需要写入到ES进行倒排索引;对于包含日志等整体数据,需要写入到HBASE进行归档。
  • 开发简单,方便部署、扩容。随着用户的接入,数据量的增大,需要方便对此模块进行部署、扩容等运维操作。

TSW 例子

从上面 Pulsar Functions 的介绍,在 Pulsar 生态下,可以方便使用 Functions 来解决以上问题。

1. 比如数据拆分,可以简单实现 Pulsar Functions 的 API 即可。

代码语言:javascript
复制
  import org.apache.pulsar.functions.api.Context;
  import org.apache.pulsar.functions.api.Function;
  public class SpanSplitterFunction implements Function<Span, Span> {
    @Override
    public Span process(Span input, Context context) {
      // 数据ETL
      return Span.split();
    }
  }

2. 数据写入第三方组件。Pulsar 官方提供常见的 IO functions 实现,所以只简单配置即可。例如将数据写入到ES:

代码语言:javascript
复制
  import org.apache.pulsar.functions.api.Context;
  import org.apache.pulsar.functions.api.Function;
  public class SpanSplitterFunction implements Function<Span, Span> {
    @Override
    public Span process(Span input, Context context) {
      // 数据ETL
      return Span.split();
    }
  }

从例子中,我们可以看到 Pulsar Functions 在解决数据ETL、数据落库上,降低了开发和部署成本,助力 TSW 产品的快速迭代。

往期推荐

《深度解析:Pulsar的消息存储机制和Bookie的GC机制原理》

《消息系统兴起二次革命:Kafka不需要ZooKeeper》

《你不得不知道的 Apache Pulsar 三大跨地域复制解决方案》

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯云中间件 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 作者介绍
  • TSW 应用场景
  • TSW 关键设计
  • 什么是 Pulsar Functions
  • 为什么需要 Pulsar Functions
  • Pulsar Functions 的优势
  • Pulsar Functions 的落地
  • TSW 例子
  • 往期推荐
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档