继续Ada的PG探索之旅,
多租户是一种单个软件实例可以为多个不同用户组提供服务的软件架构。软件即服务(SaaS)就是一种多租户架构。在云计算中,多租户也可以指共享主机,其服务器资源将在不同客户之间进行分配。与多租户相对应的是单租户,单租户是指软件实例或计算机系统中有1 个最终用户或用户组。
重案组里面很多年O记的阿Sir,都有一个先入为主的观念,多租户必须和Oracle多租户一样才是多租户,Cluster必须是Oracle RAC的架构才算Real cluster,这个观念导致Ada学习历程中很多困惑,但又慢慢理解了技术的发展历程和多样性。
关于PG的多租户对比Oracle多租户,结论是:
PostGreSQL结合多种开源技术和框架,它可以实现广义软件架构上的多租户模式,但是PostGreSQL本身不提供和Oracle多租户类似的架构。
Oracle多租户模式如下:
这个大家很熟悉了。在Oracle里面,
您可以使用 PDB 将应用程序彼此隔离。
您可以将 PDB 用作可快速移植的数据库集合。
您可以克隆 PDB 并将它们传输到不同的 CDB基座。
将许多数据库(单个 PDB)作为一个整体进行管理。
每个 PDB 的独立安全、用户、权限和资源管理提供了更好的应用程序隔离。
启用共享单个 Oracle 服务器的多个单独应用程序的统一数据库模型。
提供一种使用 PDB 修补和升级单个客户端和/或应用程序的更简单方法。
多租户容器级别和单个 PDB 级别(物理和逻辑备份)都支持备份。
多租户 CDB 可以支持一个或多个 PDB。
每个 PDB 都包含自己的副本
SYSTEM
和应用程序表空间。PDB 共享 Oracle 实例内存和后台进程。使用 PDB 可以将许多数据库和应用程序整合到同一 Oracle 实例下的单独容器中。
CDB 中存在一个根容器 (CDB$ROOT),其中包含 Oracle 实例重做日志、undo表空间和控制文件。
CDB 中存在单个种子 PDB,用作创建新 PDB 的模板。
PG的多租户模式一般为,
Database Level
一个PostgreSQL服务器包含一个或多个数据库。它们是完全隔离和独立的。如果为每个租户创建单独的数据库,就会非常安全。
Schema Level
一个数据库包含一个或多个模式。您可以使用SQL GRANT来设置模式隔离。如果您希望将每个租户的数据与公共数据连接起来,并将公共数据保存在一个地方,从而消除了同步的需要,那么这种解决方案是有意义的。
1. 首先schema级的隔离,这种在Oracle DBA看来,在Oracle架构里面,这就不是多租户。当然,最终通过各种隔离,均衡负载,高可用解决方案的加强下,也可以实现应用架构上要求的多租户的特性。
2. 那么Database Level级的多租户,其实就是在一个PG cluster中运行了多个PG Database,这个模式和Oracle最大的区别就是,它虽然共享了软件,每个database也是高度的隔离,但是它没有共享系统资源(Server Process),这就缺乏了Oracle多租户的最大卖点之一,共享系统资源,提高整合度,减本增效。同时,在Oracle的Root Container中,可以对它用用的PDB可以进行完全的管理,而PG默认是没有同类的架构的,当然你也可以通过其它技术手段来实现类似的功能。
下图为PG9的后台进程和系统区域架构图
而Oracle多租户的一系列高级功能,PG均需要通过三方的开源或闭源的插件来进行实现,或者部分实现。部分功能完全不支持。如:
PDB的快速移动,插拔
PDB的远程clone,热克隆
PDB的refresh
PDB的旋转snapshot
PDB在dataguard中灵活管理
CDB的队列管理,在一个CBD中管理多个CBD中的PDB
PG的多租户的概念,它实现的主要为了实现是:
安全
简单的版本升级
避免"吵闹的邻居"。
共享软件
浏览了一些国外的一些PG多租户方案,发现均是需要和Docker, Nginx, 甚至结合Django,来实现的整体软件架构的多租户模式,比如AWS就提供多种他们自研技术基础上的PG多租户数据库。比如可以参考这篇文章:
所以还是开篇那句话:
PostGreSQL结合多种开源技术和框架,它可以实现广义软件架构上的多租户模式,但是PostGreSQL本身不提供和Oracle多租户类似的架构。对比中,可以看出在这些高级功能上,体现了商业成熟产品和开源产品的重大区别。
但PG本来就是免费使用,
2022年12月29日