SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
9.
架构演变与发展 - 老系统的问题 <ul><li>a) 由于系统分层比较模糊,导致问题极难排查,到底是哪个层面出现了错误 </li></ul><ul><li>?是页面相关的地方、访问数据的地方,还是处理逻辑的地方? </li></ul><ul><li>b) 由于 web server 可以直接访问 db server ,在高峰阶段,并发量比较 </li></ul><ul><li>大,导致 db server 经常 down 掉。 </li></ul><ul><li>c) 数据表结构设计不当,导致无法很简单地 ( 甚至不可能 ) 进行竖直和水平 </li></ul><ul><li>方向的伸缩。 </li></ul>没有设计!
10.
HTTP MySQL MC 数据访问层 表现层 逻辑层 FastCGI MySQL 架构演变与发展 - 纯 PHP 分层方案 (1) R W
11.
架构演变与发展 - 纯 PHP 分层方案 (2) 方案 (1) 解决了之前所说的问题。但是: a) 开发一个功能,要写很多代码,而且有大部份代码是相当乏味的,重复性 极高,千篇一律,特别是数据访问层代码。 b) 程序员自己控制缓存。这使得: <1> 缓存代码渗透到业务逻辑的每一个角落,造成代码维护成本上升。 <2> 程序员根据自己的喜好来控制缓存的 KEY 和 VALUE ,造成缓存混乱。 <3> 程序员既要负责业务逻辑的编写,还要负责缓存管理,造成编程复 杂度提高、开发效率低下。 这些问题,迫使我们寻找其它的解决方案。。。
18.
架构演变与发展 - DA 引入 , DAL 产生 (1) cache 处理器在缓存的存取方面有了很大的进步,但是由于接口众多,使 用起来不太方面。而且还是要编写大量的重复代码。 为此,我们重构了这部份代码,吸收了其它框架的优点,开发出 了 Data Accessor( 简称 DA) 。
19.
架构演变与发展 - DA 引入 , DAL 产生 (2) HTTP MySQL MC 表现层 逻辑层 R/W DA JMCD 存储 NS 、 Id List 、聚 合运算结果
20.
架构演变与发展 - DA 引入 , DAL 产生 (3) DA 标准化了调用接口,简化了编程,使程序员在业务逻辑层面不再关心缓 存与切库分表,极大地提高了生产力 ( 代码量继续减少,易用性提高 ) 。 但是它仍然有很多不足。 DA 直接和数据库打交道,在这一点上,可以说是 又回到了起点。 不过,从逻辑上来说, DA 已经是之后构想的 Data Access Layer 的雏形, 经过 4 个月的运行测试,现在,我们把[原 DA ]称为 DAL1.0 ,而把 [原 DA ]中包含的客户端程序仍然称为 DA 。
22.
架构演变与发展 - DAL2.0(2) HTTP MySQL DAL Server 表现层 逻辑层 SCGI DA CACHE JDBC Oracle ??? JDBC JDBC
23.
DAL 设计概览 - 关于分库切表 1) 垂直切分:按功能分。分到不同的数据库或服务器。 2) 水平切分:对数据进行水平分割。 a. 最好分到同一个数据库。 b. 一种已经证明是切实可行的方案:主表+辅表。 c. 有 3 种类型:主表不打散、主表打散无辅表、主表打散有辅表。 d. 但对程序员来说, TA 看到的只是一张表,不妨称之为虚表 ( 逻辑表 ) ,这张虚表实际上可能是由 N 张实表 ( 物理表 ) 组成的。
28.
DAL 设计概览 - DAL Server2.0 设计目标 1) 提升性能 : a. 连接池 b. 并行查询、合并结果 c. 更好的缓存处理 ( 过期策略可配置、缓存提供者可配置等等 ) 2) 提高可用性 : a. 多个 DAL 实例 (1 available + n candidates) b. 引入单数据库事务 3) 其它:更智能的 where 分析,表的状态监控, DAL 更具可扩展性。。。
29.
DAL 设计概览 - DAL Server2.0 的可扩展设计 DAL Server2.0 总体上设计成 (core + plugins) 的形式。 core 负责一些不可插件化 ( 或难以插件化 ) 的组件, plugins 则是那些可插 化的组件。 如配置处理、查询分析,选路策略,数据处理等等就是属于 core 的内容。 而 CacheProvider, ConnectionProvider... 就是一些可插件化的例子。
30.
DAL 设计概览 - DAL Server2.0 示意图 Monkey query executor routing strategy query parser cache provider result merger cache MySQL conn provider DAL Server2.0 config manager result encoder dal handler
31.
DAL 设计概览 - 扩展 DAL 概念 (1) 访问数据,可以是访问数据库中的数据,也可以是 MC/JMCD 当中的数据, 那为什么不可以是 lucene 索引中的数据?