SlideShare uma empresa Scribd logo
1 de 34
浅谈电商网站数据访问层 
(DAL)与ORM 之适用性 
2012.11.2 
中国,上海
What’s Data ? 
Data Files、Database、Data Service、etc. 
SQL、NoSQL、AWS RDS、SQL Azure、etc.
Why DAL ? 
抽象不变的:DRY  Don’t Repeat Yourself 
封装变化的:SoC  Separation of Concerns
DAL 中的不变、变化? 
不变的or 一致的(核心):Interface、SQL、etc. 
变化的- 1:Database、ORM Framework、etc. 
变化的- 2:Caching、Logging、Sharding、etc.
电商网站DAL 特点(SoC) 
• Simple Scalability  读写分离 DAL R/W Routing 
• 10x Scalability  DB Sharding  DAL Routing + Aggregation 
• Multi-targeting Logging  
Console/File/Log4Net/EntLib/Common.Logging 
• Transparent Caching  DAL 支持+ App 慎用 实现难! 
• Lazy Loading  DAL 支持+ App 慎用 用好难! 
• 99% Availability  Cache High Availability 
– 方案1:Dual-write Cache (Memcache) / Cache Replication (AppFabric) 
– 方案2:Multi-level Cache  L1 分布式+ L1.5 本地跨应用+ L2 本地应用内
.NET 世界ORM 现状 
• 10x Scalability:仅NH/MB 有限支持Sharding 
– 通过multi-db-session 实现shards 结果聚合、in-memory 结果排序 
– NH HQL 不支持Sharding,如:排序,只能通过ICriteria 间接实现 
– 长时间未更新,不兼容最新NH,不支持垂直分区及混合分区 
• Multi-targeting Logging: 
– NH/MB 支持最好,L2S 也支持,但种类不丰富,需扩展 
– EF 不支持,有开源爱好者提供了实现,较复杂、有风险 
• Transparent Caching:此处略去N 字… 
• Lazy Loading:NH/L2S/EF/MB 都支持 
• 99% Availability:此处略去N 字…
DAL Sharding Demo (ORM Extension) – 
NHibernate.Shards (ISessionFactory)
DAL Sharding Demo (ORM Plug-in) – 
ShardBatis (SQL Interception)
DAL Sharding Demo (ADO.NET Extension) – 
Enzo SQL Shard (C# Extension Method)
DAL Sharding Demo (ADO.NET Provider) – 
dbShards
DB Sharding 策略 
• Sharding is NOT SILVER BULLET for DB Scale-out 
• 不适用场景 
– 处理事务型应用非常复杂,跨不同DB 事务,很难保证一致性 
– 不含Sharding ID 查询较多的场景,即使并行处理,也要全扫描 
• 大方向选择(non-global tables) 
– Sharding on every table  primary separation  child separation 
– Sharding on every table group (sticky)  primary + all children 
– Sharding on every table group (non-sticky)  primary + some children 
• 小策略选择:Sharding ID、Aggregation、etc.
DB Sharding 策略(continued)
DB Sharding 风险 
• Sharded Data Migration 
• Sharded Cluster Management 
• Replication Management 
• High-availability Management 
• Load-balancing Co-existence 
• Sharding Policy Change
DAL Sharding 难点 
• 切片策略 
– 精确定位:PK round-robin / PK hashing-modulus / attribute(s)-based 
– 查询策略:all-shards iteration / 精确定位 
– 遍历策略:sequential / parallel 
• 结果聚合 
– 方案1:单库SQL 查询 DAL 中完成聚合(order, group, avg, etc.) 
– 方案2:跨库union 聚合 RDBMS 直接返回结果 
– 方案3:读写分离 多库实时写 同步至单库 单库非实时读 
• 基于ORM、自定义实现(ADO.NET)? 
• 其它:DB Proxy Sharding、In-mem Sharding?
DAL Sharding 难点(continued) 
• DB Proxy Sharding:不太适合当前的Ctrip  
性能问题、协议实现、etc. 
• In-mem Sharding 
– 已在酒店查询服务优化项目架构设计中使用 
– 1st-Level Sharding + 2nd-Level Load Balancing  
– 产品库可以这么做,订单库能这么做吗?
DAL Sharding 设计参考 
1、eBay Data Access Layer (QCon) 
2、DAL Sharding 设计方案
DAL Transparent Caching 
• 现状 
– NH 二级缓存Provider:NHibernate.Caches.MemCache 
– MB 二级缓存Module:mybatis-memcached-module 
– EF:没有内建二级缓存机制,需通过EFCachingProvider 扩展 
– L2S:只有一级缓存,没有扩展机制,不推荐用于scale-out 场景 
• 难点 
– 对Consumer 透明,如Biz Layer 不需要知道缓存的“存在” 
– 解决Caching Policy 和Data Consistency 间的矛盾与冲突 
– 缓存刷新,拉模式or 推模式?实时推or 消息通知? 
• 其它:Cache Provider 与Cache-ware 区别
DAL Transparent Caching (continued) 
• High Availability 方案1:Multi-node 
– Dual-write Cache (Memcache, client-side, non-transactional) 
– Cache Replication (AppFabric, server-side, transactional) 
– 无论哪个option,都要考虑secondary node selection 问题! 
• 2 cache items  2 cache nodes  比较简单 
• 3 cache items  3 cache nodes  有点复杂 
• x cache items  y cache nodes  如何确保node unavailable 时造成的影响最小? 
• High Availability 方案2:Multi-level 
– L1 分布式 
– L1.5 本地跨应用 
– L2 本地应用内 
– 无论哪几个options combination,都要考虑sync coordination 问题!
DAL 设计参考 
1、NoSQL 数据库笔谈 
2、James Hamilton
这么多ORMs,众口又难调,如何选择?
1、One Size does NOT Fit ALL ! 
2、ORM Fx + Customized SQL + 其它 
3、DAL 接口+ Base 抽象+ 自定义实现
Demo for【DAL 接口+ Base 抽象+ 
自定义实现】
介绍DDFx 及相关架构
What’s DDFx ? 
• DDFx 的第一个D 有两层含义:Data and Domain 
• DDFx 的第二个D == Driven,意为:…驱动的… 
• DDFx 的Fx == (Development / Design) Framework (and Tools) 
• DDFx 理解#1:Data-Driven (Development) Framework 
• DDFx 理解#2:Domain-Driven (Design) Framework 
• DDFx 具体内容尚在不断完善中,但请记住:DDFx 
不是万能的,所以,你要懂得:Context + Balance 
• DDFx 中某些非关键技术将采用Tech-Talk 方式进行
什么是Domain? 
作为软件方面的专家(架构师、开发人员)和领域专家 
(客户方业务人员、需求分析人员),所有人在一起创建 
领域的模型,这个模型会统一体现两个专业领域的交汇
什么是Data? 
Data Files、Database、Data Service、etc. 
SQL、NoSQL、AWS RDS、SQL Azure、etc.
DDFx 架构
DDFx 中几个数字 
• 1 座工厂:DDFx Factory 
• 2 个车间:Domain Model (N 产品线) 
 Repository (N 产品线) 
• 3 种贯穿:DTO  Domain Model Intf.  Repository Intf. 
• 6 层架构:Presentation  Application/Controller  
Service  Domain  Repository  Resource 
• 8 大前端: 
– C/S:Console  Windows Forms  WPF 
– B/S:ASP.NET Web Forms  Ajax  MVC / MVVM (ViewModel : DTO) 
– RIA:Silverlight (.NET 子集) 
– Device:Windows Phone 7 (Silverlight 子集)
图表样例- 1:Visual Studio 生成
图表样例- 2:Visual Studio 生成
DDFx 架构层次 
• 整体架构:6 层架构+ 1 座工厂(DDFx Factory) 
• Layer #1:用户表现层(Presentation Layer) 
• Layer #2:应用系统层(Application Layer) 
• Layer #3:服务表现层(Service Layer, 可选) 
• Layer #4:领域模型层(Domain Layer) 
• Layer #5:资源访问层(Repository Layer) 
• Layer #6:资源层(关系数据库、外部服务、文件系统、etc.)
DDFx 架构+ 开发曲线 
L1:UI -> VM/DTO (Requirement + UI Dev) 
L2:-> Controller (Non-UI Dev) -> IDomain (Façade Intf.) (Arch + Dev Lead) 
-> Domain Factory (Arch) -> Local/Service Client (Dev Lead) 
L3:-> Local/Service Server -> IDomain (Façade Intf.) (Arch + Dev Lead) 
L4:-> RealDomain (Real Façade) -> Biz. Rule + IRepository (Non-UI Dev) 
L5:-> Repository Factory (Arch) -> Local/Service Client (Dev Lead) 
-> RepositoryBase<T> : IRepository<T> (Dev Lead) 
-> SpecialRepository : ISpecialRepository (Non-UI Dev) 
-> Data Client / Service Client / etc. (Non-UI Dev) 
L6:-> RDBMS / Service Server / File Server / etc. (Requirement + Arch)
探讨:需求变更导致新增字段, 
你会怎么做?
Q & A

Mais conteúdo relacionado

Mais procurados

天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011Yiwei Ma
 
美团点评技术沙龙010-点评RDS系统介绍
美团点评技术沙龙010-点评RDS系统介绍美团点评技术沙龙010-点评RDS系统介绍
美团点评技术沙龙010-点评RDS系统介绍美团点评技术团队
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列XiaoJun Hong
 
新浪微博分布式缓存与队列-2013版
新浪微博分布式缓存与队列-2013版新浪微博分布式缓存与队列-2013版
新浪微博分布式缓存与队列-2013版XiaoJun Hong
 
阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践drewz lin
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130Jinrong Ye
 
大规模数据库存储方案
大规模数据库存储方案大规模数据库存储方案
大规模数据库存储方案XiaoJun Hong
 
MySQL压力测试经验
MySQL压力测试经验MySQL压力测试经验
MySQL压力测试经验Jinrong Ye
 
基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践jackbillow
 
美团点评技术沙龙14:美团云对象存储系统
美团点评技术沙龙14:美团云对象存储系统美团点评技术沙龙14:美团云对象存储系统
美团点评技术沙龙14:美团云对象存储系统美团点评技术团队
 
新浪微博redis技术演化
新浪微博redis技术演化新浪微博redis技术演化
新浪微博redis技术演化XiaoJun Hong
 
SQL Server效能調校
SQL Server效能調校SQL Server效能調校
SQL Server效能調校國昭 張
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈Tim Y
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构XiaoJun Hong
 
MySQL设计、优化、运维
MySQL设计、优化、运维MySQL设计、优化、运维
MySQL设计、优化、运维Jinrong Ye
 
阿里CDN技术揭秘
阿里CDN技术揭秘阿里CDN技术揭秘
阿里CDN技术揭秘Joshua Zhu
 
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化Jinrong Ye
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践孙立
 
高效Linux SA
高效Linux SA高效Linux SA
高效Linux SAJinrong Ye
 

Mais procurados (20)

天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011天涯论坛的技术进化史-Qcon2011
天涯论坛的技术进化史-Qcon2011
 
美团点评技术沙龙010-点评RDS系统介绍
美团点评技术沙龙010-点评RDS系统介绍美团点评技术沙龙010-点评RDS系统介绍
美团点评技术沙龙010-点评RDS系统介绍
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列
 
新浪微博分布式缓存与队列-2013版
新浪微博分布式缓存与队列-2013版新浪微博分布式缓存与队列-2013版
新浪微博分布式缓存与队列-2013版
 
阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践阿里自研数据库 Ocean base实践
阿里自研数据库 Ocean base实践
 
服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130服务器基准测试-叶金荣@CYOU-20121130
服务器基准测试-叶金荣@CYOU-20121130
 
大规模数据库存储方案
大规模数据库存储方案大规模数据库存储方案
大规模数据库存储方案
 
MySQL压力测试经验
MySQL压力测试经验MySQL压力测试经验
MySQL压力测试经验
 
基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践基于MySQL的分布式数据库实践
基于MySQL的分布式数据库实践
 
美团点评技术沙龙14:美团云对象存储系统
美团点评技术沙龙14:美团云对象存储系统美团点评技术沙龙14:美团云对象存储系统
美团点评技术沙龙14:美团云对象存储系统
 
新浪微博redis技术演化
新浪微博redis技术演化新浪微博redis技术演化
新浪微博redis技术演化
 
SQL Server效能調校
SQL Server效能調校SQL Server效能調校
SQL Server效能調校
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0
 
分布式Key Value Store漫谈
分布式Key Value Store漫谈分布式Key Value Store漫谈
分布式Key Value Store漫谈
 
新浪微博Feed服务架构
新浪微博Feed服务架构新浪微博Feed服务架构
新浪微博Feed服务架构
 
MySQL设计、优化、运维
MySQL设计、优化、运维MySQL设计、优化、运维
MySQL设计、优化、运维
 
阿里CDN技术揭秘
阿里CDN技术揭秘阿里CDN技术揭秘
阿里CDN技术揭秘
 
MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化MySQL技术分享:一步到位实现mysql优化
MySQL技术分享:一步到位实现mysql优化
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
 
高效Linux SA
高效Linux SA高效Linux SA
高效Linux SA
 

Destaque

N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & developmentXuefeng Zhang
 
Metric and Dashboard
Metric and DashboardMetric and Dashboard
Metric and DashboardChen Huang
 
Frontend django, Django Web 前端探索
Frontend django, Django Web 前端探索Frontend django, Django Web 前端探索
Frontend django, Django Web 前端探索Tim (文昌)
 
唯品会大数据实践 Sacc pub
唯品会大数据实践 Sacc pub唯品会大数据实践 Sacc pub
唯品会大数据实践 Sacc pubChao Zhu
 
使用Amazon Machine Learning 建立即時推薦引擎
使用Amazon Machine Learning 建立即時推薦引擎使用Amazon Machine Learning 建立即時推薦引擎
使用Amazon Machine Learning 建立即時推薦引擎Amazon Web Services
 
美团技术沙龙03 - 数据权限管理方案
美团技术沙龙03 - 数据权限管理方案美团技术沙龙03 - 数据权限管理方案
美团技术沙龙03 - 数据权限管理方案美团点评技术团队
 
Demystifying Object-Oriented Programming - Lone Star PHP
Demystifying Object-Oriented Programming - Lone Star PHPDemystifying Object-Oriented Programming - Lone Star PHP
Demystifying Object-Oriented Programming - Lone Star PHPAlena Holligan
 
PHP Experience 2016 - ROA – Resource Oriented Architecture
PHP Experience 2016 - ROA – Resource Oriented ArchitecturePHP Experience 2016 - ROA – Resource Oriented Architecture
PHP Experience 2016 - ROA – Resource Oriented ArchitectureiMasters
 
Object-Oriented Programming with PHP (part 1)
Object-Oriented Programming with PHP (part 1)Object-Oriented Programming with PHP (part 1)
Object-Oriented Programming with PHP (part 1)Bozhidar Boshnakov
 
Simple Web Services with PHP
Simple Web Services with PHPSimple Web Services with PHP
Simple Web Services with PHPJohn Paul Ada
 
Intro To Software Architecture
Intro To Software ArchitectureIntro To Software Architecture
Intro To Software ArchitectureJason Ables
 
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016 Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016 Alexander Lisachenko
 
面向未来的重构
面向未来的重构面向未来的重构
面向未来的重构Kejun Zhang
 
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)Kejun Zhang
 
Ued交流会 《用户体验杂谈》
Ued交流会 《用户体验杂谈》Ued交流会 《用户体验杂谈》
Ued交流会 《用户体验杂谈》iddcn
 
高粒度模块化的前端开发
高粒度模块化的前端开发高粒度模块化的前端开发
高粒度模块化的前端开发iddcn
 
Frontend 'vs' Backend Getting the Right Mix
Frontend 'vs' Backend   Getting the Right MixFrontend 'vs' Backend   Getting the Right Mix
Frontend 'vs' Backend Getting the Right MixBob Paulin
 
An analysis of TLS handshake proxying
An analysis of TLS handshake proxyingAn analysis of TLS handshake proxying
An analysis of TLS handshake proxyingNick Sullivan
 

Destaque (20)

N-layer design & development
N-layer design & developmentN-layer design & development
N-layer design & development
 
Metric and Dashboard
Metric and DashboardMetric and Dashboard
Metric and Dashboard
 
Frontend django, Django Web 前端探索
Frontend django, Django Web 前端探索Frontend django, Django Web 前端探索
Frontend django, Django Web 前端探索
 
唯品会大数据实践 Sacc pub
唯品会大数据实践 Sacc pub唯品会大数据实践 Sacc pub
唯品会大数据实践 Sacc pub
 
使用Amazon Machine Learning 建立即時推薦引擎
使用Amazon Machine Learning 建立即時推薦引擎使用Amazon Machine Learning 建立即時推薦引擎
使用Amazon Machine Learning 建立即時推薦引擎
 
美团技术沙龙03 - 数据权限管理方案
美团技术沙龙03 - 数据权限管理方案美团技术沙龙03 - 数据权限管理方案
美团技术沙龙03 - 数据权限管理方案
 
2n FòRum Ciutadà Puigpunyent
2n FòRum Ciutadà Puigpunyent2n FòRum Ciutadà Puigpunyent
2n FòRum Ciutadà Puigpunyent
 
Demystifying Object-Oriented Programming - Lone Star PHP
Demystifying Object-Oriented Programming - Lone Star PHPDemystifying Object-Oriented Programming - Lone Star PHP
Demystifying Object-Oriented Programming - Lone Star PHP
 
PHP Experience 2016 - ROA – Resource Oriented Architecture
PHP Experience 2016 - ROA – Resource Oriented ArchitecturePHP Experience 2016 - ROA – Resource Oriented Architecture
PHP Experience 2016 - ROA – Resource Oriented Architecture
 
Object-Oriented Programming with PHP (part 1)
Object-Oriented Programming with PHP (part 1)Object-Oriented Programming with PHP (part 1)
Object-Oriented Programming with PHP (part 1)
 
Simple Web Services with PHP
Simple Web Services with PHPSimple Web Services with PHP
Simple Web Services with PHP
 
Intro To Software Architecture
Intro To Software ArchitectureIntro To Software Architecture
Intro To Software Architecture
 
F2e @ douban
F2e @ doubanF2e @ douban
F2e @ douban
 
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016 Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016
 
面向未来的重构
面向未来的重构面向未来的重构
面向未来的重构
 
一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)一拍一产品背后的故事(React实战)
一拍一产品背后的故事(React实战)
 
Ued交流会 《用户体验杂谈》
Ued交流会 《用户体验杂谈》Ued交流会 《用户体验杂谈》
Ued交流会 《用户体验杂谈》
 
高粒度模块化的前端开发
高粒度模块化的前端开发高粒度模块化的前端开发
高粒度模块化的前端开发
 
Frontend 'vs' Backend Getting the Right Mix
Frontend 'vs' Backend   Getting the Right MixFrontend 'vs' Backend   Getting the Right Mix
Frontend 'vs' Backend Getting the Right Mix
 
An analysis of TLS handshake proxying
An analysis of TLS handshake proxyingAn analysis of TLS handshake proxying
An analysis of TLS handshake proxying
 

Semelhante a 浅谈电商网站数据访问层(DAL)与 ORM 之适用性

大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构drewz lin
 
基于My sql的分布式数据库实践
基于My sql的分布式数据库实践基于My sql的分布式数据库实践
基于My sql的分布式数据库实践锐 张
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discusseverestsun
 
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页liu sheng
 
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索liu sheng
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 
利用统一存储获得无与伦比的速度,简化系统,并节省更多
利用统一存储获得无与伦比的速度,简化系统,并节省更多利用统一存储获得无与伦比的速度,简化系统,并节省更多
利用统一存储获得无与伦比的速度,简化系统,并节省更多ITband
 
有道云笔记架构简介
有道云笔记架构简介有道云笔记架构简介
有道云笔记架构简介drewz lin
 
数据访问层开发实践
数据访问层开发实践数据访问层开发实践
数据访问层开发实践xcq
 
Hadoop con 2015 hadoop enables enterprise data lake
Hadoop con 2015   hadoop enables enterprise data lakeHadoop con 2015   hadoop enables enterprise data lake
Hadoop con 2015 hadoop enables enterprise data lakeJames Chen
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介Herman Wu
 
Qcon2013 罗李 - hadoop在阿里
Qcon2013 罗李 - hadoop在阿里Qcon2013 罗李 - hadoop在阿里
Qcon2013 罗李 - hadoop在阿里li luo
 
20140326联动优势数据访问层DAL架构和实践7(刘胜)工行交流
20140326联动优势数据访问层DAL架构和实践7(刘胜)工行交流20140326联动优势数据访问层DAL架构和实践7(刘胜)工行交流
20140326联动优势数据访问层DAL架构和实践7(刘胜)工行交流liu sheng
 
Jkcn MySQLDB 架构
Jkcn MySQLDB 架构Jkcn MySQLDB 架构
Jkcn MySQLDB 架构Louis liu
 
基于My sql的分布式数据库实践 公开
基于My sql的分布式数据库实践 公开基于My sql的分布式数据库实践 公开
基于My sql的分布式数据库实践 公开YANGL *
 
浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华zhuozhe
 
淘宝Java中间件之路 it168
淘宝Java中间件之路 it168淘宝Java中间件之路 it168
淘宝Java中间件之路 it168vanadies10
 
Oracle雲端服務介紹 taiwan
Oracle雲端服務介紹   taiwanOracle雲端服務介紹   taiwan
Oracle雲端服務介紹 taiwanChieh-An Yu
 
Oracle saa s paas overview
Oracle saa s paas overviewOracle saa s paas overview
Oracle saa s paas overviewChris Lee
 
大型电商的数据服务的要点和难点
大型电商的数据服务的要点和难点 大型电商的数据服务的要点和难点
大型电商的数据服务的要点和难点 Chao Zhu
 

Semelhante a 浅谈电商网站数据访问层(DAL)与 ORM 之适用性 (20)

大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构
 
基于My sql的分布式数据库实践
基于My sql的分布式数据库实践基于My sql的分布式数据库实践
基于My sql的分布式数据库实践
 
Google LevelDB Study Discuss
Google LevelDB Study DiscussGoogle LevelDB Study Discuss
Google LevelDB Study Discuss
 
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
20130626联动优势数据访问层DAL架构和实践5(刘胜)数据分片和分页
 
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
20141128(刘胜)UTC2014分布式和云服务的思考与实践——支付清算行业分布式架构的探索
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
利用统一存储获得无与伦比的速度,简化系统,并节省更多
利用统一存储获得无与伦比的速度,简化系统,并节省更多利用统一存储获得无与伦比的速度,简化系统,并节省更多
利用统一存储获得无与伦比的速度,简化系统,并节省更多
 
有道云笔记架构简介
有道云笔记架构简介有道云笔记架构简介
有道云笔记架构简介
 
数据访问层开发实践
数据访问层开发实践数据访问层开发实践
数据访问层开发实践
 
Hadoop con 2015 hadoop enables enterprise data lake
Hadoop con 2015   hadoop enables enterprise data lakeHadoop con 2015   hadoop enables enterprise data lake
Hadoop con 2015 hadoop enables enterprise data lake
 
Azure Data Lake 簡介
Azure Data Lake 簡介Azure Data Lake 簡介
Azure Data Lake 簡介
 
Qcon2013 罗李 - hadoop在阿里
Qcon2013 罗李 - hadoop在阿里Qcon2013 罗李 - hadoop在阿里
Qcon2013 罗李 - hadoop在阿里
 
20140326联动优势数据访问层DAL架构和实践7(刘胜)工行交流
20140326联动优势数据访问层DAL架构和实践7(刘胜)工行交流20140326联动优势数据访问层DAL架构和实践7(刘胜)工行交流
20140326联动优势数据访问层DAL架构和实践7(刘胜)工行交流
 
Jkcn MySQLDB 架构
Jkcn MySQLDB 架构Jkcn MySQLDB 架构
Jkcn MySQLDB 架构
 
基于My sql的分布式数据库实践 公开
基于My sql的分布式数据库实践 公开基于My sql的分布式数据库实践 公开
基于My sql的分布式数据库实践 公开
 
浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华浅析分布式存储架构—设计自己的存储- 58同城徐振华
浅析分布式存储架构—设计自己的存储- 58同城徐振华
 
淘宝Java中间件之路 it168
淘宝Java中间件之路 it168淘宝Java中间件之路 it168
淘宝Java中间件之路 it168
 
Oracle雲端服務介紹 taiwan
Oracle雲端服務介紹   taiwanOracle雲端服務介紹   taiwan
Oracle雲端服務介紹 taiwan
 
Oracle saa s paas overview
Oracle saa s paas overviewOracle saa s paas overview
Oracle saa s paas overview
 
大型电商的数据服务的要点和难点
大型电商的数据服务的要点和难点 大型电商的数据服务的要点和难点
大型电商的数据服务的要点和难点
 

浅谈电商网站数据访问层(DAL)与 ORM 之适用性

  • 2. What’s Data ? Data Files、Database、Data Service、etc. SQL、NoSQL、AWS RDS、SQL Azure、etc.
  • 3. Why DAL ? 抽象不变的:DRY  Don’t Repeat Yourself 封装变化的:SoC  Separation of Concerns
  • 4. DAL 中的不变、变化? 不变的or 一致的(核心):Interface、SQL、etc. 变化的- 1:Database、ORM Framework、etc. 变化的- 2:Caching、Logging、Sharding、etc.
  • 5. 电商网站DAL 特点(SoC) • Simple Scalability  读写分离 DAL R/W Routing • 10x Scalability  DB Sharding  DAL Routing + Aggregation • Multi-targeting Logging  Console/File/Log4Net/EntLib/Common.Logging • Transparent Caching  DAL 支持+ App 慎用 实现难! • Lazy Loading  DAL 支持+ App 慎用 用好难! • 99% Availability  Cache High Availability – 方案1:Dual-write Cache (Memcache) / Cache Replication (AppFabric) – 方案2:Multi-level Cache  L1 分布式+ L1.5 本地跨应用+ L2 本地应用内
  • 6. .NET 世界ORM 现状 • 10x Scalability:仅NH/MB 有限支持Sharding – 通过multi-db-session 实现shards 结果聚合、in-memory 结果排序 – NH HQL 不支持Sharding,如:排序,只能通过ICriteria 间接实现 – 长时间未更新,不兼容最新NH,不支持垂直分区及混合分区 • Multi-targeting Logging: – NH/MB 支持最好,L2S 也支持,但种类不丰富,需扩展 – EF 不支持,有开源爱好者提供了实现,较复杂、有风险 • Transparent Caching:此处略去N 字… • Lazy Loading:NH/L2S/EF/MB 都支持 • 99% Availability:此处略去N 字…
  • 7. DAL Sharding Demo (ORM Extension) – NHibernate.Shards (ISessionFactory)
  • 8. DAL Sharding Demo (ORM Plug-in) – ShardBatis (SQL Interception)
  • 9. DAL Sharding Demo (ADO.NET Extension) – Enzo SQL Shard (C# Extension Method)
  • 10. DAL Sharding Demo (ADO.NET Provider) – dbShards
  • 11. DB Sharding 策略 • Sharding is NOT SILVER BULLET for DB Scale-out • 不适用场景 – 处理事务型应用非常复杂,跨不同DB 事务,很难保证一致性 – 不含Sharding ID 查询较多的场景,即使并行处理,也要全扫描 • 大方向选择(non-global tables) – Sharding on every table  primary separation  child separation – Sharding on every table group (sticky)  primary + all children – Sharding on every table group (non-sticky)  primary + some children • 小策略选择:Sharding ID、Aggregation、etc.
  • 13. DB Sharding 风险 • Sharded Data Migration • Sharded Cluster Management • Replication Management • High-availability Management • Load-balancing Co-existence • Sharding Policy Change
  • 14. DAL Sharding 难点 • 切片策略 – 精确定位:PK round-robin / PK hashing-modulus / attribute(s)-based – 查询策略:all-shards iteration / 精确定位 – 遍历策略:sequential / parallel • 结果聚合 – 方案1:单库SQL 查询 DAL 中完成聚合(order, group, avg, etc.) – 方案2:跨库union 聚合 RDBMS 直接返回结果 – 方案3:读写分离 多库实时写 同步至单库 单库非实时读 • 基于ORM、自定义实现(ADO.NET)? • 其它:DB Proxy Sharding、In-mem Sharding?
  • 15. DAL Sharding 难点(continued) • DB Proxy Sharding:不太适合当前的Ctrip  性能问题、协议实现、etc. • In-mem Sharding – 已在酒店查询服务优化项目架构设计中使用 – 1st-Level Sharding + 2nd-Level Load Balancing  – 产品库可以这么做,订单库能这么做吗?
  • 16. DAL Sharding 设计参考 1、eBay Data Access Layer (QCon) 2、DAL Sharding 设计方案
  • 17. DAL Transparent Caching • 现状 – NH 二级缓存Provider:NHibernate.Caches.MemCache – MB 二级缓存Module:mybatis-memcached-module – EF:没有内建二级缓存机制,需通过EFCachingProvider 扩展 – L2S:只有一级缓存,没有扩展机制,不推荐用于scale-out 场景 • 难点 – 对Consumer 透明,如Biz Layer 不需要知道缓存的“存在” – 解决Caching Policy 和Data Consistency 间的矛盾与冲突 – 缓存刷新,拉模式or 推模式?实时推or 消息通知? • 其它:Cache Provider 与Cache-ware 区别
  • 18. DAL Transparent Caching (continued) • High Availability 方案1:Multi-node – Dual-write Cache (Memcache, client-side, non-transactional) – Cache Replication (AppFabric, server-side, transactional) – 无论哪个option,都要考虑secondary node selection 问题! • 2 cache items  2 cache nodes  比较简单 • 3 cache items  3 cache nodes  有点复杂 • x cache items  y cache nodes  如何确保node unavailable 时造成的影响最小? • High Availability 方案2:Multi-level – L1 分布式 – L1.5 本地跨应用 – L2 本地应用内 – 无论哪几个options combination,都要考虑sync coordination 问题!
  • 19. DAL 设计参考 1、NoSQL 数据库笔谈 2、James Hamilton
  • 21. 1、One Size does NOT Fit ALL ! 2、ORM Fx + Customized SQL + 其它 3、DAL 接口+ Base 抽象+ 自定义实现
  • 22. Demo for【DAL 接口+ Base 抽象+ 自定义实现】
  • 24. What’s DDFx ? • DDFx 的第一个D 有两层含义:Data and Domain • DDFx 的第二个D == Driven,意为:…驱动的… • DDFx 的Fx == (Development / Design) Framework (and Tools) • DDFx 理解#1:Data-Driven (Development) Framework • DDFx 理解#2:Domain-Driven (Design) Framework • DDFx 具体内容尚在不断完善中,但请记住:DDFx 不是万能的,所以,你要懂得:Context + Balance • DDFx 中某些非关键技术将采用Tech-Talk 方式进行
  • 26. 什么是Data? Data Files、Database、Data Service、etc. SQL、NoSQL、AWS RDS、SQL Azure、etc.
  • 28. DDFx 中几个数字 • 1 座工厂:DDFx Factory • 2 个车间:Domain Model (N 产品线)  Repository (N 产品线) • 3 种贯穿:DTO  Domain Model Intf.  Repository Intf. • 6 层架构:Presentation  Application/Controller  Service  Domain  Repository  Resource • 8 大前端: – C/S:Console  Windows Forms  WPF – B/S:ASP.NET Web Forms  Ajax  MVC / MVVM (ViewModel : DTO) – RIA:Silverlight (.NET 子集) – Device:Windows Phone 7 (Silverlight 子集)
  • 31. DDFx 架构层次 • 整体架构:6 层架构+ 1 座工厂(DDFx Factory) • Layer #1:用户表现层(Presentation Layer) • Layer #2:应用系统层(Application Layer) • Layer #3:服务表现层(Service Layer, 可选) • Layer #4:领域模型层(Domain Layer) • Layer #5:资源访问层(Repository Layer) • Layer #6:资源层(关系数据库、外部服务、文件系统、etc.)
  • 32. DDFx 架构+ 开发曲线 L1:UI -> VM/DTO (Requirement + UI Dev) L2:-> Controller (Non-UI Dev) -> IDomain (Façade Intf.) (Arch + Dev Lead) -> Domain Factory (Arch) -> Local/Service Client (Dev Lead) L3:-> Local/Service Server -> IDomain (Façade Intf.) (Arch + Dev Lead) L4:-> RealDomain (Real Façade) -> Biz. Rule + IRepository (Non-UI Dev) L5:-> Repository Factory (Arch) -> Local/Service Client (Dev Lead) -> RepositoryBase<T> : IRepository<T> (Dev Lead) -> SpecialRepository : ISpecialRepository (Non-UI Dev) -> Data Client / Service Client / etc. (Non-UI Dev) L6:-> RDBMS / Service Server / File Server / etc. (Requirement + Arch)
  • 34. Q & A