wu-sheng commented on a change in pull request #112: URL: https://github.com/apache/skywalking-website/pull/112#discussion_r471216265
########## File path: docs/zh/blog/2020-08-11-observability-at-scale-skywalking-it-is.md ########## @@ -0,0 +1,104 @@ +## SkyWalking为超大规模而生 +- 作者:吴晟 +- 翻译:董旭 金蝶医疗 +- 原文链接:[Tetrate.io blog](https://www.tetrate.io/blog/observability-at-scale-skywalking-it-is/) + +SkyWalking做为Apache的顶级项目,是一个开源的APM和可观测性分析平台,它解决了21世纪日益庞大、分布式和异构的系统的问题。它是为应对当前系统管理所面临的困难而构建的:就像大海捞针,SkyWalking可以在服务依赖复杂且多语言环境下,获取服务对应的指标,以及完整而有意义的性能视图。 + +SkyWalking是一个非常全面的平台,无论你的微服务是否在服务网格(Service Mesh)架构下,它都可以提供高性能且一致性的监控。 + +让我们来看看,SkyWalking是如何解决大规模集群的可观测性问题,并从一个纯粹的链路跟踪系统,发展成为一个每天分析百亿级跟踪数据,功能丰富的可观测性平台。 + +### 为超大规模而生 + +SkyWalking的诞生,时间要追溯到2015年,当时它主要应用于监控顶级电信公司(例如:中国联通和中国移动)的第一代分布式核心系统。2013-2014年,这些电信公司计划用分布式系统取代传统的单体架构应用。从诞生那天开始,SkyWalking首要的设计目标,就是能够支持超大型分布式系统,并具有很好可扩展性。那么支撑超大规模系统要考虑什么呢? + +### 拉取vs推送 + +与数据流向息息相关的:拉取模式和推送模式。Agent(客户端)收集数据并将其推送到后端,再对数据进一步分析,我们称之为“推送”模式。究竟应该使用拉取还是推送?这个话题已经争论已久。关键因素取决于可观测性系统的目标,即:在Agent端花最小的成本,使其适配不同类型的可观测性数据。 + +Agent收集数据后,可以在短时间内发送出去。这样,我们就不必担心本地缓存压力过大。举一个典型的例子,任意服务都可以轻松地拥有数百个甚至数千个端点指标(如:HTTP的URI,gRPC的服务)。那么APM系统就必须具有分析这些数量庞大指标的能力。 + +此外,度量指标并不是可观测性领域中的唯一关注点,链路跟踪和日志也很重要。在生产环境下,SkyWalking为了能提供100%采样率的跟踪能力,数据推送模式是唯一可行的解决方案。 + +SkyWalking即便使用了推送模式,同时也可进行数据拉取。在最近的8.x的发版本中,SkyWalking支持从Prometheus-instrumented services获取终端用户的数据,这样就减少了所谓的“一次性工程”建设,减少资源浪费。比较常见的是基于MQ的传输构建拉取模式,Kafka消费者就是一个比较典型的例子。SkyWalking的Agent端使用推送模式,OAP服务器端使用拉取模式。 + +结论:SkyWalking的推送模式是首选方式,但拉取式模式也适用于某些特殊场景。 + +### 度量指标分析并不仅仅是数学统计 + +度量指标依赖于数学理论和计算。Percentile(百分位数)是用于反映响应时间的长尾效应。服务具备合理的平均响应时间和成功率,说明服务的服务等级目标(SLO)很好。除此之外,分布式跟踪还为跟踪提供了详细的信息,以及可分析的高价值指标。 + +运维团队(OPS)和系统稳定性(SRE)团队通过服务拓扑图,用来观察网络情况(当做NOC dashboard使用)、确认系统数据流。SkyWalking依靠trace(跟踪数据),使用[STAM(Streaming Topology Analysis Method)](https://wu-sheng.github.io/STAM/)方法进行分析拓扑结构。在服务网格环境下,使用ALS(Envoy Access Log Service)进行拓扑分析。节点(services)和线路(service relationships)的拓扑结构和度量指标数据,无法通过sdk轻而易举的拿到。 + + + +为了解决端点度量指标收集的局限性,SkyWalking还要从跟踪数据中分析端点依赖关系,从而拿到链路上游、下游这些关键具体的信息。这些依赖关系和度量指标信息,有助于开发团队定位引起性能问题的代码块。 + + +### 预计算还是查询时计算? + +相比查询时计算的灵活性,预计算可以提供更好、更稳定的性能,这在分析场景下尤为重要。回想一下我们的设计原则:SkyWalking是为了一个大规模的分布式系统而设计。查询时计算的使用范围非常有限,大多数度量计算都需要预先定义和预先计算。支持大数据集的关键是:在设计阶段,要减小数据集。预计算允许将原始数据合并到下游的聚合结果中,用于查询,甚至用于警报检查。 + +使用SkyWalking的另一个重要因素是:指标的有效期,TTL(Time To Live)。由于采用了预先计算,查询提供了近似线性的高性能。这也帮助“查询系统”这类基础设施系统,提供更好的性能扩展。 + +说到警报,使用查询时计算方案,也意味着警报查询需要基于查询引擎。但在这种情况下,随着数据集增加,查询性能会随之下降,其他指标查询也是一样的结果。 Review comment: ```suggestion 关于警报,使用查询时计算方案,也意味着警报查询需要基于查询引擎。但在这种情况下,随着数据集增加,查询性能会随之下降,其他指标查询也是一样的结果。 ``` ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org