本文是对开源堆栈的固执己见的 SRE 观点,可轻松请求、绘制、审计和保护多个数据源的任何类型的数据访问。这篇文章是 MLOps 主题系列文章的第一篇。那么,让我们从理论开始吧!

什么是 Trino?

Trino是一个开源分布式 SQL 查询引擎,可用于针对多种类型的数据源运行即席和批量查询。 Trino 不是数据库,它是一个引擎,旨在在大数据文件系统(如 Hadoop、AWS S3、谷歌云存储等)上运行快速分析查询,同时也在各种分布式数据源(如 MySQL 、MongoDB、Cassandra、卡夫卡、德鲁伊等)。 Trino 的一大优势是它能够查询不同的数据集,然后加入信息以方便访问数据。

COMMOND-TRINO.png

Trino 通过为不同的数据库系统提供集中入口点的能力允许:

  • 开发人员避免开发、复制和维护连接到不同数据库管理系统所需的代码

  • 由于 Trino 提供的这种基础架构的抽象,管理员可以促进各种数据库系统的维护。应用程序不再直接连接到一组数据服务器,而是连接到一个可以动态配置的资源池(文章中有更多详细信息)。

Trino 得到Trino Software Foundation的支持,这是一个独立的非营利组织,其使命是维护、促进和管理 Trino 的大数据分布式 SQL 查询引擎的进步。

什么是 Apache 超集?

Apache Superset是一种云原生商业智能工具,可收集和处理大量数据以生成图形等可视化结果。 Superset 是一个基于 Web 的应用程序,允许用户生成仪表板和报告以帮助企业发展。

KUMOMIND-SUPERSET.png

Superset 经常与 Tableau、Looker 或 Metabase 进行比较,因为它可以有效地连接到多种数据源类型,如 Druid、Google Big Query、Click House、PostgreSQL 等,显然 Trino 可以绘制数据并将它们轻松嵌入到外部应用程序中。

Superset 是一个可扩展且安全的中央用户友好界面,适用于公司中想要查询和表示数据的任何人。

什么是 Apache Ranger?

Apache Ranger 可能是为大数据环境启用、监控和管理数据访问治理的领先开源项目。该应用程序是 Hadoop/Hive(以及 Trino 等相关对象存储系统)生态系统中的一个著名工具,用于提高这些分布式系统上数据访问管理的粒度。

KUMOMIND-RANGER.png

它与外部用户目录(如 LDAP)的集成及其直观的 Web 界面使定义和管理安全策略变得更加容易,从而有助于执行安全审计以控制对数据的访问。

为什么是这个堆栈?

当一个项目变得成熟时,它的架构经常会因为使用不同的数据库管理系统而变得复杂。这种复杂性体现在基础设施维护和数据可访问性管理方面。运营团队必须每天管理各种平台(维护、更新、安全、自动化、可观察性等),开发团队必须维护(并且经常复制)数据访问所需的代码。除此之外,团队还需要沟通和合作,以使系统保持最新状态,同时最大限度地减少对生产中应用程序的影响。

此堆栈的目的是通过最小化必要的维护,同时牢记一定的安全级别,便于访问存储在不同数据库系统中的数据。

为了从中央数据库系统提供的所有优势中受益,需要遵循重要的指导方针:

  • 用于管理数据的堆栈可以完全自动化。无需在数据库服务器上进行手动操作即可快速修复某些问题。从安装数据库引擎到创建数据库、备份、权限等,一切都必须自动化。

  • 自动化意味着入职和离职人员等流程。必须掌握两个流程以确保最低级别的安全性。集中访问一个工具显然更容易操作。

  • 管理权限的粒度。必须为每个应用程序和用户定义读取、写入和管理角色,以便轻松审核平台并确保符合安全策略。

  • 使用 LDAP 等中央用户目录或 KeyCloak 等身份提供者集中权限管理,以强制执行密码格式、保留期、轮换等身份验证策略。集中访问使操作生活更轻松。

  • 使用本机功能促进性能和安全审计,这些功能实时提供使用其指标(查询执行持续时间、查询所有者等)执行的查询。

  • 最小化人们请求不同数据源数据所需的堆栈。 - 拥有一个中央安全入口点来访问数据比拥有多个工具来维护更容易管理。

  • 尽量减少访问数据的工作量。开发人员可以从公共共享库中受益,从而最大限度地减少访问不同数据源所需的代码。所有应用程序都可以使用相同的连接器来访问数据库引擎,从而最大限度地减少重复和维护代码的工作量。

  • 缓存数据和查询结果以潜在地提高性能并减少对远程数据库引擎的请求。

  • 断开客户端与远程服务器或集群之间的链接。对任何数据库系统使用的资源进行抽象后,操作员可以轻松地运行管理任务(如滚动更新集群),而对生产的影响最小。

  • 使用可轻松扩展的堆栈分配负载,以提高数据的高可访问性。

  • 使用一种“语言”(SQL)查询不同类型的数据源,方便大家的日常生活。

  • 在多个数据引擎上运行查询并在应用程序上获取结果之前聚合数据。

如何在Kubernetes上部署堆栈?

本节不打算详细介绍堆栈的部署和配置过程,它将成为下一篇文章的主题。目标是列出在管理此类应用程序时要考虑的几点。主要目标是部署可扩展、高度可用且安全的架构。

在这种情况下,Kubernetes 显然是一个有趣的平台,因为它通过其结构和集成带来了许多优势。 Kubernetes 现在已经成熟,使得在 MLOps 世界中促进分布式数据系统的管理成为可能,例如 Spark、Hadoop、Kafka 以及显然是 Trino 和 Superset。

Kubernetes 在机器学习和数据管理方面提供了多项优势以降低风险:

  • 通过网络策略进行网络访问控制。数据访问管理主要是关于网络可访问性,

  • 此类平台的可观察性(指标、日志和跟踪)允许分析堆栈使用情况并相应调整分配的资源(内存、处理器、磁盘以及工作节点),

  • 继上一点之后,定义横向和纵向的自动伸缩规则,在控制预算的同时保证服务的连续性。请记住,数据处理堆栈很快就会变得昂贵,因此不要部署没有资源分配限制的任何应用程序,

  • 利用证书管理器来管理您的证书并保护端点,

  • 通过 Open Policy Agent 安全地直接访问堆栈及其行为,

  • 通过将事实来源移至 Git 源代码管理器来获得 GitOps 的好处,以确保在部署之前和之后对堆栈管理进行编码、版本控制和验证,

  • 使用部署在集群上的 Vault 代理或 Mozilla SOPS 动态安全地管理密码或配置等敏感数据,通过结合滚动更新和服务网格的原理,通过金丝雀部署将更新的影响降至最低,

  • 使用 Istio 和分布式存储服务,根据需求将工作负载分配到一个或多个集群上,受益于堆栈使用的卷的自动加密,以确保数据安全(显然取决于集群上使用的容器存储接口)。

这只是 Kubernetes 在数据管理领域中众多优势的一小部分,还有许多其他优势显然取决于使用该平台的环境。

尽管如此,强烈推荐的做法是每个环境有一个堆栈。即使可以在同一个集群上同时管理多个环境,建议将它们分开以尽量减少一个环境对另一个环境的影响(例如,开发或测试对生产环境的影响)。

下一个?

没有更多的理论,下一篇文章将展示如何将这一切付诸实践。敬请关注!

有关本文中提到的主题的更多信息,请参阅此文档:

  • Trino 网站

  • 超集网站

  • 游侠网站

  • 什么是 Trino?

关于作者

Hicham Bouissoumer — 站点可靠性工程师 (SRE) — DevOps

Nicolas Giron — 站点可靠性工程师 (SRE) — DevOps

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐