Bacysoft.cn

 找回密码
 邀请注册
查看: 19145|回复: 0
打印 上一主题 下一主题

UCenter 支持读写分离以及分布式部署的方法

[复制链接]
跳转到指定楼层
楼主
发表于 2016-7-11 15:58:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
UCenter 是康盛开发的用户中心,主要用于为康盛旗下多款产品提供统一登录服务,类似今天随处可见的第三方登录系统。
在 Discuz!X 系列发布后,Discuz!X 变成了一款集合多种功能于一身的社区软件,包括论坛、CMS、博客等等。在这种情况下 UCenter 所提供的功能就很鸡肋了,因此 UCenter 在 2011.5.5 后就再也没有更新过,而 Discuz!X 在 3.2 版本以后也没有新版本发布,目前处于维护阶段。

现在的问题在于,UCenter 作为 Discuz!X 的核心组件,是必须安装的,而 UCenter 并不支持 Discuz!X 所具有的分布式部署、读写分离以及负载均衡等功能。当应用规模增长到一定程度 UCenter 势必成为系统瓶颈或者最不稳定的部分。本文将探讨一种使 UCenter 支持上述功能的方法。

首先来分析一下 UCenter 的源码,在 Discuz!X 安装包中,有以下两个目录:uc_client 和 uc_server。 Discuz!X 通过 uc_client 连接到 UCenter,uc_server 则是完整的 UCenter。如果安装时选择的是独立安装 Discuz!X,则 uc_server 目录是可以删除的;如果选择的是合并安装,则 Discuz!X 管理后台 UCenter 功能页其实访问的就是 uc_server 目录下的内容。


比较一下 uc_client 与 uc_server 中的内容,发现 uc_client 其实就是 uc_server  的一个子集,从目录结构中可以看出 UCenter 也是安装 MVC 的模式开发的,control 和 model 分别对应 C 和 M,V 只有 uc_server 才有,因为 UCenter 有后台管理界面。显然 model 目录下的内容是与数据库的操作密切相关的,而 Discuz!X 对 UCenter 的访问均通过 uc_client 完成。以 'model/user.php' 为例,该文件封装了对数据表 ’ucenter_members' 的所有操作,而底层的数据库操作,则封装在 ‘lib/dbi.class.php' 中,类似 Discuz!X 的 db_driver_mysqli.php。


通过分析 ‘lib/dbi.class.php' 可以知道,UCenter 不支持读写分离以及分布式部署的根本原因是底层驱动模块不支持。因此产生了一个思路就是能否通过将 UCenter 的底层数据库驱动替换成 Discuz!X 的数据库驱动,然后通过 Discuz!X 配置文件来统一部署 UCenter,从而使得 UCenter 也能支持上述功能。


答案是肯定,下文以 'model/user.php' 中成员函数 ’get_user_by_uid‘ 为例,演示如何将 UCenter 的数据库驱动替换为 Discuz!X 的数据库驱动。

先来看看 UCenter 的源码:
  1. function get_user_by_uid($uid) {
  2. $arr = $this->db->fetch_first("SELECT * FROM ".UC_DBTABLEPRE."members WHERE uid='$uid'");

  3.                 return $arr;
  4.         }
复制代码


再来看看替换驱动后的代码:
  1. function get_user_by_uid($uid) {

  2.                 $arr = DB::fetch_first("SELECT * FROM  ".DB::table('ucenter_members')." WHERE uid='$uid'");

  3.                 return $arr;
  4.         }
复制代码


通过以上改造后,在配合对应的 Discuz!X 配置,如:
  1. $_config['db']['map']['ucenter_members'] = '2';
复制代码
就可以完美实现 UCenter 的分布式部署了,同时读写分离和负载均衡功能也被同步支持,使用方法与 Discuz!X 无异。

综上所述,要实现 UCenter 对分布式功能的完整实现,就必须改写 model 目录下所有模块的成员函数。

(Over)

您需要登录后才可以回帖 登录 | 邀请注册

本版积分规则



京ICP备08000958号-1|腾讯云|阿里云|联系方式|Bacysoft.cn

GMT+8, 2024-12-21 20:41 , Processed in 0.012893 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表