Apache Skywalking 实战 阅读笔记 第一章
Apache Skywalking 实战 阅读笔记 第一章一、参考资料二、笔记总结前言从2010年开始分布式架构几乎颠覆了整个IT架构微服务、容器化、Kubernetes等。传统监控系统越来越难以跟上系统发展的步伐。从2012年到2015年我吴晟因为参与中国联通的首个全国集中系统饱受分布式系统错误定位的困扰也是在那时我决定着手建立SkyWalking这个项目。2017年年底SkyWalking作为中国的个人项目社区加入Apache孵化器并于2019年年初毕业成为Apache顶级项目。Apache SkyWalking 被很多世界500强公司采用。SkyWalking在国内有庞大的用户群体几乎涵盖了包括互联网、ICT、银行、航空公司、保险、教育、电信、电力等在内的所有行业。第1章 全面认识Apache SkyWalking1.1、SkyWalking介绍1.1.1、什么是SkyWalkingSkyWalking是一个针对分布式系统的应用性能监控(Application Performance Monitor, APM)和可观测性分析平台(Observability Analysis Platform)。主流大型企业的内部系统都有几十个子系统其中有上百个服务和上千个实例在运行理解这套系统的依赖关系是SkyWalking要解决的第一大问题。最重要的是SkyWalking保证了在生产环境中高压力情况下的可用性。1.1.2、SkyWalking的发展历程2018年是项目高速发展的一年项目团队在2018年发布了SkyWalking 5并得到华为、阿里巴巴等大厂的支持初步开始被较为广泛地运用。GitHub上排名最高的开源分布式追踪和APM项目。1.1.3、SkyWalking的适用场景SkyWalking是一个为微服务、容器化和分布式系统而生的高度组件化的APM项目。随着微服务的兴起应用系统开发人员就注意到系统的调试过程越来越复杂在线运行程序出现故障时面临的问题定位已经很难使用传统日志进行排查。程序性能的监控和问题定位需求也越来越急迫。SkyWalking不是一个单纯的追踪系统支持轻量级分析拓扑图、应用性能指标等功能而Zipkin和Jaeger都专注于追踪本身。2012年由韩国Naver公司开源的APM项目Pinpoint曾经是GitHub star数最多的APM项目2019年被SkyWalking超过。Pinpoint立足于HBase;SkyWalking使用包括Elasticsearch在内的多种存储却不支持任何一种大数据技术。SkyWalking以监控千亿级流量为基础要求自己不能反而成为整个大型分布式系统的部署和运维难点而大数据技术却适得其反会大幅增加运维和部署难度。1.2、SkyWalking的架构设计SkyWalking由以下4个核心部分构成探针对应图1-1中Tracing和Mestrics部分OAP平台它是一个高度组件化的轻量级分析程序。存储实现SkyWalking的OAP Server支持多种存储实现。UI模块统计数据查询和展现。1.2.1、面向协议设计1.2.2、模块化设计1.2.3、轻量化设计1.3、SkyWalking的优势SkyWalking的优势在于它紧跟当前的技术发展趋势保证同一套APM系统适用于传统架构和云原生架构。1.3.1、传统分布式架构与云原生的一致性支持随着近十年服务化和微服务化的进程以RPC和HTTP服务为通信技术核心以注册中心作为服务注册与服务发现的架构已经成为国内成熟的微服务“传统”架构。主流技术有Spring Cloud、Apache Dubbo等。SkyWalking从2015年项目诞生之初就把这种传统的分布式架构及自动探针作为最为核心的功能。同时从2018年起由Google、Lyft和CNCF的Istio与Envoy组成的Service Mesh方案开始流行提供了在Kubernetes上创新的分布式服务管理、监控和安全管理能力。在6.x版本中SkyWalking针对Istio和Envoy组成的Service Mesh方案提供了核心适配能力。利用SkyWalking的后端OAP平台以及UI可以对Service Mesh管理中的服务提供同样的依赖拓扑、服务性能指标、告警等能力。90%以上的配置与使用其他语言探针如Java探针时完全一致。为不同公司的技术栈提供统一的监控能力更有利于公司在未来系统架构升级中保持监控系统的一致性。1.3.2、易于维护监控系统作为二线甚至三线系统应该利用有限的环境资源提供尽可能大的监控价值同时尽可能降低对于运维的要求。同时SkyWalking的构建集群架构比较简单用户只要针对自己的数据量对于不同的存储平台如MySQL、TiDB或Elasticsearch等具备基本的集群运维能力就可以轻松监控百亿级的流量系统。1.3.3、高性能SkyWalking在永辉超市的典型公开案例中使用15台OAP节点和20台Elasticsearch节点就支撑了250多个服务每天高达3TB的监控数据数据流量超过百亿。1.3.4、利于二次开发和集成SkyWalking的二次开发和集成的便利性主要分为两方面。面向协议和模块化的设计。面向协议保证其他的探针接入只需要学习协议就可以轻松完成对接。而模块化给予用户深度定制的能力模块实现的可切换使用户可以对分布式计算过程、集群管理与协调模式、存储、告警引擎、可视化页面等进行个性化定制。大量的SkyWalking内置实现提供了第三方网络接口HTTP或gRPC接口。用户可以使用第三方程序进行对接而非进行程序改造。这样能保证SkyWalking版本升级时周边生态的稳定。而且在容器化大行其道的今天网络接口集成的方式也更为友好。SkyWalking的几百家公开用户大量使用了这些扩展方式定制了丰富的内部系统也保证了SkyWalking内核的稳定和高通用性。1.4、SkyWalking开发必备知识介绍1.4.1、JavaAgent介绍1. 概念简介SkyWalking探针在使用上是无代码侵入的而这种无侵入的自动埋点基于Java的JavaAgent技术。启动时加载的JavaAgent是JDK 1.5之后引入的新特性此特性为用户提供了在JVM将字节码文件读入内存之后使用对应的字节流在Java堆中生成一个Class对象之前对其字节码进行修改的能力而JVM也会使用用户修改过的字节码进行Class对象的创建。SkyWalking探针依赖于JavaAgent在一些特殊点某个类的某些方法拦截对应的字节码数据并进行AOP修改。当某个调用链路运行至已经被 SkyWalking代理过的方法时SkyWalking会通过代理逻辑进行这些关键节点信息的收集、传递和上报从而还原出整个分布式链路。2. 动手实现JavaAgent3. JavaAgent流程与原理4. 小结1.4.2、远程调试介绍1.4.3、Service Mesh介绍1.5 本章小结SkyWalking具有全面的功能特性和技术的先进性。本章不仅概要介绍了SkyWalking项目的使用场景、特点和优势让读者对SkyWalking项目有了整体了解还对项目开发中最常用的几项技术进行了简要介绍方便大家为后续的深入学习做好技术准备。下一章将正式介绍SkyWalking项目的安装和使用上手体验SkyWalking。