11 月 19 - 20 日 Apache Pulsar 社区年度盛会来啦,立即报名! 了解详情
写点什么

京东如何建设基于云原生架构的监控 - 日志系统?

  • 2021-01-07
  • 本文字数:2716 字

    阅读完需:约 9 分钟

京东如何建设基于云原生架构的监控-日志系统?

在这个人人都谈“云原生”的时代,企业在建设内部相关系统时常常会优先考虑云原生架构。那么,云原生架构的系统与传统架构系统有什么不同?又该如何建设呢?本文我们采访了京东架构师韩超,他分享了京东基于云原生架构的监控 - 日志系统的建设之路,希望能对想要建设基于云原生架构系统的读者有所助益。


云原生监控系统有什么特殊?


随着云计算的发展,我们发现很多系统都是基于云原生架构构建的,监控系统也不例外。云原生架构监控系统与传统架构监控系统到底有什么不同?韩超表示:“这两者的本质区别是云原生架构监控系统需要以 Cloud Native 的方式来进行部署运维。”


Cloud Native 是一个发展中的体系,简单来说,云原生架构需要融入 K8s 体系,让 Monitoring、Logging、Tracing 几大功能,按照 Cloud Native 的方式运作。从系统(K8s 或 PaaS)的视角来看,云原生架构的监控需要是一个标准的东西,而非把系统改得“七零八落“;从应用的视角来看,云原生架构的监控需要与系统融为一体,接入方式不能太复杂。


传统架构的监控系统与云原生架构的功能目标大致是相同的,但细节的把握不同,后者可以视为前者的“进阶”。当然,两种监控系统面临的挑战也各有不同。


传统架构的监控系统中,主要是面临多、快、好、省四个方面的挑战:


  • 多:监控系统需要运作于数万主机、百万应用的环境中,而且开发、运维的负责度要做到 O(1)。

  • 快:监控系统要随着主机、应用快速部署完成。一台主机交付上线,有没有监控的部署速度应该是相同的;一组应用交付上线,配套的监控应当同步具备;

  • 好:监控的时效性、稳定性要强于应用。监控是应用的保障,发现问题的准确率、召回率是监控系统的关键指标。

  • 省:监控系统需要省资源,监控的 CPU、Memory 开销是监控的关键指标。


而基于云原生架构的监控系统,其挑战大多是来自于 Cloud Native 模式本身,主要包括:


  • Cloud Native 体系本身就有快速部署、自动扩缩等功能,既然应用具有这种特性,那么监控系统也需要具备同类特性;

  • 在云原生的 PaaS 中,K8s 与应用层都是标准的,监控系统作为介于二者之间的部分,“采集端侵入”的危害会更加严重;

  • 云原生秉承有标准化、自动化的核心理念,但是大型系统往往需要做“极限优化”,要满足标准化、自动化的“极限优化”,挑战就更大了。


京东如何构建监控系统?


最初,京东的应用程序全部都部署在物理机器上。这种部署方式不仅造成了物理机器资源的严重浪费,而且调度缺乏灵活性。由于物理机器的故障,应用程序迁移的时间要花数小时,无法实现自动扩展。


为了解决这些问题,京东从 2014 年开始尝试使用 Docker,并基于 OpenStack + Novadocker 架构创建了第一代容器引擎平台:JDOS1.0。此后,所有应用程序在容器里面运行,而不是在物理机器里面运行。其中,一个 OpenStack 分布式容器集群中最多有 10000 个计算节点,至少也有 4000 个计算节点。


2016 年,JDOS 1.0 的容器规模由 2000 个扩大到 100000 后,京东推出了新的容器引擎平台 JDOS 2.0,京东商城的“应用体系”从 OpenStack 切换到 K8s。



JDOS 2.0 的平台架构


京东云原生监控 - 日志系统


京东商城基础架构的 JDOS2.0 已经非常接近“云原生标准“,京东云原生监控 - 日志系统的发展和建设,与之同步。该系统的核心组成主要包括采集端、接入代理、存储模块、计算模块、服务控制中心、报警等。



  • 最核心的底层是京东商场基础架构自研的存储模块;

  • 中层则是其它各个核心模块,采用积木式可以进行排列组合;

  • 在核心的监控 - 日志系统之上是基于 API 的扩展能力,比如业务定制扩展、AIOps 扩展等。


京东云原生监控 - 日志系统各模块之间也是以服务化的方式进行联系,看起来就像是普通的应用。其中采集端比较特殊,因为它要放到 Node 环境中,并且要求每机一个。这是所有监控 - 日志系统都绕不过去的事情,京东将其做成 K8s 的标准化组件,做到了“低侵入性”。


京东监控 - 日志系统本质上都是标准的 K8s 组件,与京东容器平台 JDOS 关系密切。


  • 在 K8s 的视角,监控 - 日志系统是 DaemonSet、RS 的各个 Pod,并非改了系统。

  • 在 JDOS 容器平台的视角,监控 - 日志系统可以视为 JDOS 容器平台的一个“插件”,并非强耦合。

  • 从应用的视角来,监控 - 日志系统是一个“无需感知“的机制,例如上线无依赖。


建设监控 - 日志系统遇到的挑战


大型系统建设升级的挑战大多来自上线,上线类似于“在开车的过程中加零件”,需要保证各种稳定性。京东监控 - 日志系统也不例外,在上线的过程中,新、老系统采用“临时冗余化”、双写并行运行的模式,解决了平滑切换的问题。同时,小流量机制,也解决了占用 double 机器资源的问题。


另外,监控 - 日志系统上线常常会遇到由于“强侵入性”导致的上线顺序左右为难的问题。因此,京东监控 - 日志系统在设计之初就避免了这种问题。


报警在整个监控系统中是一个定制化极强、需求极强的模块,一般来说报警包括两个层面的东西,一是短信、邮件、IM 等通道,二是报警规则的设置引擎。


京东商城的 app 监控系统采用了极其灵活的报警规则机制,规则的设置在于使用者,而不在于监控系统的开发运维。这种设计给了各个业务开发“自我平衡”的机会,在运作的过程中,将报警的量、级别调整到比较合理的状态。同时,报警多了容易发生召回率高、准确率低;报警少了容易召回率高、准确率低。虽然这两点永远是矛盾的,但京东在技术层面也做了一些小的优化,比如自动合并、调整时间轴等。


在韩超看来,目前京东商城的监控 - 日志系统最大的亮点在于:架构灵活 + 与时俱进。架构灵活是空间维度的概念,包括对标架构、拓扑关系、部署方式三个方面;与时俱进是时间维度的概念,包括维护成本、演进模式、技术发展三个方面。


当然,该系统也还有很多值得优化的地方,在韩超看来京东监控 - 日志系统应该优化的地方也是很多大型系统架构层面的固有问题。


  • 多集群、多地域:整体架构超越了 K8s 集群的定义,监控 - 日志系统也需要进行应有的改变;

  • 整个系统的监控对象其实既有普通 App,也有数据库、缓存、队列等中间件,这里面需要整合,才能让每个业务的开发者更能感受到 Serverless 的优势;

  • 京东商城基础架构自研的 baudtime、baudlog 已经在很大程度上节省了存储资源,如果权衡读、写能力,仍有成本优化空间,查询体验也可以对标更好的 ELK。


采访嘉宾:


韩超,技术栈全面、技术底蕴深厚的跨领域架构师,曾经是中国大陆嵌入式 Linux 的先行者,从事移动多媒体、Linux 平台、互联网架构等工作,当前主要技术方向是分布式基础架构。曾任 Motorola 资深工程师、Intel-WindRiver MTS、百度主任架构师,现任京东架构师。


QCon 全球软件开发大会(北京站)2021 官方讲师招募通道已经正式开启,如果您有一个优质的话题并乐于分享交流,那就提交吧!期待你的精彩分享。

2021-01-07 14:543003
用户头像

发布了 497 篇内容, 共 274.2 次阅读, 收获喜欢 1817 次。

关注

评论

发布
暂无评论
发现更多内容

轻量级业务中台开发框架,以DDD思想为基础,融合中台核心要素,赋能中台建设

高鹏

中台 业务中台 DDD 框架 中台架构

iOS底层原理之—dyld与objc的关联

iOSer

ios ios开发 iOS Developer dyld objc

区块链要如何解决供应链金融痛点?

CECBC

区块链 金融

2020.10.05-2020.10.11 学习总结

icydolphin

极客大学架构师训练营

架构师训练营第四周课后练习

薛凯

十三、深入Python字典和集合

刘润森

Python

阿里大牛原创技术好文精选整理:Redis+Nginx+设计模式+Spring全家桶+SQL+Dubbo

Java架构之路

Java 程序员 面试 编程语言

架构师训练营第四周学习总结

Gosling

极客大学架构师训练营

架构师训练营第三周总结

薛凯

LeetCode题解:22. 括号生成,递归先生成再过滤,JavaScript,详细注释

Lee Chen

大前端 LeetCode

微服务已成Java开发的面试门槛,你连SpringCloud都不会怎么涨薪

Java架构之路

Java spring 编程 程序员 面试

架构师训练营第四周课后作业

Gosling

极客大学架构师训练营

架构师训练营第四周总结

薛凯

第四周 系统架构作业

蓝黑

极客大学架构师训练营

学习笔记丨数据结构与算法之贪心算法

Liuchengz.

贪心算法

[周末荐片]Undercover Billionaire

亚伦碎语

生活

架构师训练营第一周课后练习

薛凯

架构师训练营第一周总结

薛凯

十四、深入Python条件和循坏

刘润森

Python

Redis - redis.conf - 中文翻译

学个球

redis 缓存 翻译

一文带你轻松了解Python导入模块的各种命令

计算机与AI

Python

马化腾的区块链理想

CECBC

区块链 马化腾

spring-boot-route(十七)使用aop记录操作日志

Java旅途

Spring Boot aop

COSCon'20 & Apache Roadshow 来了,数据技术专场欢迎您

代立冬

来点不一样的: 精选200个Java技术面试真题,详解应聘Java程序员常见考点,在Github上标星89.6K

996小迁

编程 程序员 架构 面试

Java进阶架构师面试手册:核心框架篇整理,助我斩获65W架构师Offer!

Java架构追梦

Java 学习 架构 面试 框架

SpringBoot整合Jpa项目(含Jpa 原生sql语句介绍)

小Q

Java 架构 微服务 springboot jpa

分布式系统中的CAP、ACID、BASE概念

编程 分布式

每周花6小时跟清华大牛马士兵学Java:多线程高并发、JVM调优、算法、设计模式等

Java架构之路

Java 程序员 面试 算法 编程语言

职场求生攻略答疑篇之 4 —— 社会有多真实,人心就有多虚伪

臧萌

职场 职场成长

京东如何建设基于云原生架构的监控-日志系统?_运维_田晓旭_InfoQ精选文章