多多

剖析Force.com的多租户架构(2)- 多租户的介绍

按:此为客座博文系列。投稿人吴朱华,曾在IBM中国研究院从事与云计算相关的研究,现在则致力于研发下一代云计算系统,撰写一些与云计算相关的文章,他的个人站点: PeopleYun.com。(文章版权属于原作者,转载请勿混淆。本篇原文地址) 本文将首先介绍一下多租户的概念和多租户的优缺点,之后会讲解几个常见的多租户模型。 概念 虽然对我们而言,多租户(Multitenancy)可以算是一个非常新颖的概念,但是其实这个概念已经由来已久了。简单而言,多租户指得就是一个单独的软件实例可以为多个组织服务。一个支持多租户的软件需要在设计上能对它的数据和配置信息进行虚拟分区,从而使得每个使用这个软件的组织能使用到一个单独的虚拟实例,并且可以对这个虚拟实例进行定制化。但是要让一个软件支持多租户并非易事,因为不仅对它的软件架构进行相应的修改,而且需要对它的数据库结构进行特殊的设计,同时在安全和隔离性方面也要有所保障。 还有,为了帮助大家进一步理解多租户这个概念,特别选取两个和多租户比较接近的概念来进行进一步的辨析。 多租户和多用户的区别 多用户的关键点在于不同的用户拥有不同的访问权限,但是多个用户共享同一个的实例。而在多租户中,多个组织使用的实例各不相同。 多租户和虚拟化的区别 多租户和虚拟化在概念是比较类似,都是给每个用户一个虚拟的实例,并且都支持定制化,但是它们作用的层次不同:虚拟化主要是虚拟出一个操作系统的实例,而多租户则是主要虚拟出一个应用的实例。 优缺点 多租户的优点: 经济:因为通过一个软件实例被多个组织共享,从而减低了整体资源的消耗,也同时减低应用运行的成本和相应的管理开支。 易于更新和开发:因为所有组织都共享同一套核心代码,所以能够让软件更新和开发更简单。 管理方便:首先,通过使用了多租户架构能减少物理资源和软件资源,这将简化管理。其次。由于多租户软件主要由有经验的云供应商运营,所以能依赖那些非常经验的管理人员来提升效率。 多租户的缺点: 更复杂:由于一个软件需要做出极大地修改,才能支持多租户架构,而且这种修改,往往会增加整个软件在架构方面的复杂性。 不够安全:因为众多组织的应用和数据共享同一套软件和基础设施,如果出现机器宕机,软件出现问题或者大规模的数据被暴露等情况,将会造成更严重的后果,因为影响面更大。 几种模型 在现有的实现中,主要有三种常见的模型,而且区别主要在于采用不同的数据库模式(Database Schema): 私有表(图1-a):它是最简单的扩展模式,就是为每个租户的自定义数据创建一个新表。优点是简单。缺点是涉及到高成本的DDL操作,并且它的整合度不高。 扩展表(图1-b):总体而言,比较类似于私有表,但是一个扩展表会被多个租户共享,所以无论是共享表还是基本表都会有租户栏位。好处是比私有表更高的整合度和更少的DDL操作,但是在架构上比私有表更复杂。 通用表(图1-c): 主要通过一个通用表来存放所有自定义信息,里面有租户栏位和许许多多统一的数据栏位(比如500个)。像这种统一的数据栏位会使用非常灵活的格式让转储各种类型的数据,比如VARCHAR。由于在每一行中的数据栏位都会以一个Key一个Value形式存放所有自定义数据,导致通用表的行都会很宽,而且会出现很多空值,所以通用表这种方式也被称为”Sparse Column”。好处是极高的整合度并避免了DDL操作,但是在处理数据方面难度加大。 图1. 多种模式(图源自参[7]) 差异与取舍 模型 机制 优点 缺点 私有表 为每个租户的自定义数据创建一个新表 简单 需要DDL操作,低整合度 扩展表 一个扩展表会被多个租户共享 高整合度,少DDL操作 有点复杂 通用表 通过一个通用表来存放所有自定义信息 极高整合度,无DDL操作 实现难度高 在实战中,具体选择那个模型,主要还是看那个模型更适合。 关于多租户的介绍已经基本结束了,下一篇将详细介绍Force.com的多租户架构。 –EOF–

阅读更多

剖析Force.com的多租户架构(3)- Force.com的多租户架构(上)

由于Force.com所负载的应用不论是在定制方面的灵活性上,还是所承受的负载上,对基于多租户的架构而言,都是史无前例的,导致之前提到的一些模型或者改动已经无法满足要求了,所以Salesforce在Force.com引入了通过Metadata(元数据)驱动的多租户架构来动态生成快速的,可伸缩的和可定制的应用。接下来,将一步步为大家揭开Force.com多租户架构的神秘面纱,首先是它的总体架构。 总体架构 在介绍Force.com的整个架构之前,请看下图,此图是根据Salesforce首席架构师Craig Weissman在2009年旧金山QCon大会上的演讲总结而成。 图1. Force.com的架构图 首先,在最前面是Gateway(网关),网关将接受所有访问Force.com的请求,无论它是访问Sales Cloud,还是关于第三方定制程序的。接下来,网关会根据这个请求所属的租户把请求转发给对应的POD,什么是POD?简单的来说,POD就是一组集群服务器,每个POD都运行同一套Force.com系统,而且每个POD支持成千上万个租户,Salesforce总共有10多个POD来支撑它所有服务的运营,并把所有租户平衡地分配给每个POD,而且主要通过建立新的POD来支撑新的租户。当POD收到请求之后,POD会先通过其内置的Load Balancer(负载均衡器)来将请求转发给负载略轻的App Server(应用服务器),由于为了简化架构和方便伸缩(Scale),所以应用服务器是Stateless(无状态),而且在一个POD内会有多个应用服务器以应对大规模的请求。最后,当应用服务器在处理请求的时候,如果发现请求所需的数据没有被Cache住的话,应用服务器会调用这个租户所属的Shared DB(共享数据库)来取得相关数据,虽然共享数据库是使用成熟的Oracle数据库产品,但是在数据库表的设计上面为多租户做了很多地优化。 接下来,将介绍Force.com是如何通过Metadata来动态生成和定制应用的。 Metadata驱动 首先,Force.com的Metadata是基于大家非常熟悉的面向对象的概念,所以也可以把Metadata认为是对象,也就是说Force.com是由一个个对象组装而成,而且Force.com中的对象可以是表格,也可以是UI,甚至可以是用户权益等。一个Force.com的对象和这个对象下面的字段可以对应一个数据库的表和这个表的列,而且Force.com对象之间的关系(relationship)在功能上类似于数据库的引用完整性約束(referential integrity constraint),但与数据库中每个数据库表对应于独立的存储地址不同的是,Force.com使用几个共享的大数据库表来作为堆存储(heap storage)来放置所有对象,另外这些存储Metadata的表也被称为”UDD(Universal Data Dictionary)”。 接着,是关于应用的,一个在Force.com上运行的应用实例是通过组合许许多多个对象来生成的,也可以说一个应用实例是使用Metadata来描述的,比如,在应用初始的时候,每个客户都是使用同一个版本和同样规模的对象,而且用户通过添加和更新对象来定制应用,比如增加新的UI和字段等,同时系统会对共享的和定制的对象进行严格地分离,使得既能非常方便地更新共享代码,也能保证某个用户定制过的部分不影响到其他用户。在实现上,Force.com并没有实际地为一个新对象生成一个数据库表,而且以元数据的形式存储在几张大表中,并在运行时候,Force.com会有一套引擎来通过分析数据库中的Metadata来动态生成一个虚拟应用实例和这个应用所需的模块(Virtual Application Componets),比如公共UI(Common Application Screen),定制UI(Tenant-Specific Screen)和其他对象等。 图2. 虚拟应用模块图(源自参[1]) 还有,虽然Metadata驱动这种和Java很类似的动态生成机制在速度上有天生缺陷,但是Force.com也内置与Sun的Hotspot技术有异曲同工之妙的Metadata Cache来加速常用Metadata的读取。 下面,将分别介绍Force.com的两大组成部分:应用服务器和共享数据库。 应用服务器 应用服务器主要包括五大核心模块: Metadata Cache:用于存放那些最近用到的和比较常用的Metadata来加速应用的生成。 大规模数据处理引擎:主要用来加速处理大量的数据读写和在线事务。 多租户感知的查询优化引擎:这个引擎将通过维护多租户的信息来帮助Oracle自带的基于成本的查询优化器更好地适应多租户环境。 运行时应用生成器:这个生成器主要根据用户的请求来动态生成应用,并且利用上面提到的查询优化引擎来提升效率。 全文检索引擎:在数据库对数据进行更新的同时,这个引擎会异步更新这个数据的相关索引。 共享数据库 图1. Force.com的架构(图源自参[1]) 整个共享数据库主要有三种类型的数据库表: Metadata表:主要存放用户定制的对象和对象所包含的字段的结构信息,也被称为”UDD”。 数据表:主要存储那些用户定制的对象和对象所包含的字段的数据。 Pivot表:用来维护那些用于检索(indexing),唯一性和关系等denormalized (去规范化)数据以优化系统的效率。 还有,在物理层面,数据库里面所有表格,包括底下的索引,都根据每个租户不同的租户ID(OrgID)来使用Oracle的Hash分区技术进行分区。通过Hash分区这种久经考验的技术能够将大规模的数据平均地分割成多个更小的和更容易管理的分块,从而帮助大数据库系统能够在多租户的环境下提升速度,伸缩性和可用性等。 本篇结束,下篇将主要对应用服务器内部的一些模块(比如查询优化引擎,外部全文检索引擎等)和数据库表的设计进行详细的描述。 –EOF–

阅读更多

点评中国:工程师和出家人

夏明

美国时事评论人士

玉树当地以及来自外地的喇嘛在玉树地震后成为救灾主力

玉树当地以及来自外地的喇嘛在玉树地震后成为救灾主力

近一个月,中国有两件世人瞩目的大事:“4.14”玉树地震及后续工作和五月一号开幕的上海世博会。它们前呼后应的吊诡关系与两年前的汶川大地震和北京奥运会有惊人的相似。中国政府举国动员的形象工程都由撼山动地的大地震拉开帷幕,它给政府极力想做得尽善尽美的喜事抹上了浓重的悲情色调。

玉树僧侣的英勇救灾

更有意思的是,2008和2010历史演绎的相似还在于它们都与西藏僧人扯到了一起。前者的奥运火炬传递刺激了海外流亡藏人组织抵制和抗议,并引发了藏历新年前后拉萨主要寺庙僧人的游行,最终导致骚乱和流血冲突。后者出现的玉树寺院喇嘛僧侣积极救灾救人,形成一道亮丽的的风景线,几乎抢了技术官僚们在上海的风头。以至中宣部不得不出面干预,命令媒体要少报道玉树的僧侣,多报道世博会的工作。

对任何一个政府来说,同时操办好红白喜丧都不容易。但能将丧事喜办、喜事丧办绝对是中国特色。所以,地震变成了成功的、伟大的庆功典礼;盛会变成了防范敌对势力破坏、打压异见声音的维稳重点。对此,即便中国政府内部也有许多官员难以全面认同。在当今中共高层中最具有慈悲心、保留了最多的真诚的当属温家宝总理。在世博会开幕那一天,工程师出生的温家宝没有到上海去锦上添花,而是到玉树雪里送炭。也许他知道得最清楚,玉树需要工程师。

当人们看到成百上千的身披袈裟的僧侣在参与营救时,绝大多数人都会顿生崇敬之情和感恩之心。同时,我们也会急切地盼望有更多的专业技术人员能到达参与营救。此时此刻,有一位叫岛津洋一(Yoichi Shimatsu)的日裔美国人在“新美国媒体”上发表了一篇题为“地震后西藏需要更多的工程师、更少的出家人”的评论。在谷歌上搜寻后得知,此君原为《日本时报》主编,曾到清华大学国际传播研究中心客座讲学,被那里的“新左派”学者奉为上宾。想必他对中国和中国的工程师政治(尤其是“清华帮”的工程师)都有所了解。

岛津洋一先生这样写道:“上周玉树大地震后,大量身着酱紫色袈裟的僧人在挖掘受难者;尽管他们行为英勇可嘉,但救援工作却因缺乏适当的设备和专业的训练而受阻。几十年献身于静坐修行、辩论读经并不能替代开推土机、操作吊车和用焊枪等世俗的技艺。简言之,西藏社会需要少一点僧人、多一点工人去应对危机时期棘手的繁杂事务。”

在同一篇评论中,岛津洋一先生还写道:“达赖喇嘛格鲁派的僧人们用原始的体力劳作的场景,正是往后看的浪漫主义的问题所在,它把西藏高原的人民束缚在经济停滞和社会乏力的状态中。尽管同样面对外部的恶劣条件和内部强大抵抗,其他的佛教社会都已取得长足的进步,藏人却沉溺在一个从未存在过的过去幻觉中。”

官多害民的制度弊端

我完全赞同“西藏需要更多的工程师”的观点。但我想就岛津洋一的评论讨论下面一些观点:西藏是否应该少一点僧人?如果西藏的僧人减少了,是否工程师就会增加?工程师增加了,是否西藏人民就会生活得更安全幸福?根据中国官方数字,1959年前,西藏共有大小寺庙2676座,僧尼114925人,占人口的十分之一强(《解放西藏史》第23-24页)。到1998 年底,西藏人口已超过二百万,共计宗教活动点1700多处,住寺僧尼共约34000多人(“中国西藏新闻网”)。如果以1959年前的十分之一强为比较,今天西藏的僧侣当为二十多万。依据绝对数和相对数来看,西藏的僧侣都已急剧减少。

众所周知,中国已经成为每年大学毕业工程师最多的国家,也是技术官僚治国最全面和彻底的国家。汶川大地震时,我们没有看到身披袈裟的僧侣,但代之的并非是会开铲车、操作吊车和用电焊枪的专业人员在第一时间去救灾,而是学生的父母和普通农民用原始的双手在废墟堆上寻找亲人。为什么那么多汉人设计师、工程师不把四川的房子校舍建得更牢更好?为什么没有“达赖喇嘛格鲁派的浪漫主义”的四川灾区汉民族仍然被深深地“束缚在经济停滞和社会乏力的状态中”?可见,把西藏地区今日的抗震问题归于僧侣或达赖喇嘛的格鲁派是没有说服力的。

在中国工程师和出家人的多寡比例并不构成对立的关系。他们可以为社会解决不同的身心二苦。中国人有一个至上的人生准则:以出世的精神干入世的事物。身披袈裟的出家人冲在抗震救灾的第一线,不仅是利益众生、推动佛法,也是在身体力行这一准则。从工程师队伍中走出来的温家宝总理能远离都市浮华和权力光环,不顾年近古稀和高原反应,两周内重返玉树,也是可钦可佩。

我们又设想:假如清华科班出身的胡工程师在做西藏最高封疆大吏时,不是头戴钢盔、亲自上阵去弹压西藏的僧侣,而是更多地贡献他的“世俗的技艺”,西藏人的房子一定会建得更牢、救灾工作也会组织得更快捷。我们还设想:如果政府不用把积极救灾的僧侣看作潜在的敌人而予以驱赶,他们的世俗参与一定会减轻西藏“社会乏力的状态”。

最后我们又设想:当近万死者的亲人急切需要僧侣的帮助来超度死者的亡灵顺利升入上界时,如果政府不去驱赶来玉树援助的僧人,恐怕西藏人民会感到更多的今生今世的温暖,他们的“避世主义”和“宿命论”(岛津洋一先生把他们归罪于达赖喇嘛)也会减轻许多。

上海世博的精神缺失

世博会的功能有三:展示科学技术成就、促进多元文化交流和提升主办国家和城市的知名度。尽管没有类似电话之类的发明,中国的工程师治国展示了第一项成就,中国大国的崛起也在完成第三项功能。其实把藏传佛教在世博会上推出,可以更好地向世人展示中国的多元文化,提升中国的软实力。达赖喇嘛在全球声誉隆起就是多多少少受惠于此的。

再说,世博会就是一个国际大庙会,中国的大庙会从来没有缺少宗教内容的。据说上海世博局的官员就吃了这一方面的苦头。有报道说,由于世博会开场诸事不顺,上海市委常委开会决定,要玉佛寺的僧人为世博会重新开光,并彻夜诵经,“请求如来佛祖和观世音菩萨保佑上海世博会平安、顺利和风调雨顺”。

如此看来,不仅僧人有需要工程师的时候,工程师也有需要僧人、临时抱佛脚的时候。

读者反馈

郑重申明: 四川汶川地震时,西藏僧人也曾屡次申请前往灾区救援,但未得到政府的批准—–僧侣救援是好事,不管作用大与否,始终是第一线者,值得敬佩!张智, 德国

BBC 的文章写的太好了。很有学问 很有智慧!他们讲的都是实实。不要侮辱BBC反过来是侮辱你自己而已!天下谁不知中国是没有自由没有人权的。无名者, 西藏

BBC中文版选用的文章是越来越差,看了这种文章,我情不自禁的有一种智商的优越感!bai

Absolute rubish! 未署名

此人也算其口中“左派作家”的另一个极端“右派作家”写照,人家自由的日本作家写的不过是事实,居然也能被其查到祖宗八代硬是蒙上“中共”的背景。说了半天,这名作者也只能在“不知不觉”中将内地工程师救援的行动偷换成了“头戴钢盔、亲自上阵去弹压西藏的僧侣”——也算“潜移默化泼粪”的又一个新例!作者明显没去过西藏,当地人很多人拒绝现代观点,抵制“劳动致富”,一心(愚顽)修行,寄希望以“来生富贵”的黄教信仰他一定没体会过——将这些东西归罪于中央政府,只能说对中国各民族的现状没有清醒的认识!此文作者也不过是用另外一种极端的西方田园诗歌“理想”来脱离现实的“想当然”罢了!Z aus

夏明无理胡绞乱缠, 又在放臭屁,这是BBC中文的水准?也太差了。未署名

这就是谣言啊,垃圾。""有报道说,由于世博会开场诸事不顺,上海市委常委开会决定,要玉佛寺的僧人为世博会重新开光,并彻夜诵经,“请求如来佛祖和观世音菩萨保佑上海世博会平安、顺利和风调雨顺” "" 未署名

宗教信仰是纯洁的,很多都是劝人向善的,是很容易叫人信服的。政治是肮脏的,再善良纯洁的人在政治场上滚几年也会变得肮脏。当宗教参与到政治就是灾难。读者们你们放眼看看这个世界吧!有多少个政教合一的国家的人民有好日子过的?
老冼, 广东

本文不代表BBC的立场和观点。网友如要发表评论,请使用下表:

联络/荐言

* 须填写项目

你的意见反馈:

你的联络资料:
姓名:

国家、城鎮:

电邮地址: *

电话:

你的信息:
你的信息
*
总字数不超过300字:0

免责声明

我愿意让网络制作人员与我联络


阅读更多

CDT/CDS今日重点

【CDT月度视频】十一月之声(2024)——“一路都被撞没了,估计一圈都没了”

【年终专题】“13条生命换不来1条热搜”……2024年度“每日一语”

【年终专题】“中文互联网上的内容每年都以断崖式的速度在锐减”……2024年度404文章

更多文章总汇……

CDT专题

支持中国数字时代

蓝灯·无界计划

现在,你可以用一种新的方式对抗互联网审查:在浏览中国数字时代网站时,按下下面这个开关按钮,为全世界想要自由获取信息的人提供一个安全的“桥梁”。这个开源项目由蓝灯(lantern)提供,了解详情

CDT 新闻简报

读者投稿

漫游数字空间