zoukankan      html  css  js  c++  java
  • Lumen: Custom, Self-Service Dashboarding For Netflix-By Trent Willis

    翻译自

    https://medium.com/netflix-techblog/lumen-custom-self-service-dashboarding-for-netflix-8c56b541548c

    Netflix产生大量数据。我们获得有用见解的方法之一是通过在仪表板中可视化数据,从而使我们能够快速理解大量信息。当出现操作问题时,这一点尤其重要,因为我们的工程师需要能够快速诊断问题区域并进行纠正。

     

    但是,操作问题只是Netflix仪表板的一种潜在用例。我们还使用仪表板来跟踪和绘制关键业务指标,比较实验结果,监控实时数据,甚至找出午餐菜单上是否包含汉堡。

     

    简而言之,仪表板对Netflix很重要,但并非只有任何仪表板平台都对我们有效。

     

    尤其是,适用于Netflix的任何仪表板平台都必须满足以下约束:

    • 用户需要能够自行构建动态仪表板。由于Netflix的工程师是全周期开发人员,因此我们的平台应该是自助服务,这样一个集中的团队就不会成为满足工程师及其拥有的服务的各种需求的瓶颈。
    • 根据上述内容,它必须支持各种用例和使用模式,因此该解决方案必须非常灵活,并允许自定义仪表板创建。
    • 必须支持使用不同的传输方法来自无数不同来源的数据,例如通过WebSockets传输流数据,长时间运行的查询(完成后重定向到缓存)以及标准的RESTful API。
    • 在发生操作事件时,仪表板需要快速且响应迅速,以便可以进行快速分析以及可能的探索,以识别和修复问题。
    • 必须为Atlas和其他对运营至关重要的Netflix技术提供一流的支持

    我们的平台需要高度灵活,动态且高性能,同时为用户提供大量控制权。八年前,当我们首次为我们的运营指标投资一个仪表板平台时,没有一种能够满足上述约束同时又对Netflix保持成本效益的合理解决方案。因此,我们建立了自己的。它被称为Lumen

     

    为灵活性而设计

    Lumen是一个仪表板平台,允许用户定义在运行时在浏览器中解析的JSON配置文件,以生成自定义仪表板。

     

    从较高的角度看,Lumen的体系结构似乎相对简单。从后端存储加载配置,然后将其解析为内部数据结构。然后将该数据结构传递到渲染器,该渲染器为仪表板生成可视化效果和UI控件。然后,当用户与呈现的UI控件之一进行交互时,该过程会重复,并将新值应用于相同的配置。

    这个简单的架构所隐藏的是流明配置可能非常复杂。用户可以配置其仪表板的大多数方面,包括显示的可视化效果,使用了哪些数据源以及要显示哪些UI控件,甚至可以编写可在运行时根据可变条件重新配置的配置。

    通过JSON驱动,我们的用户可以轻松创建和编辑自己的仪表板,同时还可以与其他可以生成JSON的工具很好地集成。尽管这些配置可能很复杂,但由于我们改进了流明并消除了用户所需的常见模式,因此,我们确定了一些核心概念,可以通过组合实现大多数其他功能和模式。

    因此,现在,Lumen中的每个仪表板主要由以下概念组成:

    • 数据源 —定义如何将某种类型的数据加载到仪表板中以供使用。它们可以是通用的(例如REST数据源),也可以是类型的(例如Atlas数据源)。类型化的数据源可以建立在核心,通用类型的数据源之上。例如,可以将Elasticsearch数据源构建为REST数据源,该数据源配置为将查询发布到Elasticsearch API。
    • 可视化 -定义如何在仪表板上显示一些数据。从您的标准折线图或条形图到自定义Markdown格式的表格,Lumen支持各种可视化。这些可视化类型独立于任何特定的数据源,但是它们确实要求输入数据具有特定的结构。
    • 映射器 -定义如何将有效载荷从数据源转换为Lumen可以理解和使用的格式,例如可视化效果所需的数据结构。这就是流明如何使任何数据源与任何可视化配合使用的方式。映射器还可以用来转换仪表盘配置本身或将数据映射为变量,如下所述。
    • 变量 -定义值,然后可以将其替换为配置的其他部分。变量可以在配置中静态定义,但也可以定义为控件,例如输入或切换,用户可以随后从UI进行修改。例如,您可以添加一个变量控件,该控件允许用户在查看生产环境或测试环境的数据之间切换。变量使您可以将动态值添加到仪表板,甚至可以用来修改映射器的输出以提供更大的灵活性。

    这四个概念的组合使我们的用户可以灵活地使用所需的任何数据自行构建动态和反应式仪表板。这些概念对于呈现的每个可视化“单元”也很好地融合在一起,以使它们在需要时可在多个仪表板上重复使用。

    我们的用户可以从用户界面中精确控制他们希望动态和可控制的字段和值。这使一些用户可以针对非常特定的用例构建仪表板,而另一些用户可以构建针对非常广泛和探索性用例的仪表板。

    在保持灵活性的同时保持响应能力

    虽然Lumen的体系结构为我们的用户提供了灵活而动态的平台,但默认情况下并不一定会为自己带来敏捷而响应迅速的用户体验。例如,Lumen几乎不了解给定仪表板的数据源将如何运行。他们会发送大型有效载荷吗?他们会需要大量的客户端数据处理吗?他们会有合理的延迟吗?

    为了满足我们的业务用例的需求并提供令人愉悦的用户体验,我们很快意识到我们无法像通常在Web应用程序中那样进行数据获取和解析。

    大多数Web应用程序都在浏览器的主要JavaScript线程上获取和解析数据。当您处理大量数据或复杂的用户逻辑时,这可能会在浏览器中导致“混乱”,这在您的应用开始滞后甚至在主线程繁忙时冻结时尤为明显。

    为了避免这一问题和相关问题,流明的大多数数据操作都在 网络工作者当仪表板加载其所有数据时,这使Lumen可以使主线程保持空闲状态,以便用户进行交互,例如滚动和与单个图表交互。

     

    这种设计意味着我们还可以在worker中加载和执行mapper函数。由于用户能够定义自定义转换,因此这是有益的,因为它使我们能够最大程度地减少失败或错误的爆炸半径。即使数据转换灾难性地失败,也不会导致整个应用程序崩溃。除了阻止数据转换阻塞主线程之外,还会发生这种情况。
     
    除了工作人员之外,我们还投资了利用本机Web组件技术来保持应用程序轻巧及其组件的可移植性。尽管并非所有内容都有意义,但流明的各个方面(例如我们的交互式Atlas图,URL管理库等)可以在其他内部工具之间轻松共享。
     
     

    展望未来

    自从Lumen最初构想成为一个功能强大,灵活而又动态的平台,满足Netflix各种仪表板需求后,Lumen有了很大的发展。每周大约有1,500个唯一用户通过5,000个唯一的仪表板接收超过150,000次观看。这些视图每天从十几个不同的后端数据源中生成超过45万张图表。

    该平台的灵活性极大地推动了Lumen在内部的采用,我们不断面对我们的用户,为该平台找到新的有趣的用例,包括有趣的“ hacks”,例如构建午餐食品仪表板。

    随着Netflix的持续增长,我们预计对强大的仪表板平台的需求将继续增长,并为继续改进Lumen感到兴奋。我们认为流明目前有三个主要方面需要改进。

    首先是减少不再适合Lumen现在所基于的核心概念的旧功能。与许多长期存在的项目一样,过去添加的某些功能不再有意义。一些解决方案只针对有限的用例,而另一些则被更通用的解决方案所取代,这些解决方案为用户提供了更多的控制权。

    第二个是通过使用户更容易创建和管理仪表板来提高流明的可用性。当前,这意味着改进我们为用户提供的配置编辑工具。将来,这将意味着为用户提供一个强大的WYSIWYG风格的界面,该界面可以减轻认知负担,同时更容易发现Lumen提供的强大功能。

    最后,我们要继续投资流明的可扩展性。尽管当前的体系结构可以轻松带来自己的数据源,但是创建自定义可视化效果或添加对与其他工具集成的一流支持都需要更改Lumen的源代码。我们计划使系统更加可插拔,以使用户能够扩展平台而无需维护人员的直接支持。

    我们与Lumen的最终目标是应对众多用户的所有挑战,同时为他们提供体验,使他们能够专注于仪表板中的关键信息和价值,而不是所使用的工具。流明的未来是光明的!

    Lumen由Netflix的Trent Willis,John Tregoning和Matthew Johnson开发和维护。 我们一直在寻找新的想法和改进方法。因此,如果您有兴趣在这个领域中贡献或只是谈论想法,请访问LinkedInTwitter

    一个没有高级趣味的人。 email:hushui502@gmail.com
  • 相关阅读:
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
    LeetCode
  • 原文地址:https://www.cnblogs.com/CherryTab/p/12098347.html
Copyright © 2011-2022 走看看