appengine
多租户是一种软件体系结构,其中软件的单个实例在服务器上运行,为多个客户端组织(租户)提供服务。 通过多租户体系结构,可以将应用程序设计为虚拟地对其数据和配置(业务逻辑)进行分区,并且每个客户端组织都可以使用自定义的虚拟应用程序实例。
它非常适合SaaS(软件即服务)云计算。 但是,它们的实现可能非常复杂。 架构师必须了解安全性,访问控制等。
多租户可以以几种不同的方式存在:
部署中的多租户
- 完全隔离的业务逻辑(专用服务器定制的业务流程)
- 虚拟化应用程序服务器(专用应用程序服务器,每个应用程序服务器一个虚拟机)
- 共享虚拟服务器(共享VM上的专用应用程序服务器)
- 共享的应用程序服务器(线程和会话)
在这里可以看到不同安装的频谱:
多租户和数据
- 专用物理服务器(数据库位于隔离的物理主机中)
- 分片虚拟主机(虚拟机上的独立数据库)
- 共享主机上的数据库(同一物理主机上的单独数据库)
- 共享数据库中的专用架构(同一数据库,专用架构/表)
- 共享表(相同的数据库和模式,按键–行分隔)
在开始使用API之前,了解Google内部数据存储解决方案的工作方式非常重要。 介绍Google的BigTable技术:
它是Google自己的应用程序(例如Search,Google Analytics,gMail,AppEngine等)的存储解决方案
BigTable 不是 :
- 数据库
- 水平分片的数据
- 分布式哈希表
它是 :稀疏,分布式,持久的多维排序图。 从根本上讲,它是散列的哈希值(地图图或字典的dict)。 AppEngine数据位于分布在多台计算机上的一个“表”中。 每个实体都有一个用于唯一标识的键(父+子+ ID),但是也有元数据可以告诉该实体属于哪个GAE应用程序(appId)。
从上图可以看出,BigTable以一种称为Tablet的格式分发其数据,基本上是数据的一部分。 这些平板电脑位于云中的不同服务器上。 要索引到特定记录(记录和实体几乎是同一件事),请使用称为Key的64KB字符串。 此项包含有关您要读取的特定行和列值的信息。 它还包含一个时间戳,以允许存储数据的多个版本。 此外,特定实体组的记录是连续放置的。 这有助于扫描记录。
现在,我们可以深入研究Google如何实施Multitenancy。
名称空间API(在App Engine 1.3.6发行版中实现)被设计为可高度自定义的,具有可以控制的代码挂钩,因此您可以设置适合应用程序需求的多租户。
该API与所有相关的App Engine API(数据存储区,内存缓存,Blob存储区和任务队列)一起使用。
用GAE的术语来说,
命名空间==租户
在数据存储的存储级别,名称空间就像一个应用程序ID。 每个命名空间实质上都将数据存储作为对应用程序数据的另一种视图。 因此,查询不能跨越名称空间(至少目前),并且每个名称空间的键范围都不同。
创建实体后,其名称空间不会更改,因此
namespace_manager.set(...)
不会对其密钥产生任何影响。
同样,创建查询后,将设置其命名空间。 与...相同
memcache_service()
以及所有其他GAE APIS。 因此,重要的是要知道哪些对象具有哪些名称空间。
在我看来,由于GAE用户的所有数据都保存在BigTable中,因此有助于将GAE Key对象可视化为:
申请编号| 祖先键| 种类名称| 密钥名称或ID
所有这些值都提供了一个地址来定位您的应用程序的数据。 同样,您可以将多租户密钥想象为:
申请编号| 命名空间 | 祖先键| 种类名称| 密钥名称或ID
现在,让我们简要讨论一下API(Python):
功能名称 | 争论 | API |
---|---|---|
get_namespace | 没有 | 返回当前名称空间,如果未设置名称空间,则返回空字符串。 |
set_namespace | 名称空间:无值将取消默认名称空间值。 除此以外, ([0-9A-Za-z ._-] {0,100}) | 设置当前HTTP请求的名称空间 |
validate_namespace | 值:包含要评估的名称空间的字符串。 如果不是,则引发BadValueError([0-9A-Za-z ._-] {0,100})。 异常 = BadValueError | 如果名称空间字符串无效,则引发BadValueError异常。 |
这是一个简单的示例:
这里要注意的重要事情是GAE提供的模式。 对于Java API,它将完全相同。 finally块非常重要,因为它将名称空间恢复为原始名称空间(在请求之前)。 省略finally块将导致在请求期间设置名称空间。 这意味着任何API访问,无论是数据存储查询还是Memcache检索,都将使用先前设置的名称空间。
此外,为了查询创建的所有名称空间,GAE提供了一些元查询,例如:
资源:
- http://www.youtube.com/watch?v=zRwPSFpLX8I&feature=related
- 大表。 https://docs.google.com/viewer?url=http%3A%2F%2Flabs.google.com%2Fpapers%2Fbigtable-osdi06.pdf
- http://www.youtube.com/watch?v=tx5gdoNpcZM
- http://msdn.microsoft.com/zh-CN/library/aa479086.aspx#mlttntda_topic2
- http://www.slideshare.net/pnicolas/cloudmultitenancy
- http://code.google.com/appengine/articles/life_of_write.html
参考:来自JCG合作伙伴 Luis Atencio的Google AppEngine(GAE)中的多租户,位于Reflective Thought博客上。
相关文章 :
翻译自: https://www.javacodegeeks.com/2011/12/multitenancy-in-google-appengine-gae.html
appengine