App 性能监控方案(APM) 是将 App 产生的性能数据上报及处理和分析, 提供适度加工的数据, 平台及合适的方法协助应用发现对用户影响最大的性能问题, 并且用累积数据一步步回归验证, 最终使应用数据上报, 数据存储与分析, 报表及邮件推送, Bug 产生及回归验证, 行业经验沉淀成为一个完整的闭环, 使应用的性能可以得到持续的监控与提升。
> 哇, 好正式的开场啊, 稳!
> 哇, 好有说服力的原因啊, 稳!
Entrance (golang) 是一个供SDK上报的后台服务, 用以接收客户端的上报请求并将数据存储到kafka, 并将大文件落地到Cos文件存储服务。
Kafka 集群用以缓解数据峰值带来的压力,并且作为数据中转站,为各个模块进行解耦。
Transporter (golang) 是主要的后台, 作为kafka的主要Consumer, 将用户上报的数据存储到TDF进行数据计算,另外有一些需要分析的数据会发送到独立的模块进行分析。
Web (python) 是项目的Web服务, 主要提供数据展示及交互, 产品及邮件配置等。
服务 | 用途 | 优势/不足 |
---|---|---|
容器服务 | 容器编排 | 底层使用k8s,业界主流发展方向。服务内置Ingress与腾讯云负载均衡服务无缝衔接 |
TDF | 大数据计算 | 华丽的前台界面,即使小白也可以轻松构建数据工作流 (缺点: 目前还没有自动化配置方案) |
COS | 数据存储 | 目前腾讯云最稳定的海量存储方案 (缺点: 目前还没有golang客户端, 我们是自己开发的) |
CDN | App配置下发 | 服务稳定,时延低,新手使用的话,“自助故障诊断”功能很好用 |
Postgres | 关系型数据存储 | 数据类型丰富,例如 ARRAY,JSON 有丰富的PG插件 (缺点: 目前在单表过十亿条的场景, 性能不如分布式数据库) |
Redis | KV存储 | 服务带宽真心高 (我们单机Redis带宽可达 400Mb 以上) |
云文件存储 | 云文件存储 | 对于云文件场景, CFS在腾讯云的唯一可选项。且CFS可与容器服务PV无缝结合 |
Step 1 编辑集群信息
Step 2 选择容器宿主机配置
Step 3 最后的一些琐事
说到运行服务,不得不提到有两种方式,适合于不同场景
1) 通过腾讯云控制台创建服务
> 适用于新手用户,简单快捷,覆盖到了常用功能
2) 通过 kubectl 命令行工具创建服务
> 适用于进阶用户,解锁全部K8s服务能力,例如Statuful Sets,Cronjob等等,并且服务配置可纳入版本管理系统
腾讯云容器服务官方文档相关操作的描述已经很详细了 https://www.qcloud.com/document/product/457/8438
说到负载均衡,不得不提到有两种方式,适合于不同场景 ~
1) 通过腾讯云控制台创建负载均衡
> 适用于新手用户,简单快捷,覆盖到了常用功能
网页操作比较简单,这里不在细说。 可参考腾讯云容器负载均衡官方文档: https://www.qcloud.com/document/product/457/9110
1) 通过 kubectl 命令行创建负载均衡
> 适用于进阶用户,可将负载均衡配置纳入版本管理系统 (关于负载均衡的详细配置,例如检测周期等,需要在控制台配置)
这部分内容较多,详情请参阅Google官方文档: https://kubernetes.io/docs/concepts/services-networking/ingress/
数据入库的流程稍微复杂些,解释一下:
整个数据处理流程十分简单, 只有接入层(Entrance), 缓冲层(Kafka), 处理层(Translate,Transporter), 用户交互层(Db,Web)
为什么呢 ? 保持简单很重要, 一个系统走到尽头的原因通常都是拥有了无数个无关痛痒的功能而最终导致代码臃肿不堪, 最终迎来一次彻底的重构。这也是项目迁移到腾讯云的重要原因之一, 以为已经太过臃肿, 需要一次换血。所以说: 系统的架构图就不会使用下面这样的 ...
任意两个模块间无直接CGI交互, 全部通过 kafka 以 Producer/Consumer 的关系进行数据传递
为什么呢 ? Kafka 拥有很高的水平扩容能力, 如果后台模块间无直接耦合, 那么水平扩容所需做的仅仅是增加业务容器个数和Kafka集群规模即可啦
绝对, 绝对不要更改字段的值或者删除字段
为什么呢 ? 遵守上面的原则便可维护数据不可变性。在海量数据下, 可以保证数据容忍重复消费, 数据回滚等操作, 因为数据回滚需要做的事情仅仅是删除几个字段然后把数据重新放回Kafka队列.
一个字段在客户端, 后台, 数据库, 前端都只能有一个名字
为什么呢 ? 说出来都是泪,这个还是要具体经历过字段混乱带来的灾难后才可以体会。。。
Kubernerts 做好健康检查很重要
为什么呢 ? 这不就使用 Kubernetes + Docker 的原因么?希望发现异常使通过重启容器,解决大部分运行时问题,提升服务可用性。所以,要花力气检查好容器是否是正常工作才可以团建时候不被工单电话骚扰呀 ^^
近代著名思想家孔子日: 双赢是最佳实践的入场券
> 上面的标准式回答真的是太假了, 能不能来些足够感性的栗子 ?
对话风格由 @鲁班: TDF今天任务又失败啦, 帮忙看下原因哈 [鲜花.gif] 变成了 @我: 你们业务今天有任务跑失败啦, 是不是最近改了任务配置呢 ?
这是TDF系统后台监控越来越完善的例子有米有 !! | 关键字: 先于用户发现问题
如果有腾讯云流式数据处理或者APM能力建设相关的问题或者经验,欢迎在本文留言一起讨论。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。