软件即服务
(Software as a Service)
系列课程第二讲
Multi-tenant 数据体系架构
吴淏 微软开发合作部
Email: v-hwu@microsoft.com
Blog: http://haowu0318.cnblogs.com/
SaaS黄页: http://www.cnsaas.com
Hotmail: cnsaas@hotmail.com
议题
z微软在中国发展SaaS的思路
zSIMT 原则和考虑
zMulti-tenant 数据存储选择
z在Multi-tenant环境下虚拟数据隔离
z自定义multi-tenant数据模型
z可扩展multi-tenant数据
微软在中国发展
SaaS的思路
• 推动市场对SaaS的认识,扩大学习相关技
术的途径。
• 支持SaaS社区的发展,推动信誉体系的形
成。
• 引导技术的发展和推出产品化的解决
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
,以降低技术门槛,从而扩大市场。
SaaS在线社区
• http://www.cnsaas.com
– 苏州和微软共同建设并发展。
– 微软作为创始人之一,社区所涉及的技术和产品并
不限于微软。
• 第一期目标:SaaS黄页和相关技术的社区
– 帮助用户找到需要租用的软件/服务
– 软件类型将包括:CRM、HR、医疗等。
• 第二期目标:SaaS的流通平台
– 用户可以通过平台向SaaS软件的提供商支付使用
费用
– 向公众提供SaaS软件的统计数据和用户的评价
微软SaaS创新联盟
• 微软将在中国建立支持SaaS开发的服务机构
• 2006年在苏州建立中国第一个SaaS孵化中心
– 帮助开发商将传统应用向SaaS迁移
– SaaS孵化中心向开发商提供技术支持,包括:
• 软件架构辅助设计
• 免费的软件环境和基础件(非生产模式)
• 实验主机和网络环境
• SaaS软件参数测定和报告
• 2007年在其它区建设SaaS服务机构,形成
SaaS创新联盟
SIMT 原则和考虑
MultiMulti--tenant tenant
efficientefficient
ConfigurableConfigurable
ScaleableScaleable
共享和独立架构
节约经济
简化管理
SLA per tenant
数据隔离
IsolateIsolate ShareShare
考虑:
商业角度(Time to market)
技术(Skills, expected tenant size and load)
操作(“can I guarantee my SLA without isolating?”)
调整约束(“data must be physically separate”)
如何进行数据存储
z3种方式管理多租户数据存储:
z 独立数据库
z 共享数据库,隔离数据架构
z 共享数据库,共享数据架构
z存储方式所带来的影响:
z 数据安全和独立
z 可扩展的数据模型
z 可缩放的分区数据
独立数据库
•• 方式方式::
–– 每个租赁服务对应一个单独的数据库每个租赁服务对应一个单独的数据库
•• 优势优势::
–– 实现简单实现简单
–– 易数据恢复易数据恢复
–– 更加安全隔离更加安全隔离
•• 缺点缺点::
–– 数据库服务器会因租赁过多明显变慢数据库服务器会因租赁过多明显变慢
–– 硬件基础设施成本增长快硬件基础设施成本增长快
•• 适用于适用于::
–– 租赁服务要求数据实现独立存储租赁服务要求数据实现独立存储
–– 足够资金支付数据扩展和独立存储的足够资金支付数据扩展和独立存储的成本成本
–– 银行,医疗等系统银行,医疗等系统
Tenant Tenant
AA
Tenant Tenant
CC
Tenant Tenant
BB
共享数据库,独立架构
•• 方式方式::
–– 不同的租赁服务使用相同的数据不同的租赁服务使用相同的数据
库库
–– 每个租赁服务都拥有自己的
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
集每个租赁服务都拥有自己的表集
,形成租赁服务各自专门的架构,形成租赁服务各自专门的架构
•• 优势优势::
–– 容易进行数据模型扩展容易进行数据模型扩展
–– 中等程度数据安全中等程度数据安全
–– 能够最大化利用每台数据库服务能够最大化利用每台数据库服务
器的租赁性能器的租赁性能
•• 缺点缺点::
–– 数据恢复困难数据恢复困难
•• 适用于适用于::
–– 应用数据表相对较少应用数据表相对较少
–– 最大化服务器性能重要最大化服务器性能重要
–– 可以把数据共同存储在同一数据可以把数据共同存储在同一数据
库库
Tenant ATenant A
Tenant BTenant B
Tenant CTenant C
SQL2005中的一些实现
• 可用 SQL CREATE 命令来创建方案
–– CREATE SCHEMA ContosoSchema AUTHORIZATION ContosoCREATE SCHEMA ContosoSchema AUTHORIZATION Contoso
• 使用 SchemaName.TableName 约定来创建并存取用户
架构中的表格
–– CREATE TABLE ContosoSchema.Resumes (EmployeeID int CREATE TABLE ContosoSchema.Resumes (EmployeeID int
identity primary key, Resume nvarchar(MAX))identity primary key, Resume nvarchar(MAX))
• 创建架构后,将其设为用户账户的默认架构
–– ALTER USER Contoso WITH DEFAULT_SCHEMA = ALTER USER Contoso WITH DEFAULT_SCHEMA =
ContosoSchemaContosoSchema
• 用户账户通过指定表格名称即能存取默认架构中的表格,
而不是采用 SchemaName.TableName 约定。
–– SELECT * FROM ResumesSELECT * FROM Resumes
共享数据库,共享架构
•• 方式方式
–– 所有的租赁服务使用相同的数据所有的租赁服务使用相同的数据
表并在同一个数据库中表并在同一个数据库中
•• 优势优势
–– 管理和备份的成本低管理和备份的成本低
–– 能够最大化利用每台数据库服务能够最大化利用每台数据库服务
器的性能器的性能
•• 缺点缺点
–– 数据还原困难数据还原困难
–– 索引索引//查询查询//更新实现复杂更新实现复杂
–– 很难进行数据模型扩展很难进行数据模型扩展
•• 适用于适用于
–– 可以把数据共同存储在同一数据可以把数据共同存储在同一数据
库库
–– 最大化服务器性能要求高最大化服务器性能要求高
Tenant ATenant A
Tenant BTenant B
Tenant CTenant C
““Peopleware”:
一个多用户的HR应用程序
DEMO
安全和隔离 Tenant数据
虚拟数据隔离模型
权限权限
DatabaseDatabase TableTable
Stored Stored
ProcedureProcedure
VieVie
ww
VieVie
ww
SQL SQL
CommandCommand
过滤过滤
加密加密
Crypto Crypto
KeyKey
通用Database Access 模型
•• 模拟模拟+ Kerberos + Kerberos 代理代理
•• 使用终端用户密文使用终端用户密文
•• 没有数据连接池,安全与性能平衡没有数据连接池,安全与性能平衡
•• 受信子系统受信子系统
•• 使用使用application identityapplication identity建立数据连接建立数据连接
•• 更好的扩展性和性能更好的扩展性和性能
AliceAlice
Impersonate/DelegateImpersonate/Delegate
Security Service Security Service
(e.g. Windows KDC)(e.g. Windows KDC)
Access as Access as
AliceAlice
Web Web
ServerServer
Business Logic ServerBusiness Logic Server SQL SQL
ServerServer
App ID = App ID =
BobBob
App ID = App ID =
CharlieCharlie
Access asAccess as
CharlieCharlie
Trusted Trusted
SubsysteSubsyste
mm
Multi-tenant 数据 access 需要
一个混合模型
•• 数据连接数据连接 使用使用 tenant tenant 安全密文安全密文
•• 方便在方便在Tenant Tenant 级别进行数据库对象锁操作级别进行数据库对象锁操作
•• 数据库数据库, , 表表, , 过程过程, , 视图视图
•• 可以使可以使Tenant Tenant 指定加密键指定加密键
•• 成本成本::
•• 增加了创建和关闭增加了创建和关闭Tenant Tenant 帐户附加的工作帐户附加的工作
•• 增加了维护数据连接池的复杂性增加了维护数据连接池的复杂性
Multi-Tenant 受信子系统模型
•• 为每一为每一TenantTenant创建受信子系统帐户创建受信子系统帐户
•• ApplicationApplication服务进程服务进程 从一个从一个 generic generic 应用应用identityidentity开始开始
•• ““SwitchSwitch”” to a tenant account when connecting and accessing to a tenant account when connecting and accessing
database:database:
–– Kerberos SFU, orKerberos SFU, or
–– 安全令牌服务安全令牌服务
Request Request
from Acme from Acme
CorporationCorporation
Microsoft Microsoft
KDCKDC
Kerberos protocol transition Kerberos protocol transition
into Acme accountinto Acme account
Application Application
ServiceService
Database Database
ServiceService
Request and Request and
send Kerberos send Kerberos
ticketticket
Connect as Acme Connect as Acme
security contextsecurity context
Security Credential ServiceSecurity Credential Service
Request and Request and
send Acme send Acme
credentialcredential
安全连接到数据库
•• 独立数据库为独立数据库为
每个每个TenantTenant准准
备连接池备连接池
•• 每个应用服务每个应用服务
器可以维护一器可以维护一
个或多个连接个或多个连接
池池
D
edicated D
B
D
edicated D
B
Shared D
B
Shared D
B
DatabasDatabas
e e
Access Access
GroupGroup
Tenant 安全
•• DB DB 连接组包含连接组包含DBDB连接的应用唯一标示连接的应用唯一标示
•• 为每个新为每个新TenantTenant创建不同的表组创建不同的表组
•• 为每个为每个TenantTenant创建一不同的数据连接标示创建一不同的数据连接标示
•• 为为tenanttenant的的DBDB连接帐户付与访问权限连接帐户付与访问权限
Database Database
Access Access
GroupGroup
Create database access Create database access
account for each tenantaccount for each tenant
Assign Assign
account to account to
groupgroup
Grant account Grant account
permissions permissions
to tablesto tables
Tenant 视图过滤模型
Shared Shared
TablesTables
TenanTenan
tt--Safe Safe
ViewsViews
Queries Queries
and Stored and Stored
ProceduresProcedures
CREATE VIEW CREATE VIEW
TenantCustomers AS TenantCustomers AS
SELECT * from SELECT * from
Customers WHERE Customers WHERE
Tenant_ID = Tenant_ID =
SUSER_SID()SUSER_SID()
SELECT * from SELECT * from
TenantCustomers TenantCustomers
WHERE Zipcode = WHERE Zipcode =
‘‘9805298052’’
Customers Customers
TableTable
TenantCustomers TenantCustomers
ViewView
自定义数据模型
Data模型扩展
•• 问题问题::
•• 如何为每一个如何为每一个TenantTenant实现自定义字段和存储自实现自定义字段和存储自
定义数据定义数据
•• 如何实现如何实现Biz Logic Biz Logic 可以可以Handle Handle 自定义字段自定义字段
•• 界面界面LogicLogic可以可以HandleHandle自定义字段自定义字段
•• 实现查询自定义字段实现查询自定义字段
Tenant ATenant A
Product IDProduct ID
DescriptionDescription
Category IDCategory ID
Catalog Catalog
ItemItem
Tenant BTenant B
Product IDProduct ID
DescriptionDescription
Classification CodeClassification Code
Catalog Catalog
ItemItem
定义和存储自定义数据字段
•• 需要元数据需要元数据//数据字典数据字典
•• 直接的数据存储直接的数据存储::
•• 每个每个tenanttenant存储数据在不同的数据库中存储数据在不同的数据库中
•• 同一个数据库分离的同一个数据库分离的SchemaSchema
•• 22种
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
存储数据在相同数据库相同种方法存储数据在相同数据库相同
SchemaSchema::
•• 预定义扩展字段预定义扩展字段
•• 扩展值对扩展值对
固定可扩展字段
•• 方法方法::
•• 所有所有TenantTenant数据存储在一个数数据存储在一个数
据库内据库内
•• 预定义一些自定义字段预定义一些自定义字段
•• 优势优势::
•• 实现简单实现简单
•• 可以最大化每台可以最大化每台DB ServerDB Server的的
tenanttenant数量数量
•• 平衡平衡::
•• 应用数据表相对较少应用数据表相对较少
•• 什么条件使用什么条件使用::
•• 数据可以进行混合存储数据可以进行混合存储
•• 容易进行预定于字段容易进行预定于字段
Tenant Tenant
IDID
F1F1 F2F2 C1C1 C2C2 C3C3
345345 TedTed 5353 NullNull paidpaid NullNull
777777 KayKay 3434 2323 NullNull NullNull
784784 MarMar
yy
4545 NullNull NullNull NullNull
345345 NedNed 2121 NullNull oweowe NullNull
438438 PatPat 2626 NullNull NullNull yesyes
固定扩展字段使用元数据
Tenant IDTenant ID C1C1--LabelLabel C1C1--
DatatypeDatatype
C2C2--LabelLabel C2C2--DatatypeDatatype C3C3--
LabelLabel
C3C3--
DatatypeDatatype
345345 NullNull NullNull Payment Payment
StatusStatus
ntextntext NullNull NullNull
777777 AgeAge tinyinttinyint NullNull NullNull NullNull NullNull
438438 NullNull NullNull NullNull NullNull PaidPaid ntextntext
Tenant IDTenant ID C1C1--
LabelLabel
C1C1--
DatatypeDatatype777777 AgeAge tinyinttinyint
Tenant IDTenant ID C2C2--
LabelLabel
C2C2--DatatypeDatatype
345345 PaymenPaymen
t Statust Status
ntextntext
Tenant IDTenant ID C3C3--LabelLabel C3C3--DatatypeDatatype
438438 PaidPaid ntextntext
OROR (Space and Time Tradeoff)(Space and Time Tradeoff)
扩展值对
Tenant Tenant
IDID
ExtensioExtensio
n IDn ID
ExtensioExtensio
n Labeln Label
DatatypDatatyp
ee
764764 67296729 StatusStatus ntextntext
764764 76347634 ExpireExpire datetimdatetim
ee
783783 89038903 AffiliatioAffiliatio
nn
ntextntext
F1F1 F2F2 Record Record
IDID
764764 TedTed $56$56 893893
673673 JohnJohn $32$32 NullNull
783783 SalSal $99$99 564564
Record IDRecord ID Extension Extension
IDID
ValueValue
893893 67296729 GoldGold
893893 76347634 77--2929--20082008
564564 89038903 AcmeAcme
方法方法
可以提供无限数量的自定义字段可以提供无限数量的自定义字段
扩展值对在不同的表中扩展值对在不同的表中
元数据可以保证数据标签和数据元数据可以保证数据标签和数据类型的扩展跟踪类型的扩展跟踪
Metadata TableMetadata Table
Data TablesData Tables
扩展值对
•• 优势优势
•• ““可以提供无限数量的自定义字段可以提供无限数量的自定义字段
•• 平衡平衡
•• 进行索引,查询,更新较复杂并有延迟进行索引,查询,更新较复杂并有延迟
•• 什么情况使用什么情况使用
•• 数据可以进行混合存储数据可以进行混合存储
•• 自定义字段是具是有很高价值的特性自定义字段是具是有很高价值的特性
•• 很难预知自定义字段很难预知自定义字段
Scaling Multi-tenant Data
2层数据 Scaling策略
…
…
… … …
…
…
Single
Tenant
Database
Multi-Tenant
Database
Multi-Tenant
Database
Databases for one tenant
Multi-Tenant
Data Scaling
Strategy
Single
Tenant
Data
Scaling
Strategy
水平Tenant 分区
太多并发用户 太多行or / and
…
…
…
Redistribute
tenant user load
against baseline
Redistribute
tenant data load
against baseline
单Tenant Scaling
架构指导: “Scaling Out SQL Server 2005” paper by Roger Wolter
Requires deep application introspection:
Revisit data model
Study reference, resource and activity
data dependency, frequency of change.
Identify candidates for horizontal and
vertical partitioning, replication, scaleup
Some best practices:
Replicate reference data
Keep related data near
Use scaleup for data that
cannot be partitioned
(resource data)
Use single master
replication rather than
synchronize write
结论
•• 单实例单实例, multi, multi--tenancytenancy是一件很困难的工作是一件很困难的工作
•• 没有架构模式,我们将被独立的架构所局限没有架构模式,我们将被独立的架构所局限
微软SaaS体系结构指南
• SaaS应用程序体
系结构文件
• Webcasts
• 博客
• 案例研究
资源
博客
http://blogs.msdn.com/fred_chong
http://blogs.msdn.com/gianpaolo
http://blogs.technet.com/michael%5Fplatt
http://haowu0318.cnblogs.com/
文件
Architecture Strategies for Catching the Long Tail
Multi-tenant Data Architecture
Web站点
http://www.cnSaaS.com
http://msdn.microsoft.com/architecture/saas
http://msdn.microsoft.com/isv
http://www.microsoft.com/serviceproviders/solutions/applicationho
sting.mspx
微软SaaS
计划
项目进度计划表范例计划下载计划下载计划下载课程教学计划下载
微软微软SaaSSaaS技术架构推广技术架构推广
WebCast WebCast 在线培训在线培训 20062006年年1010月月
WorkshopWorkshop深度培训深度培训 20072007年年33月月
微软苏州软件园微软苏州软件园SaaSSaaS孵化器孵化器
非营利机构,支持中国非营利机构,支持中国SaaSSaaS企业成长企业成长
SaaSSaaS商务平台,商务平台,www.CNSaaS.comwww.CNSaaS.com
中国中国SaaSSaaS黄页功能黄页功能 20072007年年11月月
优惠优惠SaaS IDC HostingSaaS IDC Hosting环境,降低企业成本环境,降低企业成本
市场活动支持市场活动支持
优秀的优秀的SaaSSaaS产品有机会推荐给风险投产品有机会推荐给风险投
大型市场活动推广大型市场活动推广
获取更多MSDN资源
• MSDN中文网站
http://www.microsoft.com/china/msdn
• MSDN中文网络广播
http://www.msdnwebcast.com.cn
• MSDN Flash
http://www.microsoft.com/china/newsletter/case/
msdn.aspx
• MSDN开发中心
http://www.microsoft.com/china/msdn/Developer
Center/default.mspx
Question & Answer
如需提出问题,请单击“提问”按钮并在
随后显示的浮动面板中输入问题
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
。一
旦完成问题输入后,请单击“提问”按钮。