zoukankan      html  css  js  c++  java
  • saas 多租户数据库租赁模式 【转载】

    引言

          在设计多租户Saas 应用时,必须谨慎的选择最适合应用程序需求的租户模型,租户模型决定了每个租户的数据如何映射到存储,选择的租户模型会影响应用的设计及管理,如果前期没有选择合适模型,后期在进行切换到另一个模型需付出昂贵的代价;

    Saas 的概念和术语

         在软件即服务Saas 模式中,公司不会向外出售软件许可证,而是,每个客户都需向公司支付租金,购买服务,使每个客户成为公司的租户,形成租户模式;

         作为支付租金的汇报,每个租户可以访问Saas 应用程序组件,并将其数据存储在Saas 系统中;

         租户模式:如何组织租户的数据存储;

         单租户:一个数据库只存储一个租户的数据,

         多租户:一个数据库存储来自多个独立租户的数据(具有保护数据隐私的机制)

         混合租户:一个数据库即存储单租户数据同时也存储多租户数据(具有数据共享机制);

    如何选择合适的租户模型

         一般来说,租赁模型不会影响应用程序的功能,但它可能会影响整个解决方案的其他方面;

         标准用于评估每个模型:

         1.可扩展性

         2.租户数量级

         3.单租户存储级别

         4.集中存储

         5.负载

         6.租户隔离性数据隔离和性能

         7.单租户成本(数据库成本)

         8.开发复杂度

         9.数据结构的变化

         10.查询语句的变化

         11.运维复杂度

         12.性能监控和管理

         13.数据结构管理

         14.租户数据的恢复

         15.灾备处理

         16.可定制化程度

         17.租户的需求自定义架构的容易程度

              这里对租户的讨论聚焦在数据层,需考虑一下应用,应用程序层被视为一个整体实体。

    如果将应用程序划分为许多个小型组件,租户模型选择可能会发生变化,对于租户和存储技术或使用的平台,针对不同的选型组件

    进行不同化的处理;

    独立的单租户应用+独立的单租户数据库

        在该模式中,对于每一个租户,整个应用程序需要重复安装一次,应用程序的每个实例都是独立的,因此它不会与任何其他实例交叉,每个租户都有自己的数据库;

        

        每个应用实例都安装在单独的Azure 资源组,资源组可以术语软件供应商或租户拥有的订阅服务中,无论哪种情况,供应商都可以为租户管理软件,每个应用程序实例都配置为

    连接到其的相应数据库;

        每个租户数据库都作为独立数据库进行部署 ,该模型提供了最大的数据库隔离,但隔离需要为每个数据库分配足够的资源来处理其高峰负载;这里需要关注的是,弹性池不能用于

    部署在不同资源组或不同订阅服务数据库中,这种限制使得这种独立的单租户应用程序模型成为:从整体数据库成本角度来看昂贵的解决方案。

         即使应用程序实例安装在不同的租户订阅服务中,供应商也可以访问所有独立应用程序实例中的所有数据库;访问是通过SQL 连接实现的,这种跨实例访问可以使供应商能够集中化

    架构管理和跨数据库查询以用于报告或者分析目的;如果需要这种集中式管理,则必须部署一个目录,将租户标识符映射到数据URI中;

    Azure SQL 数据库提供了与SQL 数据库一起使用以提供目录的分片库,分区库被正式命名为弹性数据库客户端库(Elastic Database Client Library)

    支持多租户应用+每个租户独立数据库

         这个模式具有多个数据库的多租户应用程序,均为一个租户一个数据库,为每个新租户提供一个新的数据库,通过为每个节点添加更多资源来垂直扩展应用程序层;或者通过添加节点来

    更多节点来横向扩展应用程序层,缩放基于应用程序的工作负载,并且与个体数据库的数量或规模无关;

         

        与独立的应用程序模式一样,使用单租户数据库可以提供强大的租户隔离,可以为租户定制和优化任何给定数据库的模式,此自定义不会影响应用中的其他租户,有时租户可能需要超出所有租户所需的基础数据库字段的数据,另外,额外的数据字段可能需要一个索引;

        使用每个租户一个数据库,为一个或多个独立租户定制架构很容易实现,应用程序供应商必须设计程序来严谨的管理架构自定义;

        当数据库部署在同一资源组中时,可以将它们分组为弹性数据库池,这些数据库池提供了一种跨多个数据库共享资源的经济高效的方法;选择弹性数据池比要求每个数据库足够大以容纳它所经历的使用高峰要优惠的多,尽管弹性数据库池共享对资源的访问,它们仍然可以实现高度的性能隔离。

        

            Azure SQL 数据库提供了配置、监视和管理共享所需的工具;数据库池级别和数据库级别的性能指标均可在Azure 门户中以及通过Log Analytics获取;这些指标可以深入了解总体和租户特定的性能,各个数据库可以在数据库池之间移动,为特定租户提供预留资源,这些工具使企业能够以经济高效的方式确保良好的性能;

            Azure SQL Database 平台具有许多旨在管理大规模数据库的管理功能,例如超过100,000个数据库,这些功能能确保每个租户数据库模式合理性;

            例如,假设系统只有1000租户,使用唯一的一个数据库,数据库可能有20个索引,如果系统转换为拥有1000个单租户数据库,则索引数量将数量增至20,000,在SQL Database 中,作为自动调整的一部分,默认情况下启用自动索引功能,动索引为其管理所有20,000个索引及其正在进行的创建和删除优化,这些自动化操作发生在单个数据库中,并且不会被其他数据库中的类似操作所协调及限制,自动索引处理繁忙数据库中的索引与繁忙数据库中的索引不同,如果必须手动完成这项巨大的管理任务,那么这种类型的索引管理定制在按租户划分的数据库是不切实际的;

            另外在可伸缩性管理上,还拥有以下特色:内置备份、高可用、磁盘加密、性能遥测等;

            这些管理操作可以通过devops模型编写和提供,这些操作甚至可以自动化并在应用程序中公开;

            例如,可以自动将单个租户回复到较早的时间点,恢复只需要恢复存储租户的一个单租户数据库,这种恢复对其他租户没有影响,这也证实了管理运营处于每个租户的细粒度级别;

    支持多租户的单应用+支持多租户的单数据库

            另一种可用模式是将多租户存储在多租户数据库中,应用程序实例可以具有任意数量的多租户数据库;

    多租户数据库模式必须具有一个或多个租户标识符列,以便可以选择性检索来自任何给定租户的数据,此外,该模式可能需要一些仅有租户自己使用的表或列,但是,静态代码和参考数据仅存储一次,并由租户共享;

           数据:多租户数据库必然会牺牲租户隔离, 多个租户的数据一起存储在一个数据库中,在开发过程中,确保查询不会暴露来自多个租户的数据,SQL 数据库支持行级安全性,它可以强制将查询返回的数据限定为单个租户;

           处理:多租户数据库跨所有租户共享计算和存储资源,数据库作为一个整体可以被监控,以确保它的性能可以伸缩,但是,Azure 系统没有内置的方法来监视和管理单个租户使用的资源,因此,多租户数据库会增加被污染的风险,其中一个过于活跃的租户,工作负载会影响同一数据库中其他租户的性能体验,附加的应用程序层来监视租户层的性能指标;

           通俗来讲,多租户数据库对租户来说,成本最低,独立数据库的资源成本低于同等规模的弹性池,此外,对于租户只需要有限存储的情况下,潜在的数百万租户可能存储在单个数据库中,没有弹性数据库池可以包含数百万个数据库,但是,每个数据库池包含1000个数据库的解决方案可能会达到数百万的规模,有可能变得难以管理;

           以下将讨论多租户数据库模型的两种变体,分片多租户模型是最灵活和可扩展的:

           最简单的多租户数据库模式使用单独的独立数据库来存储所有租户数据,随着越来越多的租户被添加,数据库被扩大了更多的存储和计算资源,这种放大可能是所需要的,尽管总是有一个最终的限制,然而,早在达到这一限制之前,数据库就变得难以管理;

            针对单个租户的管理操作在多租户数据库中实施起来要复杂的多,大规模的这些行动可能会变得被我们所无法去接受,一个很坏的例子就是尝试只恢复某一个租户某一个时间点的数据;

            大多数Saas应用程序一次只能访问一个租户的数据,此访问模式允许租户数据分布在多个数据库或分片中,其中任何一个租户的所有数据都包含在一个分片中,结合多租户数据库模式,分片模型允许几乎无限的规模;

            

                      分片增加了设计和运营管理的复杂性,需要在其中维护租户和数据库之间的映射目录,此外,还需要管理程序来管理碎片和租户人口,例如,必须设计程序以添加和删除分片,并在分片之间移动租户数据,一种扩大规模的方法是添加一个新的分片并将其填入新租户 ,在其他时候,可能会将人口稠密的分片分成两个密度较小的分片,几个租户搬迁或停产后,可能会将人口稀少的分片合并在一起,合并将导致更具成本效益的资源利用率,租户也可能在分片之间移动以平衡工作量;

                      SQL 数据库提供了一个拆分/合并工具,与分片库和目录数据库一起使用,提供的应用程序可以拆分和合并分片,并可以在分片之间移动租户数据,该应用程序还在这些操作过程中维护目录,在移动它们之前将受影响的分片租户标记为离线,移动后,应用程序再次使用新映射更新目录,并将租户标记为重要联机;

                       通过将租户分布在多个数据库中,分片多租户解决可生成更轻松管理的小型数据库,例如,将特定租户恢复到以前的时间点现在涉及从备份恢复单个较小的数据库,而不是包含所有租户的较大数据库,可以选择数据库大小和每个数据库的租户数量来平衡工作负载和管理工作;

                       根据所使用的分片方法,可能会对数据库模式施加额外的约束,SQL Database 拆分/合并应用程序要求Schema包含分片的Key,通常是租户标识符,租户标识符ID是所有分片表主键中的主要元素,租户标识符使分离/合并应用程序能够快速定位和移动与特定租户相关联的数据;

                        分片多租户数据库可以放置在弹性数据池中,一般来说,在一个数据池中拥有许多单租户数据库的成本效率与在少数多租户数据库中拥有许多租户相当,当有大量相对不活跃的租户时,多租户数据库是有利的;

    混合分片多租户数据库

         在混合模型中,所有数据库在其Schema 中都有租户标识符,这些数据库都能够存储多个租户,并且数据库可以被分割,所有在架构意义上说,它们都是多租户数据库,然后在实践中,其中一些数据库只包含一个租户,无论如何,存储在给定数据库中的租户数量对数据库架构没有影响;

          在任何时候,都可以将特定租户迁移到自己的多租户数据库,在任何时候,都可以将租户移回包含多个租户的数据库,在供应新数据时,还可以将租户分配给新的单租户数据库;

           当可识别的租户群体资源需求存在较大差异时,混合模式就会发光,例如,假设参与免费试用的租户无法保证与订购租户相同的高性能水平,该政策可能适用于免费试用阶段的租户存储在所有免费试用租户共享的多租户数据库中,当免费试用租户订阅基础服务级别时,租户可以转移到另一个租户较少的多租户数据库中,支付高级服务级别的用户可以转移到其新的单租户数据库;

           在这种混合模式中,用户租户的单租户数据库可以放置在资源池中,以降低每个租户的数据库成本,这也是在数据库每个租户模型中完成的;

           

    原文地址:https://www.52interview.com/book/6/55

    如需转载,但请注明文章来源和超链接等版权信息,谢谢合作!
  • 相关阅读:
    核函数基础一简单解释
    矩阵的基本性质 之 正规矩阵,矩阵的迹,行列式,伴随矩阵,矩阵的逆,对角矩阵,矩阵求导
    矩阵的基本性质 之 对称矩阵,Hermite矩阵,正交矩阵,酉矩阵
    矩阵的基本性质 之 矩阵加减法,数乘,乘法,转置
    机器学习实战基础(二十七):sklearn中的降维算法PCA和SVD(八)PCA对手写数字数据集的降维
    拉格朗日对偶性
    批处理符号2
    批处理符号1
    set命令
    goto命令
  • 原文地址:https://www.cnblogs.com/zhenlin/p/13841373.html
Copyright © 2011-2022 走看看