亿琪软件-开源博客 - 多租户
type: channel
link: https://www.yiqisoft.cn/blogs/tag/Multi_Tenant/
items: SaaS应用程序需满足的7个条件
items: 为什么用Docker作为多租户SOC的架构？

SaaS应用程序需满足的7个条件
type: item
date: 2020-06-04T14:30:00+00:00
description: SaaS 应用程序，需要满足以下 7 个条件： 1. 应用程序必须支持多租户 多租户是决定 SaaS 效率的关键因素。通常，应用程序支持多个用户，但是前提是它认为所有用户都来自同一个组织。这种模型适用于未出现 SaaS 的时代，组织会购买一个软件应用程序供自己的成员使用。但是在 SaaS 和云的世界中，许多组织都将使用同一个应用程序；他们必须能够允许自己的用户访问应用程序，但是应用程序必须只允许每个组织自己的成员访问其组织的数据。 能够让多个组织（SaaS 中的术语称为租户）共存于相同的应用程序，同时不会破坏这些组织的数据的安全性，具备这种能力的应用程序就可以称之为多租户应用程序。 2. 应用程序必须具备某种程度的自助注册功能 应用程序必须具备某种程度的自助注册功能，即便仅仅是一种请求机制，即产生一种向应用程序添加租户的业务流程。 3. 必须具备订阅/记账机制 必须提供订阅和记账机制。因为 SaaS 应用程序被设计为根据各种因素进行支付，如每个租户的用户数、应用程序选择，还可能包括使用时间等，必须通过某种方式来跟踪和管理应用程序的使用，然后生成可由租户管理人员访问的记账信息。 4. 应用程序必须能够有效地扩展 必须能够随着订阅的增长进行扩展。云基础架构是实现这一目的的逻辑方式，因为它嵌入了许多功能，可以支持您实现有效的、高效的扩展。 同样，必须提供治理和应用程序管理功能，以监视、配置和管理应用程序及所有租户。 5. 必须能够监视、配置和管理应用程序和租户 必须提供一种机制，可以对所有的用户进行监视和配置，并且可以管理租户使用的应用程序模块。SaaS运营商那，必须具备管理平台能够统一管理这些信息。 6. 必须有一种机制能够支持惟一的用户标识和身份验证 需要提供一种机制以支持用户标识和身份验证，允许用户拥有惟一的身份标识。由于多租户要求识别注册到系统中的所有用户，从而确定他们所属的租户，因此必须有一种明确的关系来将用户识别为属于某个特定租户。这种用户与租户的关系是非常重要的信息，用于限制用户可以访问的数据。 电子邮件地址是实现这一目的的一种典型方法，通过这种方式可以确保惟一性，每个用户可以被识别和标识为属于某个特定租户。 有多种身份验证机制和集成方法，因此必须具备一种灵活的机制来识别用户。通常，某个特定的租户需要能够利用其现有的 LDAP 或其他目录服务或身份验证机制来支持对 SaaS 应用程序的单点登录。尽管这种外部的用户身份验证非常重要，但是，需要由 SaaS 应用程序确定已识别的用户是属于它们所宣称的租户的成员。 7. 必须有一种机制能够支持对每个租户进行某种程度的自定义 必须提供一种机制来支持对每个租户进行一定程度的基本自定义，从而使它们具有惟一的 URL、登入页面、标识、配色方案、字体，甚至包括语言。 对每个租户的基本配置是预期的功能，但是要真正地满足多租户的需求，必须在基本配置的基础上对每个租户实现一定程度的自定义。 所需的典型定制类似于租户对内部应用程序版本所作出的定制。包括添加字段甚至是表格，设置特殊的业务逻辑，或集成另一种应用程序。在每个租户的基础上能够进行这类自定义，同时无需建立单独的实例（否则会降低多租户设计的效率），这就是高性能 SaaS 架构的典型特征。

为什么用Docker作为多租户SOC的架构？
type: item
date: 2020-06-04T14:02:00+00:00
description: Docker提供了轻量级的虚拟化，它几乎没有任何额外开销，这个特性非常酷。首先你在享有Docker带来的虚拟化能力的时候无需担心它带来的额外开销。其次，相比于虚拟机，你可以在同一台机器上创建更多数量的容器。Docker的另外一个优点是容器的启动与停止都能在几秒中内完成。 1、简化配置 这是Docker公司宣传的Docker的主要使用场景。虚拟机的最大好处是能在你的硬件设施上运行各种配置不一样的平台（软件、系统），Docker在降低额外开销的情况下提供了同样的功能。它能让你将运行环境和配置放在代码中然后部署，同一个Docker的配置可以在 不同的环境中使用，这样就降低了硬件要求和应用环境之间耦合度。 2、隔离应用 有很多种原因会让你选择在一个机器上运行不同的应用，比如之前提到的提高开发效率的场景等。 我们经常需要考虑两点，一是因为要降低成本而进行服务器整合，二是将一个整体式的应用拆分成松耦合的单个服务（微服务架构）。 3、整合服务器 正如通过虚拟机来整合多个应用，Docker隔离应用的能力使得Docker可以整合多个服务器以降低成本。由于没有多个操作系统的内存占用，以及能在多个实例之间共享没有使用的内存，Docker可以比虚拟机提供更好的服务器整合解决方案。 4、调试能力 Docker提供了很多的工具，这些工具不一定只是针对容器，但是却适用于容器。它们提供了很多的功能，包括可以为容器设置检查点、设置版本和查看两个容器之间的差别，这些特性可以帮助调试Bug。 5、代码流水线（Code Pipeline）管理 前一个场景对于管理代码的流水线起到了很大的帮助。代码从开发者的机器到最终在生产环境上的部署，需要经过很多的中间环境。而每一个中间环境都有自己微小的差别，Docker给应用提供了一个从开发到上线均一致的环境，让代码的流水线变得简单不少。 6、提高开发效率 这就带来了一些额外的好处：Docker能提升开发者的开发效率。 不同的开发环境中，我们都想把两件事做好。一是我们想让开发环境尽量贴近生产环境，二是我们想快速搭建开发环境。 理想状态中，要达到第一个目标，我们需要将每一个服务都跑在独立的虚拟机中以便监控生产环境中服务的运行状态。然而，我们却不想每次都需要网络连 接，每次重新编译的时候远程连接上去特别麻烦。这就是Docker做的特别好的地方，开发环境的机器通常内存比较小，之前使用虚拟的时候，我们经常需要为 开发环境的机器加内存，而现在Docker可以轻易的让几十个服务在Docker中跑起来。 7、快速部署 在虚拟机之前，引入新的硬件资源需要消耗几天的时间。Docker的虚拟化技术将这个时间降到了几分钟，Docker只是创建一个容器进程而无需启动操作系统，这个过程只需要秒级的时间。这正是Google和Facebook都看重的特性。 你可以在数据中心创建销毁资源而无需担心重新启动带来的开销。通常数据中心的资源利用率只有30%，通过使用Docker并进行有效的资源分配可以提高资源的利用率。 8、多租户环境 另外一个Docker有意思的使用场景是在多租户的应用中，它可以避免关键应用的重写。我们一个特别的关于这个场景的 例子是为IoT（译者注：物联网）的应用开发一个快速、易用的多租户环境。这种多租户的基本代码非常复杂，很难处理，重新规划这样一个应用不但消耗时间， 也浪费金钱。 使用Docker，可以为每一个租户的应用层的多个实例创建隔离的环境，这不仅简单而且成本低廉，当然这一切得益于Docker环境的启动速度和其高效的diff命令。