無標題文檔

有关网站集群架构的一点点思考

我目前所在的公司打算重新部署服务器集群架构。对于此,作为名项目开发人员本身对于 Linux 有点了解,想谈谈我的看法。

首先参看下面的网络和服务器架构图:

https://friable.rocks/_/2007_10_24/1193210104.jpg

基本上此集群的架构可以分为三层:网络链路层、应用服务层和数据存储层。然后大体上再安排两台服务器分别作为数据备份服务器和监控服务器。

网络链路层

网络链路层主要分配请求的负载平衡。前端通过一个防火墙和交换机以后,再交由 LVS 处理。然后 LVS 决定相应的应用服务器处理请求并返回。

此端我部门里的某一成员计划采用脚本程序控制。但个人认为对于此我想一来是效率不高,二来的确对于高负载的要求来说,稳定性还是有待测试的。所以我们听从了我们的管理员的看法,采用网络层的动态分配。

应用服务层

应用服务器主要用作存放各种应用服务器,比如 Web 服务器、搜索服务器和文件服务器。Web 服务器可能要根据具体的流量来确定具体的服务器规模。

大体上按照服务器的性质来分, Web 服务器和搜索服务器对于 CPU 的要求是比较高的。而文件服务器则偏向于磁盘的吞吐性能。

数据存储层

数据存储层在这里我理解为数据库集群。按照现有的项目规划数据库的性能要求是当前的服务器集群中最高的,所以个人认为这块是重点。

其他

相对的后期扩展性问题

这点我们也已经意识到了。后期如果对于数据更新频率不是很高的应用,可以在各层之间中加入若干台缓存服务器,以提高响应速度并缓解应用服务器的压力。

预算问题

预算和现实总是有些差距的。此规模的服务器集群主要的预算基本上都应该在数据库服务器上面了。在不降低性能的前提下,可以适当的缩减服务器的规模和数量。

但是对于长期的项目规划来看,任何的付出都会获得一定的回报的。对于此,我想我的态度是乐观的。

Windows Server 2008 真实写真

上个星期从 wiLdGoose 兄弟那里得知,他已经开始用上了 Windows Server 2008。而我本人说实话对于 M$ 的系统并不是非常的「感冒」,一来是用了 XP 那么多年也顺手了(XP 对于现在的硬件来说也适合了),二来是因为我是一个 Linux 用户。

wiLdGoose 兄弟他本机的系统截图可以得知,Windows Server 2008 相对于以往的 M$ 服务器操作系统(比如 Windows Server 2003)从界面上有一个非常明显的改进(说实话我不喜欢 Vista 风格的图标)。

https://friable.rocks/_/2007_11_06/1194347957.png

刚安装好的界面也是非常的清爽,习惯了操作 Windows 的弟兄们应该也能很容易的上手。我还记得「当年」 XP 默认安装好的界面就只有一个「回收站」的图标,这着实让人大跌了一下眼镜。

https://friable.rocks/_/2007_11_06/1194347978.png

开始菜单还是那个开始菜单,丝毫没有改变。

https://friable.rocks/_/2007_11_06/1194347997.png

资源管理器的样式做了一个小的调整。底部可以显示当前选中项目的属性(类似于增强型的状态栏?),而左上角的 favourite links 则可以记录经常访问的路径。这点我个人感觉非常的人性化。

https://friable.rocks/_/2007_11_06/1194348015.png

还是增强型的任务管理器。可以说这个软件从 Windows 2000 开始就一直保持了这样的风格。不过作为一个服务器操作系统,我想以后一个名叫 Resource Monitor 的程序要和 *ix 系统的 top 一样,经常的开着了。

https://friable.rocks/_/2007_11_06/1194348058.png

控制面板方面 M$ 似乎从 XP 以后就一直没有改进过了。不过习惯此操作的用户可以非常顺手的操作。再次声明下本人并不十分喜欢 Vista 风格的图标。

https://friable.rocks/_/2007_11_06/1194348077.png

服务器操作系统的网络功能直接影响着它的应用价值。Windows Server 2008 在此方面有了一个明显的改进,图形化的配置界面我想新手也可以非常的上手。总而言之,M$ 的系统还是非常的傻瓜的。

https://friable.rocks/_/2007_11_06/1194348091.png

应用程序崩溃在 M$ 的系统中是非常的常见的。看来 M$ 连应用程序的崩溃提示框也做了些许的改进(怀念当年 Windows 98 的蓝屏死机和「非法操作」)。

总的来说 Windows Server 2008 从界面上并没有多大的改变。微软声称此操作系统集成了众多「先进的功能」,而我本人并没有实际的应用过,所以只能从界面方面一瞥。

至于该不该升级,那么就看你个人的喜好的。而我本人的意见就相对的保守一些,我不会使用那些并不是很成熟的产品,尤其是操作系统。

相关的资料 说明,Windows Server 2008 的硬件要求和 Vista 是差不多的(那么我这个时候在想,此时的 Vista 的境地将是非常的尴尬的):

处理器:最低1.0GHz x86或1.4GHz x64,推荐 2.0GHz 或更快;安腾版则需要 Itanium 2。
内存:最低512MB,推荐2GB或更多。
内存最大容量支持:32位标准版4GB、企业版和数据中心版64GB;64位标准版32GB,其他版本2TB。
硬盘空间:最少10GB,推荐40GB或更多;内存大于 16GB 的系统需要更多空间用于页面、休眠和转存储文件。
光驱:DVD-ROM
显示器:SVGA 800×600分辨率或更高
键鼠:兼容设备

相关的详细资料可以到 cnbeta 的 Windows Server 专题页面微软的主页 去看看。

附:据说 PowerShell 是 Windows Server 2008 的一项非常重大的改进,对于习惯了命令行操作的我很欣喜能看见比 command.com/cmd.exe 更先进的控制台了。下面有一个视频,感兴趣的朋友可以看看(WMV 格式):

mms://wm.microsoft.com/ms/evnet/PowerShellDonJones_Snover_s_ch9.wmv

Slackware 的 INIT

这些天我一直在整理我以前翻译好的一些文档,并计划将其全部重新排版转换成 PDF 文档以便于保存。

这篇《Slackware 的 INIT》我翻译的时间比较早(当时我还真的是一个学生,呵呵)的一篇,它详细讨论了 Slackware 的运行级别以及启动的流程,推荐给大家看看。

下载地址(格式是 PDF 文档): https://friable.rocks/_/2007_11_12/1194862747.pdf

https://friable.rocks/_/2007_11_04/1194173036.pdf (旧版)

有关 PHP 实例化类的一点摘记

最近在编写 Grace PHP5 Framework 中,我得到很多类的实例化的心得。Grace PHP5 Framework 是一个完全基于 MVC 架构的框架,具有良好的扩展性。它对于类的调用可以说非常的灵活。

下面是调用一个模型(Module)的函数。这个函数的基本功能是指定一个模型(抽象化为类)的名称,然后它会在模型目录下面寻找这个类的脚本实例化以后返回。这样的做法有一点好处就是载入和实例化是自动的,你可以获得最大的灵活性。下面请看下面的代码,它并不长而且不复杂:

function &load_class($class_name, $param = null, $instantiate = true)
{
    static $objects = array();

    $class_name = ucfirst(strtolower($class_name));
    if (isset($objects[$class_name])) {
        return $objects[$class_name];
    }

    $class_file = DIR_MODELS . "/{$class_name}.inc.php";
    if (file_exists($class_file)) {
        require_once $class_file;

        if (!class_exists($class_name)) {
            return false;
        } else {
            $objects[$class_name] =& new $class_name($param);
            return $objects[$class_name];
        }

    }  else {
        if ($instantiate) {
            $objects[$class_name] = null;
        } 
        return null;
    }
}

函数只有三个参数,分别是 $class_name 、$param 以及 $instaniate ,其中 $param 是构造函数的参数,$instaniate 是可选的。请注意函数中的 $objects 数组是一个静态变量,也就是当调用完这个函数的时候数组并不会释放,下次调用此函数时这个数组的数据是会保存的。这样做的好处就是可以将大部分的类实例了以后,如需要重复调用则直接返回这个类的实例就可以了,避免了重复调用,提高了性能。代码如下:

    static $objects = array();

    if (isset($objects[$class_name])) {
        return $objects[$class_name];
    }

其它继续的代码就是检测是否有这个类名称的文件,如果有载入这个文件并寻找指定名称的类,如找到了这个类以后就实例化。这要求脚本中类的名称必须和脚本的文件名是一致的。我想这也有利于以后的代码管理。

$instaniate 参数这个时候就发挥了功效,这个参数会告诉函数如果未找到则在 $objects 下面做一个标记位(null)避免函数又重复的寻找文件名并重复载入和寻找。

    $class_file = DIR_MODELS . "/{$class_name}.inc.php";
    if (file_exists($class_file)) {
        require_once $class_file;

        if (!class_exists($class_name)) {
            return false;
        } else {
            $objects[$class_name] =& new $class_name($param);
            return $objects[$class_name];
        }

    }  else {
        if ($instantiate) {
            $objects[$class_name] = null;
        } 
        return null;
    }

其中语句:

$objects[$class_name] =& new $class_name($param);

可以多次的推敲一下。$class_name 在函数中是一个字符串变量。关键字 new 可以动态的实例化指定字符串的类(如果存在的话)。有关此调用方法可以参见 PHP 手册和 这里

此函数的不足之处就是如何去考虑传递不同个数的参数给每个不同的类的构造函数。或许可以使用 call_user_func_array 等函数实现,但是这样的做法非常的不 Grace。在这里需要推敲一下。其实 file_exists 等文件存在的测试可以交给 __autoload 函数处理,不过由于其他的函数比如 interface_exists 等也会调用 __autolaod 函数,出于兼容性的考虑,所以只在函数内做一个简单的测试。

PHP5 相对 PHP4 而言更加的面向对象。我想是时候更新我们我们的编码思想了。有关 PHP5 的类和对象, 这里 有一个非常好的教程。

附:此文档相关脚本 打包下载 ,请运行 index.php 文件。

我们亲爱的 1401

由于某种原因,我们接下来的几天要搬离公司宿舍了。心理虽然是有点舍不得,但是某种「不可抗拒力」还是让我们不得不这样做。

我习惯并已经喜欢从 14 楼的阳台往下面看了,在这里 生活也非常的惬意 (至少夏天不用担心蚊子的骚扰)。听说冬天在这里看雪景将是非常漂亮的。

https://friable.rocks/_/2007_10_29/1193649165.jpg

从阳台往西面眺望可以看到杭州城西的景色。那幢大的楼是一个软件园,里面据说有很多的牛人。晚上那桥上的路灯全部打开刚好又是另一番的景色。

https://friable.rocks/_/2007_10_29/1193649178.jpg

从正面看是农民房,远远得可以看见后面的房子也正在建造当中。杭州是一座充满活力的城市。

https://friable.rocks/_/2007_10_29/1193649191.jpg

https://friable.rocks/_/2007_10_29/1193649204.jpg

这是东区的门口,这似乎和一般的小区没什么两样。我拍照的时候刚好是星期天的下午,小区还是依旧的安静恬睦。

https://friable.rocks/_/2007_10_29/1193649219.jpg

咳咳,最后阳台旁边是窗户。是寝室女生的「闺房」,里面的东西凌乱不堪。看来 和我一样 ,在这里人都会变得很「懒」了,呵呵。

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHub (2) 、 TwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 其实无所谓叫什么名字,作为码农知道取名是件很难的事情。最后想到的这个名字,其实都没啥特别的含义,系统默认的文件名而已。

作为八零后,自认为还仅存点傲娇式的幽默感,以及对平淡生活的追求和向往。 为了免得对号入座和不必要的麻烦,声明本站点所持观点仅代表个人意见,不代表自己所服务公司的立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQG91dGxvb2suY29tCg== | base64 -d`

文章

项目