文档章节

饿了么的移动APM架构实践

摩云飞
 摩云飞
发布于 2016/12/12 19:33
字数 1246
阅读 201
收藏 2
点赞 0
评论 0

作者简介:胡彪,饿了么移动技术负责人,移动技术总监。负责饿了么移动架构,新技术预研与实践;移动安全,移动应用开发等等。09年投身移动互联网研发,曾先后就职于新蛋、盛大、百度、腾讯等国内外知名企业。

发布日期:2016-12-06

本文针对表达不清晰的地方进行了调整,并针对关键信息进行了标注,可以参考原文进行对比;


简单的说 APM 即应用性能管理,主要指对关键业务应用进行监测优化,提高应用的可靠性质量,保证用户得到良好的服务。同时通过监控不断优化应用,达到提高用户体验的同时节省成本的目的。下面是维基百科上的介绍:

Application performance management is the monitoring and management of performance and availability of software applications. APM strives to detect and diagnose complex application performance problems to maintain an expected level of service. APM is “the translation of IT metrics into business meaning.”

为什么饿了么需要研发 APM 系统?

饿了么作为一家全球领先的 O2O 移动互联网公司,目前日订单量超过 650 万,超过 98% 的订单量来自于 App 端。

  • O2O 业务具有即时性集中性等特点,订单主要集中在午高峰和晚高峰两个时段,系统高峰期面临高并发、高负载等多重压力。
  • 早期再业务爆发高峰期,为了抗住系统压力基本靠不断堆人堆机器。随着技术不断提高和业务变化,存在部分机器利用率不高的问题。
  • 国内移动网络环境极为复杂,WIFI、4G、3G、2.5G(Edge)、2G 等多种移动网络并存。
  • Android系统碎片化过于严重。

APM系统的挑战

  • 多语言并存,目前饿了么后端有 Java、Python、PHP、Go 等;
  • H5 端 Vue JS、Angular JS、React JS 等多框架并存;
  • 多终端并存,Backend、Frontend、iOS、Android、Hybird、Semi-Hybird 等,且交叉混合较多。
  • 高并发,海量数据。目前仅后端每天收集到 APM 相关数据 40TB+ 。
  • Mobile Native 端 APM 不能影响宿主 App 运行,且不能明显增加用户流量、电量等消耗。
  • 如何做到无侵入 APM 至关重要。

饿了么APM架构

移动端架构

移动端架构

Why protobuf?

使用 Protobuf 可以达到约 60% 的数据压缩比,达到节省流量目的的同时增加了数据 decode 复杂度,初步防止抓包轻易阅读报文行为。

自定义格式的协议均有此特点;说实话,我并不确定 protobuf 在移动端使用是否真的具有绝对优势;

Why 7Z?

鉴于 APM 收集到的数据量较大,对于系统分析有益,而对于用户来说用处不大,且会占用较多用户流量的情况;经过对比 Gzip,7Z,Snappy 等多种压缩算法,并综合多种因素考虑后,我们选择了 7Z 压缩算法。7Z+Protobuf 在多条数据的使用场景中最高可达 97.4% 的压缩比,单条数据使用场景也可达到 88.6% 的压缩比。

后端架构1.0

后端架构1.0

  • 通过 Nginx+lua 模块来完成 7Z 解压缩、Protobuf 反序列化 等工作,之后再将数据写入 access.log 中;
  • 通过 Flume 读取 access.log ,将数据写入 Kafka ;
  • Kafka 只有一个 Topic ,ETL Service 直接消费 Kafka 。根据消息类型不同做不同业务逻辑处理,然后将数据写入 ES 或者 LinDB(饿了么框架工具部自研);
  • Webport 展示数据结果;

缺点:

  • Nginx+lua 模块处理能力有限;
  • 反复读写 access.log 让系统变成了一个 IO 密集型系统;
  • Kafka 只有一个 Topic ,一旦一种类型数据出现问题,将会影响其它类型数据处理;
  • 所有数据都依赖 ETL Service 来处理,但是每种消息的处理逻辑完全不同。部分处理比较复杂的消息严重影响了 ETL 的消费能力,导致 Kafka 数据大量堵塞,数据延迟极高;

从这个架构中可以看出饿了么的特点:很喜欢使用各种开源的东西搭建一个看似“牛逼”的架构,然而一些东西并没有什么卵用;

后端架构2.0

后端架构2.0

  • 使用 Gateway 来代替 Nginx ,智能降级熔断;
  • 放弃 flume ,使用 Collector Service 代替 lua 模块,简单处理之后直接将 Protobuf 数据插入 Kafka ;
  • 使用 Dispatch Service 对每种类型消息做简单处理之后,分 Topic 插入 Kafka 中,确保每个 Topic 中消息格式统一;
  • 增加 Transport Service 将 Metadata 存储 ES 中;
  • 增加 Alerting Service ,异常指标及时通知;
  • 在 ES 之上增加一层 API Service ,提供各种 DIY 数据指标;

一堆轮子被造出来了,然后这篇文章却不说清楚细节,哎~


原文地址:这里

本文转载自:URL居然能超出长度限制,我也是醉了

共有 人打赏支持
摩云飞
粉丝 364
博文 352
码字总数 952690
作品 0
徐汇
程序员
fir.im Weekly - 聊聊 Google 开发者大会

中国互联网的三大错觉:索尼倒闭,诺基亚崛起,谷歌重返中国。12月8日,2016 Google 开发者大会正式发布了Google Developers 中国网站 ,包含了Android Developers 的官网、文档、博客教学视...

风起云飞fir_im ⋅ 2016/12/12 ⋅ 0

GIAC2017全球互联网架构大会12月在上海举行,最新日程抢先看!

12月22日至23日,多为业界技术大咖将齐聚上海,共同探讨技术变革新趋势。 12月22日至23日,高可用架构和msup联合主办的GIAC 全球互联网架构大会将于上海举行。GIAC 全球互联网架构大会是高可...

行者武松 ⋅ 04/18 ⋅ 0

大雨倾城热情难灭 APMCon2016正式召开

  【IT168 资讯】8月18日,由听云、极客邦和InfoQ联合主办的中国应用性能管理行业盛宴――2016中国应用性能管理大会(简称APMCon 2016)在北京新云南皇冠假日酒店召开。作为国内APM领域的技术...

it168网站 ⋅ 2016/08/19 ⋅ 0

技术大咖云集,GIAC 2017全球互联网架构大会圆满落幕

  通过一线互联网技术大咖为参会者分享热点技术话题,共同探讨案例成功经验。      2017 年12月22-23日,由高可用架构技术社区和麦思博(msup)有限公司共同主办的 GIAC 全球互联网架构...

镁客网 ⋅ 01/03 ⋅ 0

晴空万里,热情依旧,APMCon2017大幕正式拉开

  【IT168 资讯】8月10日,由听云、极客邦和InfoQ联合主办的中国应用性能管理行业盛宴――2017中国应用性能管理大会(简称APMCon 2017)在北京新云南皇冠假日酒店隆重召开。作为国内APM领域最...

it168网站 ⋅ 2017/08/10 ⋅ 0

APMCon2016中国应用性能管理大会——评论得赠票

与众多国内外技术大牛齐聚一堂 共享一场技术的饕餮盛宴! APMCon是由InfoQ、极客邦与听云联合主办的高水准APM技术盛会,聚焦当前最为热门的移动端、Web端和Server端的性能监控和管理技术,整...

Alaise ⋅ 2016/08/09 ⋅ 39

APMCon 2017震撼来袭!参与评论送千元门票 与国内外技术大牛来一场夏日盛宴

APMCon是由听云、极客邦科技与InfoQ联合主办的全球高水准APM技术盛会,聚焦当前最为关键的移动端、Web端和Server端的性能监控和管理技术。整个会议包含智能运维、数据库性能优化、移动性能优...

听云APM ⋅ 2017/07/03 ⋅ 50

各大互联网公司架构演进之路汇总

大型网站架构演化历程 大型网站架构技术一览 Web 支付宝和蚂蚁花呗的技术架构及实践 支付宝的高可用与容灾架构演进 聚划算架构演进和系统优化 (视频+PPT) 淘宝交易系统演进之路 (专访) ...

星逝流 ⋅ 2016/02/16 ⋅ 2

移动动态化方案在蜂鸟的架构演进(含React Native与Weex对比)

当下,移动动态化已经成为各大公司都回避不了的问题,产品的快速迭代对技术提出了更高的要求,而移动端的动态化方案也是层出不穷:Hypid、结构化 Native View、React Native、Weex,什么样的...

雪夜凋零 ⋅ 2017/08/18 ⋅ 0

什么是真正的APM?

近年来APM行业被越来越多的企业所关注,尤其是在2014年末,NewRelic的成功上市,更加激发了人们对这个行业前景的无限遐想。那么究竟什么是APM?APM的目的是什么?要求我们做什么?有不少企业对A...

蝙蝠 ⋅ 2015/04/03 ⋅ 13

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Thrift RPC实战(二) Thrift 网络服务模型

TServer类层次体系 TSimpleServer/TThreadPoolServer是阻塞服务模型 TNonblockingServer/THsHaServer/TThreadedSelectotServer是非阻塞服务模型(NIO) 1 TServer抽象类的定义 内部静态类Args的...

lemonLove ⋅ 6分钟前 ⋅ 0

vim命令用法

第五章 vim命令 vim和vi几乎是一样的,唯一的区别就是当编辑一个文本时,使用vi不会显示颜色,而使用vim会显示颜色。 vim有三个模式:一般模式,编辑模式,命令模式。 系统最小化安装时没有安...

弓正 ⋅ 8分钟前 ⋅ 0

MyBatis源码解读之配置

1. 目的 本文主要介绍MyBatis配置文件解析,通过源码解读mybatis-config.xml(官方默认命名)、Mapper.xml 与Java对象的映射。 2. MyBatis结构 查看大图 MyBatis结构图,原图实在太模糊了,所以...

无忌 ⋅ 12分钟前 ⋅ 0

Ignite的jdbc与网格的连接方式的查询性能对比

环境: 数据量100万 Ignite2.5 Windows10 8g jdbc方式连接 import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; i......

仔仔1993 ⋅ 26分钟前 ⋅ 0

收集自网络的wordpress 分页导航的代码教程(全网最全版)

wordpress 分页导航是用来切换文章的一个功能,添加了 wordpress 分页导航后,用户即可自由到达指定的页面数浏览分类文章,而这样的一个很简单功能却有很多朋友在用插件:WP-PageNavi,插件的...

Rhymo-Wu ⋅ 42分钟前 ⋅ 0

微服务 WildFly Swarm 入门

Hello World 就像前面章节中的其他框架一样,我们希望添加一些基本的 Hello-world 功能,然后在其上逐步添加更多的功能。让我们从在我们的项目中创建一个 HolaResources 开始。您可以使用您的...

woshixin ⋅ 49分钟前 ⋅ 0

Maven的安装和Eclipse的配置

1. 下载Maven 下载地址 2. 解压压缩包,放到自己习惯的硬盘中 此处我将其放到了 D:\Tools 目录下。 3. 配置环境变量 右键此电脑 -> 属性 -> 高级系统设置 -> 环境变量。 在系统变量中新建,变...

影狼 ⋅ 56分钟前 ⋅ 0

python pip使用国内镜像的方法

国内源 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 华中理工大学:http://......

良言 ⋅ 57分钟前 ⋅ 0

对于url变化的spa应该如何使用微信jssdk

使用vue单页面碰上微信jssdk config验证失败的坑。第一次成功 之后切换页面全部失败,找到了解决方法,第一次验证成功后保存验证信息 切换页面时验证信息直接拿来用,加一个wx.error() 失败时...

孙冠峰 ⋅ 今天 ⋅ 0

Spring Cloud Gateway 一般集成

SCF发布,带来很多新东西,不过少了点教程,打开方式又和以前的不一样,比如这个SCG,压根就没有入门指导,所以这里写一个,以备后用。 一、集成 pom.xml <dependency> <groupI...

kut ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部