欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~作者:田小康
什么是 App 性能监控方案 ?
App 性能监控方案(APM) 是将 App 产生的性能数据上报及处理和分析, 提供适度加工的数据, 平台及合适的方法协助应用发现对用户影响最大的性能问题, 并且用累积数据一步步回归验证, 最终使应用数据上报, 数据存储与分析, 报表及邮件推送, Bug 产生及回归验证, 行业经验沉淀成为一个完整的闭环, 使应用的性能可以得到持续的监控与提升。哇, 好正式的开场啊, 稳!
为什么要使用腾讯云(相比于传统机房) ?降低运维成本, 将精力集中于构建上层业务. 曾经一段时间, 后台的维护与开发耗时比例高达 1:1;
可更快速的扩容, 大部分云上资源都可以即时分配;
更好的支持独立部署和成本核算, 毕竟后台需要使用大量的计算资源, 最后的产生的成本需要接入的产品共同承担。哇, 好有说服力的原因啊, 稳!
那么,没图你说个啥 !!!
Entrance (golang) 是一个Web服务, 用以接收客户端的上报请求并将数据存储到kafka, 并将大文件落地到Cos文件存储服务。
Kafka 集群用以缓解数据峰值带来的压力,并且作为数据中转站,为各个模块进行解耦。
Transporter (golang) 是主要的后台, 作为kafka的主要Consumer, 将用户上报的数据存储到TDF进行数据计算,另外有一些需要分析的数据会发送到独立的模块进行分析。
Web (python) 是项目(腾讯的一个内部项目)的Web服务, 主要提供数据展示及交互, 产品及邮件配置等。
有啥重点么?
整个数据处理流程十分简单, 只有接入层(Entrance), 缓冲层(Kafka), 处理层(Translate,Transporter), 用户交互层(Db,Web)
为什么呢 ? 保持简单很重要, 一个系统走到尽头的原因通常都是拥有了无数个无关痛痒的功能而最终导致代码臃肿不堪, 最终迎来一次彻底的重构。这也是项目迁移到腾讯云的重要原因之一, 以为已经太过臃肿, 需要一次换血。所以说: 系统的架构图就不会使用下面这样的 ...
任意两个模块间无直接CGI交互, 全部通过 kafka 以 Producer/Consumer 的关系进行数据传递
为什么呢 ? Kafka 拥有很高的水平扩容能力, 如果后台模块间无直接耦合, 那么水平扩容所需做的仅仅是增加业务容器个数和Kafka集群规模即可啦
绝对, 绝对不要更改字段的值或者删除字段
为什么呢 ? 遵守上面的原则便可维护数据不可变性。在海量数据下, 可以保证数据容忍重复消费, 数据回滚等操作, 因为数据回滚需要做的事情仅仅是删除几个字段然后把数据重新放回Kafka队列.
一个字段在客户端, 后台, 数据库, 前端都只能有一个名字
为什么呢 ? 说出来都是泪,这个还是要具体经历过字段混乱带来的灾难后才可以体会。。。
Kubernerts 做好健康检查很重要
为什么呢 ? 这不就使用 Kubernetes + Docker 的原因么?希望发现异常使通过重启容器,解决大部分运行时问题,提升服务可用性。所以,要花力气检查好容器是否是正常工作才可以团建时候不被工单电话骚扰呀 ^^
你们都用了啥,晾出来看看啊1、腾讯云的CVM, 用于构建 Kubernetes 集群2、腾讯云 Redis, 用于加速Android和iOS堆栈的翻译速度
3、腾讯云 Postgres 数据库,用于结果表的存储及产品配置
4、腾讯云 COS 服务,用于文件存储
5、腾讯云 CDN 服务,用于App配置下发
6、腾讯云 TDF 用于定时计算指标数据并出库到Postgres, 供页面展示举个例子 - 腾讯云 TDF
使用流程:
基本配置1、申请权限 数据工坊 TDF - 腾讯云 。
2、创建表,这里建议大家使用HQL创建,并且把HQL放到版本管理系统中。
3、腾讯云 CDP 配置接入层的Topic(DataPipeline正在内测, 只对白名单用户开放)4、腾讯云 CDP 配置接入层的Integrator
数据入库
数据入库的流程稍微复杂些,解释一下:
1、首先我们应该编写一个Flume配置,可以配置Flume的Source为一个csv文件,看起来像这样的。2、配置里面有一个声明文件路径的地方,写一个自定义路径。可以将数据写入到这个数据,Flume会将里面的文件自动上报到云端后台。
3、写入数据到CSV文件,这里要注意字段的顺序需要和CDP配置Topic保持严格一致。
数据出库配置出库数据库
编写 TDF 工作流
启动工作流,就可以丢下鼠标等胜利啦!
但是究竟有哪些点, 自己项目和腾讯云都获得了成长 ?
近代著名思想家孔子日: 双赢是最佳实践的入场券在使用腾讯云, 可以在低资源成本下(不到1W经费), 使我们快速搭建项目的原型, 并得到现网环境的验证 | 关键字: 低成本 快速验证
在我们的使用过程中, 遇到的Bug或者体验问题, 及时反馈给了腾讯云同学, 并快速得到了解决 | 关键字: 合作 改进
项目作为基础服务, 支持独立部署后, 可作为平台能力, 为腾讯云带来更多潜在用户 | 关键字: 共同利益 发展上面的标准式回答真的是太假了, 能不能来些足够感性的栗子 ?腾讯云的 TDF 服务在使用初期, 事实上处于内测阶段, 会不时出现任务失败的情况,所以会经常反馈问题。
对话风格由 @鲁班: TDF今天任务又失败啦, 帮忙看下原因哈 [鲜花.gif]
变成了 @我: 你们业务今天有任务跑失败啦, 是不是最近改了任务配置呢 ?
这是TDF系统后台监控越来越完善的例子有米有 !! | 关键字: 先于用户发现问题在使用过过程中, 遇到了腾讯云COS缺少Golang客户端的问题, 在进度压力下, 我们开发了golang cos 客户端并在后续版本与腾讯云共同维护 | 关键字: 共同承担
在使用 TDF 的 Flume 插件上报数据时, 会偶尔出现进程因为网络不稳定退出的问题. 我们把TDF 的Flume插件Docker化后, 由Kubernetes做健康检查来维持进程存活并将方案同步给了腾讯云的同学, 腾讯云的同学积极响应, 并在两天内完成了Flume插件稳定性的提升工作 | 关键字: 互相督促
如果有腾讯云流式数据处理或者APM能力建设相关的问题或者经验,欢迎在本文留言一起讨论。
相关推荐当深度学习成为过去,迁移学习才是真正的未来?
JPEG 编码过程:为 GPU 处理开路
使用腾讯云 GPU 学习深度学习系列之一:传统机器学习的回顾