您的位置: 飞扬精品软件园 >> 文章中心 >> 网络通讯 >> 服务器类 >> 网站加速动态应用篇 节约10倍以上的成本

相关文章链接

本类文章排行

最新新闻资讯

    网站加速动态应用篇 节约10倍以上的成本

    网站加速动态应用篇 节约10倍以上的成本


    • 阅览次数: 文章来源: 网络 原文作者: 佚名 整理日期: 2010-05-20


     

    四,环境配置以及底层基础类库

    PHP网络版环境:每IDC之间差异化的Nginx环境变量配置,使得相同的应用程序在不同的IDC运行时,使用各自IDC内部的MC以及DB等资源。

    PHP Shell版环境:

    PHP Shell是指通过命令行方式执行的php脚本程序。

    比如/path/php/bin/php test.php

    或在php程序第一行加上

    #!/path/php/bin/php

    然后赋予php脚本可执行权限,使作为shell程序运行。

    由于php作为shell运行时,无法继承nginx配置的环境变量。所以它必须依赖一个独立的配置文件。

    由于图片里含有帐户等敏感信息,就不在此贴了。

    底层基础类库:

    底层基础类库,起到粘合剂的作用,将环境配置,服务器资源等全部结合起来,使得这些资源以及配置信息对上层开发人员透明,无须考虑。总的来说有以下一些功能。

    1, 两环境融合,天衣无缝。 php 网络环境和shell使用同一基础类库,代码无任何一行差异。使得平时编写的php网络程序,以及类库积累,可以方便的直接用来做shell编程,进行复用。具体原理是,类库需要用到配置信息时,先通过if( isset ($_ENV[“SERVER_SOFTWARE”]) )变量判断自己是否网络环境,如果是就直接使用配置项比如:_SERVER[“DB_stock_host”] ,若不是,则先将配置文件数据项,section名和下面的字段相加转化成 _SERVER[“DB_stock_host”] = “m3306_sz_gtimg_cn” ; 跟网络环境一致后,再继续后面操作。

    [DB_stock]

    host = m3306_sz_gtimg_cn

    类库目前除支持模拟DNS外,还直接兼容真实域名以及IP地址,方便将来进行数据迁移。之所以没有直接使用 DNS是也有历史原因的。

    2, 对DB资源的封装。

    在没有内部DNS的情况下,将DB读写分离,帐户选择,连接的建立(包括 何时候真正建立连接,建立长连接,还是短连接,连接的绑定,以及生命周期),负载均衡以及failvoer等封装成对用户透明的如下简单用法:

    //指定以读(r) 或 写(w) 的方式打开一个库。不指定的情况下,默认是”r”方式打开。

    $db_r =new MYSQL(“testdb”,“r”);

    <?

    require_once (dirname(__FILE__).'/../mysql.php');

     

    $db_w =new MYSQL("test","w");

     

    $arr = array(

                  "id" => "8",

                  "name" => "yangjian8"

               );

     

    if( $db_w->insert("test",$arr) )

    {

           echo "query ok ...<br>";

    }

    else

    {

           echo "query failed ...<br>";

           echo "errno=$db_w->errno<br> errmsg=$db_w->errmsg<br>";

    }

     

    echo "read ............<br>";

     

    $db_r =new MYSQL("test","r");

    $sql = "select * from test";

     

    if( $result = $db_r->query($sql))

    {

           while ($row = mysql_fetch_array($result, MYSQL_BOTH))

           {

                  printf ("id: %s name: %s<br>", $row[id], $row[name]);

           }

           $db_r->free();  //free result. if you not free it,it will auto free at the end of the php script.

    }

    else   //if not success,you can print the error info.

    {

           echo "errno=$db_r->errno<br> errmsg=$db_r->errmsg<br>";

    }

    3, 对MC池子资源的封装。

    简化MC池子使用方法,支持异地MC数据同步。

    //if rset=1,the mc data will sync to other idcs, default 0.

    function set($key, $value, $flag, $expire, $r_set=0)

    <?php

    require_once (dirname(__FILE__).'/../memcache.php');

     

    $mc = new MC("test");

    for($i=0;$i<2;$i++)

    {

           $mc->set("key".$i,"value".$i,0,100);

    }

     

    for($i=0;$i<2;$i++)

    {

           echo $mc->get("key".$i);

           echo "<br>";

    }

    DB以及MC的异地写已经封装进去,对上层开发人员来说都是透明的。

    注意:我在引用头文件时候,都会使用类似require_once (dirname(__FILE__)。‘/。./mysql.php’); 的方法。我暂且管它叫动态绝对路径。它的好处是,

    跟相对路径比:当一个头文件被多层引用时,目录结构又不一致,不会找不到。

    也不会去搜索所有可能的目录,执行多余的fstat以及open操作。

    跟绝对路径相比:如果我将整个项目,包括头文件全部平移到别的目录,不需要挨个修改文件。

    当然,你也可以采用另外一个方法,将本项目相关的配置信息绝对路径放在一个统一的文件里,然后通过任何一种方法引用那个文件。


     

    [1] [2] [3]


查看所有评论

网友对网站加速动态应用篇 节约10倍以上的成本的评论

网名:
主题:
内容:
验证码: