`
ccw5510
  • 浏览: 8089 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

TokyoTyrant 搭建 session 服务器

阅读更多

  session(会话机制)主要是用来在客户端与服务器之间保持状态的解决方案。随着访问量的不断增加,session的性能会有很大的影响。

  在 php 中,session 会存放在临时文件夹中,例:/tmp,因为session的读写涉及到大量小文件的随机读写,并且是集中在一个目录下,IO 也急剧升高。常见的 session 优化有以下几种:

  1.将 /tmp 挂载为内存中,具体操作参考网上资料;
  2.将 session 的存放目发录分为多级,主要是修改 php.ini 里的 session.save_path 的参数,这个具体也可参考网上资料;
  3.mysql 存储,这样做的好处就是可以多服务器共享 session,但好像性能不是很好,具体没测过;
  4.memcached 存储,memcached 是目前最流行的缓存服务器,memcache php客户端最近的版本中都内置支持 session,存放在 memcache 速度快,memcache本身也有过期机制,不用额外再进行垃圾回收的处理,但 memcache 采用的是内存做存储,如果服务器出现down机数据就会丢失,但根据平时的检测,down机很少出现。
  5.还可以将 session 采用 TokyoTyrant 存放,TokyoTyrant 只是一个网络接口服务器,后面的存储采用的是 Tokyo Cabinet,Tokyo Cabinet 的效率不用怀疑,网上也有很多文章进行过介绍,而且还支持主从同步,它是将数据存放在硬盘上,不用担心数据丢失,下面来介绍一下用 TokyoTyrant 搭建 session 服务器。

 

#安装 Tokyo Cabinet

wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.45.tar.gz
tar zxvf tokyocabinet-1.4.45.tar.gz
cd tokyocabinet-1.4.45
./configure --enable-off64
#32位系统需要 --enable-off64,以让它支持大于2GB的文件
make
make install

cd ../

#ttserver运行时,支持一些扩展脚本,这里采用lua脚本,所以需要lua的支持,安装 lua
wget http://www.lua.org/ftp/lua-5.1.4.tar.gz
tar zxvf lua-5.1.4.tar.gz
cd lua-5.1.4.tar.gz
#要根据系统而定,直接make它会有提示
make linux
make install
ln -s /usr/local/bin/lua /usr/bin/lua

cd ../
#安装Tokyo Cabinet 的 lua 扩展
wget http://1978th.net/tokyocabinet/luapkg/tokyocabinet-lua-1.9.tar.gz
tar zxvf tokyocabinet-lua-1.9.tar.gz
cd tkoyocabinet-lua-1.9.tar.gz
./configure
make
make install

cd ../

//安装 Tokyo Tyrant
wget http://1978th.net/tokyotyrant/tokyotyrant-1.1.40.tar.gz
tar zxvf tokyotyrant-1.1.40.tar.gz
./configure --enable-lua --with-lua
make
make install

cd ../

 

还需要一个 expire.lua 文件,这个文件用于定时将过期的 session 清理。代码如下:

 

function expire()
   local args = {}
   local cdate = string.format("%d", _time())
   table.insert(args, "addcond\0x\0NUMLE\0" .. cdate)
   table.insert(args, "out")
   local res = _misc("search", args)
   if not res then
      _log("expiration was failed")
   end
   print("rnum=" .. _rnum() .. "  size=" .. _size())
end

 

  这里我在 /etc/ttserver/ 下建立了 expire.lua 文件,保存上面的代码。

  建立 /data/ttserver/session1 文件夹,并让该目录具有写权限,同样再建 /data/ttserver/session2、/data/ttserver/session3 文件夹。

  现在就可以起动 ttserver 了,在命令行下输入:

 

ttserver -host 127.0.0.1 -port 11221 -ext /etc/ttserver/expire.lua 
-extpc expire 5.0 -thnum 8 -dmn -pid /data/ttserver/session1/ttserver.pid 
-log /data/ttserver/session1/ttserver.log -le -ulog /data/ttserver/session1/ 
-ulim 128m -sid 1 -rts /data/ttserver/ttserver.rts 
'/data/ttserver/session1/sessions.tct#idx=key:lex#idx=x:dec#dfunit=8'

 

 

  -ext 参数:指定扩展脚本,这里是用于定时清理 session
  -extpc 参数1 参数2:参数1,为调用扩展脚本里的函数名;参数 2 为执行频率。
  /data/ttserver/session1/sessions.tct#idx=key:lex#idx=x:dec 是设定存储的文件名,存储格式为 tct,idx 设置索引,这里key、x字段设为索引,lex表示类型是字串,dec表示类型为数字。
  其他参数不多讲了,可以参考这里:Tokyo Tyrant(TTServer)系列-启动参数和配置

  启动后就可以在 /data/ttserver/session1 目录看到生成了几个文件:

TokyoTyrant 搭建 php session 服务器

  当有数据写入时还将会生成一个 .ulog 文件。

  接着可以在本机的 11222、11223 启动 ttserver,分别采用 /data/ttserver/session2、/data/ttserver/session3 目录存储。

  用 ps -ef | grep ttserver 可以检测是否存在三个 ttserver 进程。

  现在整个服务器环境配好了,开始配置PHP环境:

  先去下载 php 访问 ttserver 的客户端,有php源码的,也有 php扩展 so,由于是测试环境,不想去编译模块,就用了php写的客户端,下载地址为:

  http://mamasam.indefero.net/p/tyrant/

  在 php 的 ttserver 扩展模块中(http://pecl.php.net/package/tokyo_tyrant),已支持 session ,可以参考这里(http://us3.php.net/manual/en/tokyo-tyrant.installation.php)的文档配置就行了,比较简单。

  下面以 php 客户端为例,写一个自定义的 session 处理,代码如下:

 

<?php
include('Tyrant/Tyrant.php');

// session 的过期时间
define('SESS_EXPIRE', 600);

// session 服务器组
$server_array = array(
                      array('host' => '127.0.0.1', 'port' => '11221'), 
	              array('host' => '127.0.0.1', 'port' => '11222'), 
		      array('host' => '127.0.0.1', 'port' => '11223')
                     );

$server_num = 0;

function sess_open()
{
    global $server_num;

    $server_num = crc32(substr(session_id(), 0, 2)) % count($server_array);

    return true;
}

function sess_close()
{
    return true;
}

function sess_read($id)
{
    global $server_array, $server_num;

    $tt = Tyrant::connect($server_array[$server_num]['host'], 
$server_array[$server_num]['port']);
    $values = $tt->get($id);

    if ( is_array( $values ) && isset( $values['val'] ) )
    {
	return $values['val'];
    }
}

function sess_write($id, $value)
{
    global $server_array, $server_num;

    $tt = Tyrant::connect($server_array[$server_num]['host'], 
$server_array[$server_num]['port']);

    $values = array( 
                   'val' => $value, 
                   'x' => time() + SESS_EXPIRE 
                   );

    return $tt->put($id, $values);
}

function sess_destroy($id)
{
    global $server_array, $server_num;

    $tt = Tyrant::connect($server_array[$server_num]['host'], 
$server_array[$server_num]['port']);

    return $tt->out($id);
}

function sess_gc()
{
    return true;
}

ini_set('session.save_handler', 'user');
session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_write", 
"sess_destroy", "sess_gc");
session_start();

// 当设完 session 后,可以注下这一行代码。直接输出 session 里的内容
// 放着过 5 分钟以后再去刷新页面,session 的值就为空了
$_SESSION['key'] = 'hello world';

var_dump($_SESSION['key']);
?>

 

 

By xhttp.cn 整理:http://www.xhttp.cn/2010/06/16

分享到:
评论

相关推荐

    tokyotyrant-1.1.40.tar.gz

    TokyoTyrant是Tokyo Cabinet的一个网络服务器接口,它允许通过网络进行数据存取,提供了高性能、轻量级的数据存储解决方案。TokyoTyrant 1.1.40是该软件的一个版本,适用于CentOS 7 x64操作系统。在安装和使用...

    tokyotyrant

    媲美memcached的缓存服务器软件包,tokyocabinet-1.4.45.tar.gz+tokyotyrant-1.1.40.tar.gz

    tokyotyrant/tokyocabinet/gpac

    TokyoTyrant 是一个轻量级的键值存储服务器,基于 Tokyo Cabinet 数据库引擎。它提供了一个简单的网络接口,使得分布式系统可以方便地存取数据。TokyoTyrant 的设计目标是高性能和低延迟,适用于缓存服务、日志记录...

    tokyoCabint及tokyoTyrant简介

    标题 "tokyoCabinet及tokyoTyrant简介" 指向了两个与数据库管理相关的开源工具,Tokyo Cabinet和Tokyo Tyrant。这两个工具由日本开发者开发,主要用于小型到中型的数据存储,尤其适合那些对数据读写速度有较高要求的...

    Tokyocabinet-Tokyotyrant文档大合集

    Tokyo Cabinet 是一个DBM的实现。这里的数据库由一系列key-value对的记录构成。key和value都可以是任意长度的字节序列,既可以是二进制也可以是字符串。这里没有数据类型和数据表的概念。 当做为Hash表数据库使用时,...

    tokyo tyrant文档

    Tokyo Tyrant支持故障转移,能够在服务器出现故障时自动切换到备用服务器,保证服务的连续性。 #### 日志文件体积小 由于Tokyo Tyrant的高效存储机制,其产生的日志文件体积相对较小,这有助于减少磁盘空间的占用...

    发布一个基于TokyoTyrant的C#客户端开源项目

    通过`TcpClientIOPool.GetInstance`获取链接池实例,并使用`SetServers`方法设置服务器地址和端口。然后,可以通过`InitConnections`、`MinConnections`、`MaxConnections`等属性设置连接池参数。 2. CRUD操作: ...

    tokyocabinet安装配置总结(Ubuntu)

    Tokyotyrant是Tokyocabinet的网络服务器版本,允许远程访问Tokyocabinet数据库。按照类似上述步骤下载、解压、配置、编译和安装Tokyotyrant: ``` # 下载并解压Tokyotyrant源代码 tar xvf tokyotyrant-1.1.54....

    ttserver-lib包

    tokyocabinet-1.4.45.tar.gz tokyotyrant-1.1.41.tar.gz tokyotyrant-0.11.jar ch-tokyocabinet-java-1.24.0.jar

    Memcache完全剖析 最实用的Memcache文档

    兼容程序如TokyoTyrant等数据库系统,也可以与Memcached结合使用,进一步扩展其应用场景。 总之,Memcached通过提供简单高效的缓存机制,能够显著提升数据密集型应用的性能。了解其内部结构和使用方式对于开发者来...

    Memcached分布式缓存

    - **TokyoTyrant案例**:TokyoTyrant是一个开源的高性能key-value存储系统,它可以与memcached兼容,提供更强大的功能。 #### 总结 Memcached作为一款高性能的分布式缓存系统,在现代互联网应用中扮演着至关重要的...

    TTserver1.1.4

    从给出的信息来看,它可能是Tokyo Tyrant的一个特定版本,因为压缩包中的文件名为"tokyotyrant-1.1.41"。Tokyo Tyrant是一个轻量级、高性能的键值存储系统,常用于数据缓存和快速查找应用。 Tokyo Tyrant主要知识点...

    memcached的细节文档

    - **兼容应用程序**:如TokyoTyrant等软件与memcached的兼容使用。 ### 总结 memcached作为一个内存缓存系统,具有简单、高效的特点,特别适合Web应用中缓存数据,减少数据库的访问次数。其分布式特性使得系统更加...

    mencache学习手册中文版.pdf

    - **TokyoTyrant案例**:介绍了一个兼容memcached的数据库系统TokyoTyrant,其提供了类似的功能和服务。 - **应用经验**:分享了实际应用memcached的经验教训,如通过daemontools启动服务、监控性能等。 通过以上...

    MemCached 全面剖析 memcached.pdf(中文)

    - **TokyoTyrant 案例**:TokyoTyrant 是一个兼容 MemCached 协议的高性能键值存储系统。 以上内容覆盖了 MemCached 的基本概念、安装使用、内存管理、删除机制、分布式算法以及实际应用场景等方面的知识点,为深入...

    ttserver

    在 "tokyotyrant-1.1.24" 这个压缩包中,我们预期会找到 Tokyo Tyrant 的源代码、文档、示例程序和测试用例。Tokyo Tyrant 提供了丰富的API,使得开发人员可以轻松地在各种编程语言(如C、Python、Ruby等)中与之...

Global site tag (gtag.js) - Google Analytics