9

常见分布式应用系统设计图解(十四):日志系统

 2 years ago
source link: https://www.raychase.net/7087
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

常见分布式应用系统设计图解(十四):日志系统

典型的互联网应用的日志系统,从功能需求上看主要包括收集,存储和分析,以及展示这样三个部分,因此整个系统我觉得也可以按此思路大致可以分为三个部分:

  1. 日志收集,从宿主机上采集业务应用的日志,发送给远端的日志系统;
  2. 日志存储、分析和后期处理;
  3. 日志查询和分析数据展示。

非功能需求方面,我觉得可以考虑这样几个要点:

  • Durability:这是最重要的,尽可能不要丢失日志,到服务端的日志不要丢,在客户端的日志,也是如此,即便服务端不可用或连接断开,客户端的日志也要保存在本地。
  • Availability:其次是可用性,要保证高可用。
  • Performance:相较来说,日志系统的 performance 主要是吞吐量而非延迟,而且网络带宽需要特别算一下。
  • Scalability:业务应用增减引起的 scale 变动会非常频繁。
image-1024x500.png
  • 图中虚线为控制或辅助的逻辑,实线为实际的日志数据,或处理过的日志数据的流向。
  • 客户端日志需要分片,日志的客户端采集和处理策略存储在客户端,可以通过配置文件修改,或者通过一个第三方的系统统一将数据同步过去。
  • 本地的分片日志经过部署在客户端宿主机上的 Log Collector 应用来收集,这个应用需要独立进程,尽量避免影响主营业务。
  • 日志实时地发给 Log Service,需要数据压缩以减少带宽占用,可以采用 “微批量”(micro-batches)提高效率。
  • 特殊情况下,某些区域多个本地客户端可以部署一个 Aggregator 来进行日志实时聚合,聚合后再发给服务端 Log Service。
  • Log Service 收集到日志以后放到一个持久化的分布式队列中,比如 Kafka,首先进行错误修正、去重、格式统一化等操作,在一定时间且经过特定的下游系统消费后数据可删除。有多个不同的 consumer 会消费它上面的数据,在介绍分布式实时流处理系统的时候提到过类似的机制,不赘述。
  • 图中列出了三大 consumer,分别是日志分析系统、日志压缩存储系统和日志搜索系统。
  • 日志压缩系统可以把日志根据策略压缩并存储到一个 “cold storage” 中,这样的存储可能对查询并不友好,但是便宜,比如 S3,甚至 AWS Glacier(它用磁带存储),主要目的是备份和非常低频率的批量访问或主键查询。
  • Elastic Search 用来存放供查询的日志,这里需要考虑一个 retention policy,对于过老的日志,根据实际的需要,可以考虑从中移除出去。
  • 最后有一个 UI 来帮助日志查询和分析数据的展示,比如 Kibana。

文章未经特殊标明皆为本人原创,未经许可不得用于任何商业用途,转载请保持完整性并注明来源链接 《四火的唠叨》


Recommend

  • 37

    “ Top K 系统 ” 是非常常见的一种子系统,基本上,就是从全量巨大的统计数据中,筛选出数值最大的 K 个来并按序展示。这样的筛选可以是全时间内的,也可以是最近某一段时间内的;可以是全分类的,也可以是某个特定分类的。 具体...

  • 26

    输入提示系统,指的就是 “typeahead”,比如 Google 搜索,输入一个单词的前几个字母,后面最常用的几个搜索词会被联想出来。有时,它也需要具备一定程度的字符拼写错误自动更正能力。

  • 12

    常见分布式应用系统设计图解(十):电商秒杀系统 这篇是关于电商平台秒杀系统的。 首先,我觉得 “秒杀” 是一个中国色彩浓重的词,这样的概念在西方电商系统中也有,但只有在中国,本来业务量就已经如此之巨大了,还将其如此发扬开来。...

  • 17

    常见分布式应用系统设计图解(五):Proximity 系统 今天是介绍 Proximity 系统,我不知道怎么翻译恰当,就保留英文原文。虽说词义上说的只是 “相似度”,但多数说的是 “地理” 上的相似度。因此,这一类系统多为基于地理上的邻近程度来提...

  • 14

    常见分布式应用系统设计图解(四):输入建议系统 输入建议系统,指的就是 “typeahead”,比如 Google 搜索,输入一个单词的前几个字母,后面最常用的几个搜索词会被联想出来。有时,它也需要具备一定程度的字符拼写错误自动更正能力。

  • 18

    常见分布式应用系统设计图解(二):Feed 流系统 今天记录 Feed 流系统的设计学习笔记,Feed 流常见系统包括 Twitter、微博、Instagram 和抖音等等,它们的特点是,每个用户都是内容创作者,每个用户也都是内容消费者,每个用户看到的内容都是不...

  • 8

    常见分布式应用系统设计图解(一):即时消息系统 在自己学习各种各样软件系统,特别是分布式系统的过程中,我做了一些笔记,有许多常见的、经典的系统,是非常值得学习和总结的。它们数量不算多,但具有典型意义,可能这样的系统也就十几个。

  • 10

    这篇讲的是证券交易系统,这类系统包含的内容很多,但是我们还是把目光放在核心的交易部分,比如说股票交易。在某个可交易时间,如果卖家 A 要以至少 y 的价格卖掉股票 x,卖家 B 愿以至多 y 的价格买入股票 x,那么这个交易就可以发生。

  • 10

    短网址系统可能是最常见的分布式系统设计问题之一了,本身从业务需求上说,读远多过写,而且数据结构确定且简单,数据量小,还易于使用缓存,因此本身难度在分布式系统的问题里面算是比较低的。另外,这个系统本身 “分布式” 的特性也比较...

  • 9

    常见分布式应用系统设计图解(十五):支付系统 支付(Payment)系统可以很复杂,比如可以和银行打交道,和信用卡系统打交道。如果我们考虑用户在一家电商买东西,...

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK