分布式系统设计之DB类(来自深空老大)
2019独角兽企业重金招聘Python工程师标准>>>
这可能是个庞大的话题,没有亲自作过相关系统。
可能有几层分布:
1、WEB分布,这个只需LVS支持即可,状态保持不保持无所谓,可以通过PHPSESSID来保持这个会话。因而接入服务器仅作为接入之用,存储转到后端,这里要保持接入机无用户文件还是比较难的,有时候保存一些可能会使系统更简单一些。
2、CACHE分布,接入机统一处理会话,根据规则命中某台特定CACHE机,当然,这里的CACHE机器不仅限于如MEMCACHED、XCACHE等,简单的方法可以直接使用DB代替,如MEMORY表,这样后端数据和CACHE的同步规则就需要自己定制,效率也可能没有自动完成CACHE<->DB双向更新的效率高。
3、DB分布,这里认为CACHE和DB也可用应用程序来控制访问,而不一定需要CACHE本身来完成,至于效率降低多少不清楚,个人觉得可以在后台设置一些定时调度脚本来更新CACHE,和将CACHE中的数据转存到后端DB。当然DB和CACHE的数量不一定是一一对应,如果CACHE多,那么DB存储可能会相应减少,这里需要测试一个平衡。
我在DB里设计了一个简单的路由器,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public static function &init(& $dsn , $dbKey , $fetchMode = self::DB_FETCH_ASSOC) {
if (isset(self:: $db [ $dbKey ])) {
return self:: $db ;
}
$route = Route::init();
$dbInfo = $route ->getDbRoute( $dsn , $dbKey );
//这里要检测DB相同DBINFO的实例是否存在,如果存在则直接返回引用
if ( is_array (self:: $db )) {
foreach (self:: $db as $key => $value ) {
if (self:: $db [ $key ]->dsn == $dbInfo ) {
self:: $db [ $dbKey ] = self:: $db [ $key ];
return self:: $db ;
}
}
}
$className = 'DB_' . self:: $dbType [ strtolower ( $dbInfo [ 'dbType' ])];
self:: $db [ $dbKey ] = new $className ( $dbInfo , $dbKey , $fetchMode );
return self:: $db ;
}
|
根据规则获取需要的DSN,然后返回一个DB,貌似这个路由很简单,很雷人:
1
2
3
4
5
6
7
8
9
10
|
public function getDbRoute(& $dsn , $dbKey ) {
global $_configs ;
if ( $_configs [ 'route' ][ 'db' ][ $dbKey ]) {
if ( $_configs [ 'route' ][ 'db' ][ $dbKey ][ 'routeRule' ] == 'rand' ) {
return $dsn [ $dbKey ][ array_rand ( $dsn [ $dbKey ])];
}
} else {
return $dsn [ $dbKey ];
}
}
|
当然路由规则是可以写进配置文件的,这里我默认写了个随机进行测试,发现可行,HOHO。一个规则可行,那么取模等规则当然也可行。
改进后的DB类会更为简练,当然最大的特性是支持分布- -!!
转载于:https://my.oschina.net/tenking/blog/28575
分布式系统设计之DB类(来自深空老大)相关推荐
- 浅谈权限设计(来自深空老大)
2019独角兽企业重金招聘Python工程师标准>>> By 深空, 2009-09-13 21:45:07 PHPChina的专家版在谈权限设计,苦于没有权限回帖,特发此博文谈谈简 ...
- 多数据库支持的应用程序设计(来自深空老大)
2019独角兽企业重金招聘Python工程师标准>>> 以前做PHP应用,多数是单数据库数据查询和更新,顶多也是主从数据库的支持,实现起来相对简单.主从数据库的问题在于,当会话存储在 ...
- 分布式系统设计理论之一致性哈希
分布式系统设计理论之一致性哈希 主要参考和围绕这篇论文讲解:Consistent Hashing 1 问题引入 什么是一致性哈希?为什么要用一致性哈希? 2 一致性哈希算法出现之前的分布式系统设计 例 ...
- 从火星传图有多难-业余眼光看深空通信
最近天问顺利登陆火星的消息非常热门,有同学问我,火星车.轨道器通信速率都很慢,尤其是火星车,1秒只能发2字节.想看一张图片,要等三四天,真的急死人.作为非通信专业的老师,讲给非通信专业的本科生,我想还 ...
- 云原生时代|分布式系统设计知识图谱(内含 22 个知识点)
我们身处于一个充斥着分布式系统解决方案的计算机时代,无论是支付宝.微信这样顶级流量产品.还是区块链.IOT等热门概念.抑或如火如荼的容器生态技术如Kubernetes,其背后的技术架构核心都离不开分布 ...
- 云原生时代|分布式系统设计知识图谱(内含22个知识点)
我们身处于一个充斥着分布式系统解决方案的计算机时代,无论是支付宝.微信这样顶级流量产品.还是区块链.IOT等热门概念.抑或如火如荼的容器生态技术如Kubernetes,其背后的技术架构核心都离不开分布 ...
- 腾讯资深架构师干货总结:一文读懂大型分布式系统设计的方方面面
1.引言 我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ.微信.淘宝.那么,一个大型互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂? ...
- 一文带你重新审视CAP理论与分布式系统设计
这是一篇来自微信公众号的文章,如果图片看不到,可直接跳转到文章出处查看:https://mp.weixin.qq.com/s?__biz=MzI4NTA1MDEwNg==&mid=265076 ...
- 从金拱门餐厅联想到的分布式系统设计思维
作者|周明耀 编辑|小智 其实在生活中,大到组织架构,小到琐碎日常,都能学到一些经验.总结出一些知识.共性往往隐藏在特性之中.你需要做的,可能仅仅只是细心观察而已? 前几天中午开会开到 12 点半,错 ...
- 《自然》评价“天问一号”成功发射—— 全球深空探索走进新时代
来源:科技日报 北京时间7月23日,重达5000公斤的"天问一号"探测器从海南文昌航天发射中心升空,大约36分钟后进入地火转移轨道,器箭分离正常,探测器太阳翼展开正常,发射任务取得 ...
最新文章
- linux usb驱动
- 五周第一次课(4月18日)
- Performance of Every Day Things by Jeffrey Richter PPT and Code
- hdu1865 1sting
- Atitit import sql fun 重要的sql功能扩展 ext 目录 1.1. Insert merge	1 1.2. Insert set	1 1.2.1. 13.2.5. LOAD
- 微型计算机原理偏移地址,微机原理及应用复习
- java你如何调字体大小_eclipse怎样调整代码字体大小 值得一看
- 工业以太网交换机特点分析及使用注意事项
- 通过路由远程计算机重启,如何通过三种方式重启路由器
- js 删除obj对象的属性
- 贪吃蛇python游戏
- PS制作华丽的紫色立体字
- php yar 安装失败_全面解析php7安装yar扩展的方法
- 自动控制系统实验总结
- 用html写一个道歉的代码
- 解决gitlab-runner一直处于等待中
- Visual Studio 2017 智能提示英文怎么切换成中文?
- 正电荷/内质网靶向性/蓝色/mCy-ER/绿色/开关型/CySeN花菁染料近红外荧光探针的制备
- 爬虫用fiddler抓取网易新闻客户端手机app内容
- USB与串口的区别简要总结
热门文章
- ibatis的ibatorForEclipse的安装与配置和ibator的错误日志查看
- [导入]如何调试你的C#程序
- 利用grep-console插件使Intellij idea显示多颜色调试日志
- 出现”/var/lib/mysql/mysql.sock“不存在的解决方法
- python pip安装
- Financial Management
- 在外围类作用域之外引用外围类的静态成员,类型名和枚举名都要求有解析操作符...
- js select 联动
- 2018软工实践K班总结
- 网络编程 基础 基于socket的tcp和udp连接