维基百科是这么定义多租户的:一种软件架构规范,运行在服务器上的单一实例,可服务多个客户或组织(租户),一个满足多租户规范的软件应用需要对数据和配置进行隔离,每一个租户都有自己虚拟的实例。接下来我们使用一个绑定多个二级域名的简单网站,来演示下多个租户的使用场景。

系统架构

一般来说,用户在他的浏览器中输入网站地址查看内容的步骤是非常简单的。浏览器向服务器所在地址发送请求。服务器接收到请求,找到处理的应用程序,并传递到该应用程序处理请求。应用程序读取的请求、 创建响应,并传递响应发送回服务器。服务器将响应返回给浏览器,浏览器向用户呈现响应内容。这一般被称为单租户应用程序体系结构。每个客户端应用程序都与单一的 IP 地址和主机名匹配,以便为请求到来时,服务器可以将它们路由到适当的应用程序 (图 1)。

多租户saas架构 表结构图 多租户架构示意图_服务器

 图1 单租户应用架构

假如多个客户需要相同的核心功能但稍有差异,例如网站上有类似的结构和布局,但要不同的样式和内容,这种情形下单租户方法变得有问题。每个客户都需要复制本质上是相同的功能,更新和bug修复的代码也需要单独发布给每个客户。跟踪同一应用程序的多个实例的,总是会导致错过的更新、 部署时间较长,和浪费服务器资源,还有就是维护的恶梦。多租户的体系结构解决这类问题的。

在多租户架构中,从请求到响应的步骤略有不同。浏览器向服务器发送请求。但这一次,而不再匹配请求的地址到客户各自的应用程序实例,而是服务器将请求路由到单个应用程序实例。应用程序读取请求,以确定响应哪个客户的请求, 然后在传递回服务器之前进行响应处理。剩下的流程是一样的。服务器返回响应,浏览器会显示响应内容 (图 2)。

多租户saas架构 表结构图 多租户架构示意图_应用程序_02

 

 看图 1 和图 2 单和多租户架构之间的区别应该是很明显的。我们已经告诉服务器,客户的所有网站地址(二级域名)都指向同一个应用程序实例的,由应用实例来作出决定、如何处理并呈现内容。从根本上说,我们已将路由请求的任务由服务器转到应用程序实例。通过采用这种方法,任何更新或发布的 bug 修复都能立刻提供给所有客户,多个应用程序实例对服务器资源的使用也得以节约,使整个系统更加有效和易于维护。