暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

了解 pgAdmin 4 架构

原创 Ellison 2022-08-03
3806

pgAdmin 4 架构

pgAdmin 4 是 Postgres 领先的开源管理工具。pgAdmin 旨在通过单个图形界面监控和管理多个本地和远程 PostgreSQL 和 EDB Advanced Server 数据库服务器,该界面允许轻松创建和管理数据库对象,以及用于管理数据库的许多其他工具。

pgAdmin 可以以两种模式安装:桌面模式和服务器模式。桌面模式作为独立应用程序安装,由同一操作系统用户使用,而服务器模式可以通过网络访问,允许多个用户使用。

两种模式实现都遵循 3 层架构方法。这篇博客解释了两种模式下使用的 pgAdmin 架构和技术。

服务器模式

服务器模式可以在作为反向代理运行的网络服务器后面配置,也可以使用 WSGI 接口进行配置。它可以在本地或通过网络从 Chrome、Firefox、Safari 等浏览器访问。以下架构图显示了服务器模式下 pgAdmin 的简单概述。pgAdmin 可以作为 Apache HTTPD 下的 WSGI 应用程序运行,使用 mod_wsgi,使用 uWSGI 或 Gunicorn 独立运行,或者在 NGINX 下使用 uWSGI 或 Gunicorn 运行。它还可以在可在 Docker、Kubernetes 或 OpenShift 下运行的预构建容器中使用。

服务器模式

桌面模式

桌面模式基于 NWjs,集成了 Chromium 浏览器和 NodeJS,并管理 pgAdmin 的 Python 服务器以创建独立的应用程序。启动时,运行时启动 pgAdmin 服务器并打开一个窗口来呈现用户界面。下面的架构图说明了 pgAdmin 服务器和 NWjs 的集成:

桌面模式

应用架构

下图显示了 pgAdmin 应用程序架构:

应用架构

pgAdmin 服务器是使用 Flask 框架运行的 Python 应用程序的一个实例。它具有以下组件。

  • SQLite 数据库- 这是用于存储所需信息的后端数据库,例如用户详细信息、服务器组、服务器、用户首选项等。pgAdmin 使用 python ORM - SQLAlchemy - 来定义数据库表并对其执行操作。Flask-Migrate_包用于维护数据库版本。模型定义可以在 pgAdmin 源代码中的’…/pgadmin/models/__init__.py’中找到__。_
  • pgAdmin Web 应用程序- Apache HTTPD 服务器(通常简称为 Web 服务器)通常与 mod_wsgi 一起使用,以托管 pgAdmin 的用户界面和 Web API,但也可以将 Gunicorn 或 uWSGI 等 WSGI 运行器与其他 Web 服务器一起使用. 在桌面模式下,使用 Flask 的内部 Werkzeug 服务器。

该应用程序使用_Flask框架实现,并使用__psycopg2_驱动程序与数据库服务器通信。Jinja 模板与版本控制系统一起为特定数据库服务器定位模板的正确版本,用于生成动态 SQL 查询以检查和修改数据库。

pgAdmin 实现了模块化的代码结构。每个模块都是一个文件夹,其中包含:

  • ‘__init__.py’ 编写 python 代码的地方,
  • 包含 javascript、css 文件和图像的静态文件夹。
  • 模板文件夹包含用于生成动态 sql 查询以在数据库服务器上执行所需操作的 .sql 文件。
  • 测试文件夹包含相应模块的单元测试用例。

代码结构的核心遵循相同的 Postgres 数据库对象层次结构,例如服务器组 > 服务器 > 数据库 > 模式 > 表 > 列。\

一些重要的附加模块是:

身份验证
pgAdmin 支持多种第三方身份验证方法,如 Kerberos、LDAP 和 OAuth2。该模块包含一个特定于方法的 python 文件,其中包含使用第三方提供的相应身份验证机制验证用户的代码。

工具
pgAdmin 提供了不同的工具,这些工具为 postgres 提供的命令行实用程序提供用户界面,如备份、恢复、维护等。这些模块通过 pgAdmin 用户界面从用户那里获取输入,并将这些操作作为后台进程执行。

bgprocess
此模块提供实用功能来管理和通知用户有关长时间运行的后台进程(如备份)。它通过 python 使用操作系统级实用程序生成子进程并监视它们。Process logger 捕获并记录来自子进程的 stdout 和 stderr 消息。


此模块使用 boto3 等客户端库来连接云提供商并在云中配置 postgres 实例。

用户界面

用户界面在 Javascript 和 Backbone Javascript 框架中实现,目前正在迁移到 React js。webpack_实用_程序用于在随安装程序一起发布之前加载和捆绑 CSS、Javascript 文件。捆绑的 javascript 模块提高了性能和加载速度,因为不需要逐个获取 javascript。

pgAdmin 使用 webpack 功能“代码拆分”来加载必要的脚本。这些块分为四个类别:‘vendor.main、vendor.others、browser_nodes、pgadmin_common’。

结论

pgAdmin 应用程序为 PostgreSQL 和 EDB Postgres Advanced Server 数据库服务器提供管理和管理功能。pgAdmin 架构以模块化方式设计,这使得 pgAdmin 易于理解和灵活的修改和维护。

image.pngYogesh Mahajan 是 EDB 的首席软件工程师。他的核心能力是 Python、Javascript、Java 和云技术 AWS、Openstack 和 Azure。他还是 AWS 认证的解决方案架构师。自 2019 年以来,他一直在开发和测试领域为 pgAdmin 做出贡献。

原文标题:pgAdmin 4 Architecture
原文作者:Yogesh Mahajan
原文地址:https://www.enterprisedb.com/blog/pgadmin-4-architecture

最后修改时间:2022-08-05 10:00:12
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论