分页: 7/174 第一页 上页 2 3 4 5 6 7 8 9 10 11 下页 最后页 [ 显示模式: 摘要 | 列表 ]
20 May
Tags:
  我一直习惯用phpMyAdmin对MySQL数据库进行管理,曾修改了一个《可管理多台远程MySQL服务器的phpMyAdmin 2.10.2》。但有些机器上因为安全等因素,只设置了允许从本机访问自身的MySQL端口,而且没有安装Apache和PHP,因而不能使用phpMyAdmin。于是,我只好使用命令行方式来对MySQL数据库进行管理。为了方便以后从命令行操作数据库可以更方便(拷贝、粘贴),我写下了这篇文章。

一、从命令行登录MySQL数据库服务器
1、登录使用默认3306端口的MySQL

/usr/local/mysql/bin/mysql -u root -p

2、通过TCP连接管理不同端口的多个MySQL(注意:MySQL4.1以上版本才有此项功能)

/usr/local/mysql/bin/mysql -u root -p --protocol=tcp --host=localhost --port=3307

3、通过socket套接字管理不同端口的多个MySQL

/usr/local/mysql/bin/mysql -u root -p --socket=/tmp/mysql3307.sock

4、通过端口和IP管理不同端口的多个MySQL

/usr/local/mysql/bin/mysql -u root -p -P 3306 -h 127.0.0.1


--------------------------------------------------------------------------------

二、数据库操作SQL语句
1、显示服务器上当前存在什么数据库

SHOW DATABASES;

2、创建名称为rewin的数据库

CREATE DATABASE rewin;

3、删除名称为rewin的数据库

DROP DATABASE rewin;

4、选择rewin数据库

USE rewin;


--------------------------------------------------------------------------------

三、表操作SQL语句(登录之后必须用以上的USE命令选择一个数据库,再进行表操作)
1、显示当前数据库中存在什么表

SHOW TABLES;

2、创建数据库表zhangyan:在mysql>后粘贴以下SQL语句,存储引擎为MYISAM,字段id为主键、唯一索引。

CREATE TABLE `zhangyan` (
`id` INT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`username` VARCHAR( 20 ) NOT NULL ,
`password` CHAR( 32 ) NOT NULL ,
`time` DATETIME NOT NULL ,
`number` FLOAT( 10 ) NOT NULL ,
`content` TEXT NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = MYISAM ;

3、查看zhangyan表结构

DESCRIBE zhangyan;

4、从表中检索信息
4.1、从zhangyan表中检索所有记录

SELECT * FROM zhangyan;

4.2、从zhangyan表中检索特定的行:字段username等于abc,字段number等于1,按字段id降序排列

SELECT * FROM zhangyan WHERE username = 'abc' AND number='1' ORDER BY id DESC;

4.3、从zhangyan表中检索指定的字段:username和password

SELECT username, password FROM zhangyan;

4.4、从zhangyan表中检索出唯一的不重复记录:

SELECT DISTINCT username FROM zhangyan;

5、插入信息到zhangyan表

INSERT INTO zhangyan (id, username, password, time, number, content) VALUES ('', 'abc', '123456', '2007-08-06 14:32:12', '23.41', 'hello world');

6、更新zhangyan表中的指定信息

UPDATE zhangyan SET content = 'hello china' WHERE username = 'abc';

7、删除zhangyan表中的指定信息

DELETE FROM zhangyan WHERE id = 1;

8、清空zhangyan表

DELETE FROM zhangyan;

9、删除zhangyan表

DROP TABLE zhangyan;

10、更改表结构,将zhangyan表username字段的字段类型改为CHAR(25)

ALTER TABLE zhangyan CHANGE username username CHAR(25);

11、将当前目录下的mysql.sql导入数据库

SOURCE ./mysql.sql;


--------------------------------------------------------------------------------

四、数据库权限操作SQL语句
1、创建一个具有root权限,可从任何IP登录的用户sina,密码为zhangyan

GRANT ALL PRIVILEGES ON *.* TO 'sina'@'%' IDENTIFIED BY 'zhangyan';

2、创建一个具有“数据操作”、“结构操作”权限,只能从192.168.1.***登录的用户sina,密码为zhangyan

GRANT SELECT , INSERT , UPDATE , DELETE , FILE , CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES , CREATE VIEW , SHOW VIEW , CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON *.* TO 'sina'@'192.168.1.%' IDENTIFIED BY 'zhangyan';

3、创建一个只拥有“数据操作”权限,只能从192.168.1.24登录,只能操作rewin数据库的zhangyan表的用户sina,密码为zhangyan

GRANT SELECT , INSERT , UPDATE , DELETE ON  rewin.zhangyan TO 'sina'@'192.168.1.24' IDENTIFIED BY 'zhangyan';

4、创建一个拥有“数据操作”、“结构操作”权限,可从任何IP登录,只能操作rewin数据库的用户sina,密码为zhangyan

GRANT SELECT , INSERT , UPDATE , DELETE , CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES , CREATE VIEW , SHOW VIEW , CREATE ROUTINE, ALTER ROUTINE, EXECUTE ON rewin.* TO 'sina'@'%' IDENTIFIED BY 'zhangyan';

5、删除用户

DROP USER 'sina'@'%';


PS:如果想了解更多的MySQL操作资料,请参考MySQL官方的中文参考手册
[文章作者:张宴 本文版本:v1.0 最后修改:2007.08.06 出处:http://blog.s135.com]
20 May
Tags:
  我管理服务器太多了,不可能每时每刻都登录到上面查看服务器状况,于是写了一个“服务器监控系统 ServMon V1.0”。其原理是用shell脚本定时抓取被监控服务器上信息,再用curl POST到监控机的PHP接口程序上,由PHP接口程序对信息进行分析,如果存在异常,则发送报警邮件给管理员。

  下午,ServMon V1.0 已经在sina播客服务器上部署,以下为ServMon的删节版内容,只监控磁盘分区使用率和Swap交换空间两项:
点击在新窗口中浏览此图片
  1、被监控端服务器的shell脚本(Linux)
  (1)、发送磁盘分区使用率给监控端接口http://192.168.0.28/servmon/interface.php的脚本
引用
/usr/local/servmon/bin/diskstat_send
#!/bin/sh
LANG=zh_cn
disk=$(/bin/df -kP | grep / | awk -F ' ' ' {print $6":"$5}' | awk -F '%' ' {print $1}' | tr -s '\n' ';')
today=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")
ip=$(/sbin/ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk '{print $2;}' | awk -F':' '{print $2;}' | tr -s '\n' ';')
/usr/bin/curl -d menu=diskstat -d password=$2 -d date=$today -d ip=$ip -d data=$disk $1

磁盘分区使用率监控报警邮件示例图:
点击在新窗口中浏览此图片
  (2)、发送Swap交换空间使用率给监控端接口http://192.168.0.28/servmon/interface.php的脚本
  /usr/local/servmon/bin/swapstat_send
引用
#!/bin/sh
LANG=zh_cn
data=$(/usr/bin/free -m | grep Swap | awk '{print $2":"$3":"$4}')
today=$(date -d "today" +"%Y-%m-%d_%H:%M:%S")
ip=$(/sbin/ifconfig | grep "inet addr" | grep -v "127.0.0.1" | awk '{print $2;}' | awk -F':' '{print $2;}' | tr -s '\n' ';')
/usr/bin/curl -d menu=swapstat -d password=$2 -d date=$today -d ip=$ip -d data=$data $1

Swap交换空间使用率监控报警邮件示例图:
点击在新窗口中浏览此图片
  (3)、计划任务:每30分钟将磁盘分区使用率发送给监控端接口,每10分钟将Swap交换空间使用率发送给监控端接口。
  /etc/cron.d/servmon
引用
0-30/30 * * * * root /bin/sh /usr/local/servmon/bin/diskstat_send http://192.168.0.28/servmon/interface.php yourpassword
0-50/10 * * * * root /bin/sh /usr/local/servmon/bin/swapstat_send http://192.168.0.28/servmon/interface.php yourpassword

  2、监控端服务器配置(Linux)
  (1)、启动sendmail
  /usr/sbin/sendmail -bd -q30m
  -b:指定Sendmail在后台运行,并且监听端口25的请求。
  -d:指定Sendmail以Daemon方式运行(守护进程)。
  -q:当Sendmail无法将邮件成功地发送到目的地时,它会将邮件保存在队列里。该参数指定邮件在队列里保存的时间。其中的30m表示保留30分钟。

  (2)、修改php.ini的[mail function]部分为以下内容,然后重启Apache,使PHP能够使用mail()函数发送电子邮件
引用
[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25

; For Win32 only.
;sendmail_from = me@example.com

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = /usr/sbin/sendmail -t -i

  (4)、在MySQL上创建一个数据库servmon,然后在该数据库中执行以下SQL语句创建表:
引用
CREATE TABLE `tb_diskstat` (
  `ip` varchar(128) NOT NULL default '',
  `date` int(10) NOT NULL default '0',
  UNIQUE KEY `ip` (`ip`)
) TYPE=MyISAM;

  备注:这张表是PHP接口程序用来记录发送磁盘分区报警邮件的时间,避免在一段时间内重复发送大量报警邮件的,其实完全可以用Session、文本文件来代替它。这里之所以用MySQL数据库,是因为PHP接口中还将增加一些需要记录信息到数据库的监控模块,所以就统一用数据库了。)

  (3)、PHP接口程序
  http://192.168.0.28/servmon/interface.php
引用

/**
*********************************************************************
* Copyright (c) 2007, 回忆未来[张宴]
* All rights reserved.
*
* 文件名称: interface.php
* 摘    要: 服务器监控系统ServMon接口程序
* 描    述:
* 作    者: 张宴  新浪UC:103500  博客:blog.s135.com
* 版    本: 1.0
* 时    间: 2007-08-03
*********************************************************************
*/  
  
//------------------配置信息------------------  
$password = "yourpassword";//设置数据传输验证密码  
$mysql_server = "127.0.0.1:3306";//MySQL服务器地址及端口,例如localhost:3306  
$mysql_db = "servmon";//MySQL数据库名  
$mysql_username = "root";//MySQL帐号  
$mysql_password = "";//MySQL密码  
$disk_max = "90";//磁盘分区使用百分比超过此值,则报警。默认为90%  
$disk_sendmail_interval = "43200";//如果同一台服务器连续报警,设置每隔多少秒发送一次报警邮件。默认为43200秒,即12小时。  
$swap_max = "50";//Swap交换空间使用百分比超过此值,则报警。默认为50%  
$email = "servmon@sina.com";//管理员邮箱  
//--------------------------------------------  
  
//密码验证  
if (htmlspecialchars($_POST["password"]) != $password)  
{  
    echo "数据传输验证密码错误!\n";  
    exit();  
}  
  
//磁盘分区报警(分区使用率超过90%后会发邮件报警)  
if (htmlspecialchars($_POST["menu"]) == "diskstat")  
{  
    $is_send_mail = "0";//是否发邮件,0为不发邮件  
    $date = htmlspecialchars($_POST["date"]);  
    $ip = htmlspecialchars($_POST["ip"]);  
    $data = htmlspecialchars($_POST["data"]);  
    $subject = "[系统监控]_磁盘分区空间不足_" . $ip;  
    $message = "服务器监控系统 ServMon V1.0\r\n";  
    $message = $message . "-------------------------------------------------------\r\n";  
    $message = $message . "报警服务器:" . $ip . "\r\n";  
    $message = $message . "-------------------------------------------------------\r\n";  
    $message = $message . "报警时间:" . $date . "\r\n";  
    $message = $message . "-------------------------------------------------------\r\n";  
    $message = $message . "报警内容:\r\n";  
    $headers = 'From: ServMon ' . "\r\n" .  
        'Reply-To: ServMon ' . "\r\n" . 'X-Mailer: PHP/' . phpversion();  
    $arr1 = explode(";", $data);  
    foreach ($arr1 as $key1 => $value1)  
    {  
        $arr2 = explode(":", $value1);  
        if ($arr2[0] != "" && $arr2[1] != "" && $arr2[1] >= $disk_max)  
        {  
            $message = $message . "●磁盘分区 " . $arr2[0] . " 空间不足(空间使用率达到" . $arr2[1] . "%)\r\n";  
            $is_send_mail = "1";//是否发邮件,1为发送邮件  
        }  
    }  
    if ($is_send_mail == "1")  
    {  
        $connect = mysql_connect($mysql_server, $mysql_username, $mysql_password);  
        $select = mysql_select_db($mysql_db, $connect);  
        $select_result = mysql_query("SELECT date FROM tb_diskstat WHERE ip='" . $ip .  
            "' LIMIT 1");  
        $rs = mysql_fetch_array($select_result);  
        $interval = date("U") - $rs["date"];  
        if ($interval >= $disk_sendmail_interval)  
        {  
            if (mail($email, $subject, $message, $headers))  
            {  
                echo "已成功发送报警邮件!\n";  
            }  
            else  
            {  
                echo "发送报警邮件失败!\n";  
            }  
            $insert_result = mysql_query("REPLACE INTO tb_diskstat (ip, date) VALUES ('" . $ip .  
                "', '" . date("U") . "');");  
        }  
        else  
        {  
            if ($disk_sendmail_interval >= 3600)  
            {  
                $disk_sendmail_interval_text = $disk_sendmail_interval / 3600 . "小时";  
            }  
            else  
            {  
                $disk_sendmail_interval_text = $disk_sendmail_interval . "秒";  
            }  
            echo "已发送过报警邮件," . $disk_sendmail_interval_text . "内不再重复发送!\n";  
        }  
  
    }  
    else  
    {  
        echo "磁盘分区空间足够,无须发送报警邮件!\n";  
    }  
    exit();  
}  
  
//Swap交换空间报警(Swap交换空间使用率超过60%后会发邮件报警)  
if (htmlspecialchars($_POST["menu"]) == "swapstat")  
{  
    $is_send_mail = "0";//是否发邮件,0为不发邮件  
    $date = htmlspecialchars($_POST["date"]);  
    $ip = htmlspecialchars($_POST["ip"]);  
    list($total, $used, $free) = split(":", htmlspecialchars($_POST["data"]));  
    $percentage = round($used / $total * 100, 0);  
    $subject = "[系统监控]_Swap交换空间使用率高达" . $percentage . "%_" . $ip;  
    $message = "服务器监控系统 ServMon V1.0\r\n";  
    $message = $message . "-------------------------------------------------------\r\n";  
    $message = $message . "报警服务器:" . $ip . "\r\n";  
    $message = $message . "-------------------------------------------------------\r\n";  
    $message = $message . "报警时间:" . $date . "\r\n";  
    $message = $message . "-------------------------------------------------------\r\n";  
    $message = $message . "报警内容:\r\n";  
    $headers = 'From: ServMon ' . "\r\n" .  
        'Reply-To: ServMon ' . "\r\n" . 'X-Mailer: PHP/' . phpversion();  
    $arr1 = explode(";", $data);  
    foreach ($arr1 as $key1 => $value1)  
    {  
        $arr2 = explode(":", $value1);  
        if ($arr2[0] != "" && $arr2[1] != "" && $arr2[1] >= $disk_max)  
        {  
            $message = $message . "●磁盘分区 " . $arr2[0] . " 空间不足(空间使用率达到" . $arr2[1] . "%)\r\n";  
            $is_send_mail = "1";//是否发邮件,1为发送邮件  
        }  
    }  
    if ($percentage >= $swap_max)  
    {  
        $message = $message . "●Swap交换空间使用率高达" . $percentage . "%,若继续增加到100%可能会导致服务器死机。\r\n";  
        $message = $message . "●Swap交换空间总量:" . $total . " MB\r\n";  
        $message = $message . "●Swap交换空间使用:" . $used . " MB\r\n";  
        $message = $message . "●Swap交换空间剩余:" . $free . " MB\r\n";  
        $is_send_mail = "1";//是否发邮件,1为发送邮件  
    }  
    if ($is_send_mail == "1")  
    {  
        if (mail($email, $subject, $message, $headers))  
        {  
            echo "已成功发送报警邮件!\n";  
        }  
        else  
        {  
            echo "发送报警邮件失败!\n";  
        }  
    }  
    else  
    {  
        echo "Swap交换空间使用率不高,无须发送报警邮件!\n";  
    }  
    exit();  
}  
?>

文章来源:http://blog.s135.com/post/276/
20 May
Tags:
  Squid是一个缓存Internet数据的高性能代理服务器软件。当一个用户想要访问一个网页或下载一个文件时,会首先向Squid发出访问请求,由Squid代替其进行网页或文件下载,Squid在把该网页或文件传给用户的同时会在本机保留一个缓存备份。当别的用户访问同样的网页时,Squid会把保存的网页备份立即传给用户,使用户觉得速度相当快,同时也降低了后端数据来源Web服务器的压力。Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS协议,暂不能代理POP3、NNTP等协议。Squid可以工作在很多操作系统中,如AIX、Digital、Unix、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。

  目前Squid已经在新浪、搜狐、网易、腾讯等各大门户网站广泛使用,成为必不可少的服务器软件之一。

  《Squid中文权威手册》由Squid创始人 Duane Wessels 所著的英文版《Squid: The Definitive Guide》翻译而来,其译者曾在新浪、网易工作过。

  在线版:http://blog.s135.com/book/squid/ (便于阅读与查询)

  PDF版:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=1998985 (排版规范,可下载后打印出来看)
19 May
搜索、照片、音乐、视频、混搭式应用(Mash-Ups)、维基(Wiki)、网络日志(Blog)、社区,还有那些来自各地展示天堂般美景的高清 晰图片——它们一起构成了Web2.0 热潮的丰富内容。但是对于正在成长的新一代Web服务来说,最重要的也许不是内容,而是通过浏览器窗口,让用户获得更有趣的体验。

要在这个Web世界里占有一席之地,你需要把握创建交互式网站的诀窍。而此类成功网站背后的诀窍和业务模式又是什么呢?

商界和技术领域的领袖们,包括亚马逊公司(Amazon.com,下称亚马逊)的杰夫·贝佐斯(Jeff Bezos)、微软公司(Microsoft,下称微软)的雷·奥奇(Ray Ozzie)和黛博拉·克拉帕蒂(Debra Chrapaty)、谷歌公司(Google,下称谷歌)的埃里克·施密特(Eric Schmidt)、Salesforce.com公司的马克·贝尼奥夫(Marc Benioff)和Skype公司的尼可拉斯·詹斯特罗姆(Niklas Zennstrom)最近在旧金山(San Francisco)共同探讨了Web新应用的未来。我们知道:Web2.0 需要全新的软件和服务器架构,以及不同以往的IT基础设施。下文将从6个方面分别讨论相关的核心话题:规模、内容管理、安全、开发技术、用户体验与社区。

规模效应

极少有人在网站上线不久就期待迎来百万或千万级别的访问量。但事情真的就这样发生了。根据互联网流量测量机构comScore Networks的数据显示,YouTube网站从一年前的十几万访问量上升到2006年9月的2,000多万次美国独立访问量(Unique Visitor)。

对多数网站来说,网络和IT架构其实并不如你想的那么重要。没错,没有可扩展和可用的IT资源,就谈不上业务——这是Web2.0公司共同的起步资 本,而不是将他们加以区分的个性化资源。尽管谷歌视频(Google Video)背后有成熟和强劲的技术架构,YouTube公司却超越了它,赢得了大量终端用户的支持,最后迫使谷歌购并了这个曾经的竞争对手。当然,基础 架构只是赌注。要稳操胜券还需拥有更多:创意、社区活力和独特的魅力等。

实际上,Web2.0 初创公司在开始阶段并不一定需要拥有自己的数据中心。在线零售商亚马逊就把自己的基础架构服务分割成小块,销售给一些需要强劲运算能力支持的初创公司。亚 马逊网络服务公司(Amazon Web Services)负责产品管理和研发人员关系的副总裁亚当·塞利普斯凯(Adam Selipsky)认为,尽管架构里的东西——比如服务器、操作系统、数据库软件、网络连接等都非常关键,但是对于用户体验而言却没有增加任何新内容。塞 利普斯凯指出,这些基础架构的东西可能会非常耗资源:公司需要投入70%的资源在搭建和维护自己的IT基础架构上。

与第一次Web扩张热潮不同,那时候大家都把购买上百万美元的服务器和迅速扩张奉为无上真理,而现在的2.0初创公司却不会纠缠于这些与运算能力有 关的底层部件。在线图片共享网站SmugMug的首席执行官(CEO)兼共同创始人唐·麦卡吉尔(Don MacAskill)表示:“我们当然不会认为底层数据中心是我们业务或价值定位的核心。”SmugMug公司采用亚马逊的S3存储服务,该服务通过存储 管理软件连接一个庞大的存储设备阵列,这样可以提升SmugMug公司内部的IT架构。

“这很简单,因为亚马逊为我们完成在多个数据中心和存储介质之间复制文件的复杂工作,”SmugMug公司总裁兼共同创始人克里斯·麦卡吉尔 (Chris MacAskill)认为。

SmugMug公司只有18位员工,却处理着18万付费用户和1.15亿张图片。“我们认为自己的价值定位是用户体验,” 唐·麦卡吉尔总结道,“这包括我们的Web用户界面和客户服务。”

麦卡吉尔认为,扩展客户服务也许比扩展服务器更困难。SmugMug公司在硅谷一个数据中心刚好与YouTube公司比邻,而两家公司都面临着同样 的基础架构挑战,如服务器、冗余与自愈型文件系统,他评论道:“如果我们不选择现成的商业化产品,而打算自己发明轮子,那实在有点犯傻。”

很多基础架构组成单元都有现成商品。根据在线视频编缉网站Eyespot的共同创始人兼首席技术官(CTO)大卫·杜达斯(David Dudas)介绍,这些现成商品中包括:价格便宜,但是功能强劲的英特尔(Intel)芯片服务器;由多个供应商提供的,并且价格比几年前大大降低的带宽 资源;廉价而且更节省空间的磁盘存储设备;以及开源软件,其中包括免费企业级操作系统(Fedora Linux)、关系型数据库(MySQL)、网络服务器(Apache)和应用框架(Ajax)。

杜达斯分析说,Eyespot公司的优势在于它能把这些零散的产品组合成一个可扩展规模的在线视频编缉平台。“如果你不知道怎样把它们正确地组合在 一起,那些廉价的硬件对你根本没用,当达到5,000万用户门槛时,差劲的架构会使系统发生故障或宕机。”

这的确是一个挑战。其中的一个要点是,把这些IT部件组合在一起,如服务器、数据库、路由器——但它们都能独立于彼此单独扩展。另一个要点是,认识 到不同的媒体服务功能,如流媒体、图片服务、网页服务、数据库等所需要的资源是不同的。

租用数据中心的方式也许只适用于当下。最近互联网排名增长第三位的Metacafe公司共同创始人兼CEO阿里克·泽涅克(Arik Czerniak)认为,到一定时候,“我们也需要建立自己的系统。”comScore Networks数据显示,去年9月Metacafe在全球有1,660万独立用户访问数,和4.92亿页读数。泽涅克认为,“到这种规模,要确保网站顺 畅地运行是一项巨大的技术挑战。”

共同创始人兼首席产品官(CPO)伊亚·赫索格(Eyal Hertzog)表示,Metacafe公司设计自己的软件架构,包括服务、模板库(Template Libraries)、统计评估、版本控制和架构监控等。同时,在线视频网站还依赖网络内容推送公司Limelight Networks公司的服务来缓存文件以提供更高效的访问,并由主机服务提供商RackSpace公司提供主机托管。Metacafe公司使用Lamp (代表Linux、 Apache、MySQL、 PHP等软件)组合软件包。

对Metacafe公司来说,有效的调整意味着原来需要几千台服务器现在则只需要几百台。 泽涅克指出:“如果我们现在还在用起步时的老一套技术,现在我们可能就需要一万台服务器了。”

内容管理

如果你要建一个网站,它包含照片、视频博客和其他用户生成内容(User-Generated Material),你知道该如何应对吗?

对主要目标是产生内容、封装内容、然后推送给几百万用户的网站来说,挑战是找到管理这些文件的最佳方式。Web2.0 公司有可能需要开发自己的产品,因为Web2.0的交互性特点,如标签、评分、上传,在商业化的内容管理系统中支持得并不好。 网页设计公司Adaptive Path公司的用户体验策略总裁兼合伙人杰西·詹姆斯·加勒特(Jesse James Garrett)认为:“可扩展性是用户生成内容中的最大问题。”

加勒特表示,目前已有的内容管理架构不适合Web2.0公司,因为“Web2.0的内容管理定义与软件开发商在开发内容管理系统时想的完全两样。” 大多数企业使用的内容管理系统是为处理文件、电子表单、数据库和其他常规型文件而设计的,它们并没有考虑照片、视频或在线社区的需求。

照片共享网站SmugMug公司的CEO麦卡吉尔表示,他们的网站现在每天新增30万到50万张图片。他认为SmugMug公司的内容管理系统也不 是特别复杂,只是“一点‘胶水’,还不是大量的代码。”他最关心的是从亚马逊S3存储服务那里获得的大容量、万无一失的(Bulletproof)存储数 据,而与这个存储服务一起提供的还有用户友好的管理界面以及亚马逊的技术支持。这些“胶水”代码用来确保文件写操作失败时不会导致数据丢失。

使Web2.0公司的内容管理系统面临更大挑战的原因是他们还需要处理用户生成数据;这些公司做的每件事情都围绕着数据和数据管理。克里斯·麦卡吉 尔解释说,SmugMug公司在保存收到的文件之前,会做大量的工作,如确保图片的色彩空间无误,并提取可用作标题和关键字标签的信息,生成各种大小的复 件以加快显示速度。在这之后,亚马逊会把这些文件复制到多个数据中心和存储服务器上。

对Metacafe公司来说,挑战在于不但要处理大量的视频,还包括用户和研发人员产生的数据。这意味着需要选择合适的内容推送网络、追踪全球各地 的缓存时间、做各种研发工作以记录网页下载和数据库的压力。CEO泽涅克认为:“我们为用户做数据挖掘,返回收集的信息,这中间所牵涉的数据量非常之大, 在这点上Metacafe公司做得的确与众不同。”

该公司在生产和开发环境等各方面都用到了开源软件。首席产品官赫索格证实,公司用Wiki系统管理开发周期,同时用作主要的知识管理工具。“我们把 每个点子和想法都写到Wiki里去,再由公司人员评估和编辑。”他说,“一旦想法获得认可,我们继而为它订立标准、展开设计和编写测试计划。”

无论从哪方面来说,内容管理对Web2.0 公司来说都是困难的。但好消息是人们已在摸索中学习。加勒特指出,在20世纪90年代末期,许多网站碰了壁,因为他们缺乏可扩展性。他说:“过去5年里的 行业经验让我们获益良多,我们知道怎么从一开始就考虑灵活性,设计未来可以服务于庞大受众的系统架构。”

安全

Web2.0 有一个显而易见的特点:它并不比第一波网络热潮来得更安全。

Web2.0公司纷纷采用互动技术,他们会发现在更好地吸引和留住用户的同时,也把更大的风险带入了防火墙之内。

使用JavaScript的Ajax 开发者可以创建在访问者浏览器窗口里自动执行的程序。多种脚本语言都可在浏览器端执行并向服务器发出恶意代码,而JavaScript不过是其中最著名的 一种。其他脚本语言还包括微软的Visual Basic、以及微软开发的与JavaScript相对应的ECMAScript。另外还包括奥多比系统公司(Adobe)的 ActiveScript(另一种ECMAScript风格的脚本),它可以在浏览器窗口通用的Flash播放器里运行,而98%~99%的互联网用户都 安装了这种播放器。

Ajax的一个组成部分是异步JavaScript,它是谷歌地图(Google Maps)应用的幕后功臣。谷歌地图可追踪用户光标在地图网格上的位置并把信息发回服务器。实际上,JavaScript程序是在告诉服务器,“用户正指 向北方。请返回更多他当前位置往北的数据。”

这种互动功能一直是个潜在威胁,因为尽管可以减轻危害,但却不可能完全根除它。对缺乏经验而意识不到自己的程序会出问题的程序员来说,经过培训也只 能做到缩减危害。因为Ajax应用程序可以在服务器端和浏览器里运行许多脚本代码,令黑客有可乘之机,攻击与应用程序通信的数据库。

即使经验丰富的程序员也可能中招。一年前,社交网络网站MySpace上存放着一位叫Samy的新用户的个人主页。在他提交的信息里有一个隐藏的 JavaScript蠕虫,它可以感染任何访问Samy空间的MySpace用户的浏览器,并把这段代码复制到该访问者的个人主页里。某种程度上,这纯粹 是场玩笑:Samy的目标是把“Samy是我的大英雄”这段文字复制到尽可能多的MySpace用户的“英雄”分类里。

感染开始迅速传播。在20小时内,这个JavaScript蠕虫已经感染了上百万MySpace用户。随着感染的增加,这个蠕虫引起的人为流量使 MySpace服务器陷于崩溃。MySpace谢绝就此事进行评论,但据Blog媒体Slashdot报道,该公司不得不临时关闭网站以清除感染。

这是为什么Web2.0 开发者必须从一开始就考虑安全问题的其中一个例子。Web2.0 技术的一个大危险在用户从表单或数据字段里提交回复时,开发者可能需要的是某个特定的输入,如名字或邮编,但很少有网站会仔细校验用户的输入。安全软件公 司SPI Dynamics公司的研发经理布赖恩·沙利文(Bryan Sullivan)评论说,“在客户端,你没法控制真正输入的内容。主导权全在用户手里。”

美国加州大学伯克利分校(University of California, Berkeley)计算机科学系的助教大卫·瓦格纳(David Wagner)警告说,可能有1,001种方式在HTML页面中隐藏JavaScript代码,比如在Wiki、MySpace、Yahoo Mail这类型的网站里。“但即使你拦截了其中1,000种,你还是可能会倒霉,”瓦格纳认为,“坏人更有优势。”

2005年春天,Yahoo的网页邮件(Web Mail)服务器就被一个用户上传的Yamanner蠕虫入侵了。如果一个懂行的用户在地址栏里输入一个SQL语句,这个语句就可以在服务器上可用的数据 库里得以执行。这种花招就叫SQL注入攻击。如果一个MySpace用户在自己的MySpace服务器上的网页里加入JavaScript蠕虫,蠕虫就可 以在访问者的浏览器窗口里执行。MySpace已经采取措施阻止会自我克隆的Samy蠕虫,但恶意程序的作者们下次肯定会尝试其他的方法。

不像以前的病毒,Samy蠕虫与操作系统无关。作为一种与网页相关的技术,Ajax不依赖于平台,而这也催生了一个跨平台蠕虫。无论苹果公司 (Apple)的Mac电脑、Linux工作站还是Windows PC都可以触发它。它默默地在后台窃取用户的信息,不会出现任何警告信息提示用户系统被感染了,而且还会继续感染他人。沙利文警告说:“想象一下,如果银 行网站上有Ajax蠕虫,那会是怎样的情景。”

轻量级开发

快速变更是Web2.0的一个标志性特点。网站可以非常迅速地添加和去除功能,有时候简直就是一天一个样。而一个固定的尺码肯定不适合所有的人。 Web2.0网站必须具有高度的可适应性,以适应用户常变的兴趣,对研发人员来说,轻量级的开发工具能帮上大忙。

两个受欢迎的选择是Ruby和Flash,与Ajax类似。Ajax是个轻量级的,基于浏览器的JavaScript和XML组合,已在谷歌地图和 其他许多互动网站里得到应用。Ruby和Flash这两种网站工具不像Ajax技术那么新,它们已有成熟的工具集支持。

传媒咨询公司Backchannelmedia公司就用 Ruby on Rails工具开发自己的网站,这是一套使用轻量级编程语言Ruby开发的专用网站平台。该网站为客户提供庞大的电视广告收视率数据库的快速访问。广告商 可以根据电视观众打到800免费电话的下单时间,结合当时不同地域投放电视广告的内容,来获知广告效果。

Backchannelmedia公司的首席信息官(CIO)玛德琳·诺兰德(Madeleine Noland) 表示,公司的25名员工里,有熟悉Java、Visual Studio .Net、Ruby和PHP技术的,一年多前他们决定重新设计客户交互服务,即电视直销(DRTV)研究时,最后选择了Ruby on Rails工具。 技术主管杰森?托伊(Jason Toy)证实这个服务只花了2个月就完成了,而如果选择Java则可能要花上9个月的时间。Ruby on Rails工具的代码量只有Java的十分之一。这个服务每天要添加250万条广告数据到数据库中,并根据用户请求提供上百万次不同的网页查询结果。

此外,耐克网上商店(NikeStore)是用Adobe系统(Adobe Systems)的Flash技术搭建的又一个交互式网站,Flash是可在浏览器窗口运行ActionScript脚本的多媒体引擎(该技术由 Adobe从Macromedia公司购并),提供最新的购物互动体验。例如,访问者的光标移向标题的“男装”或“童装”位置,就会显现相关产品的下拉菜 单。而点击选中的货品,则会弹出一个新窗口,可展示不同颜色的同一产品和其他相关产品。改变就在瞬间发生,所在的页面无需重新加载。

用户体验

Web2.0 一个最大的挑战是如何定义和提高用户体验。谷歌用一个简洁、可快速加载的网页,展示了在搜索上可以做到多么与众不同。然而其他网页臃肿、速度缓慢的网站 ——比如MySpace——也仍然大获成功。成功的秘诀关键在于让用户感到惊喜和愉悦,在他们需要的功能以外,还提供连他们自己都未意识到会需要的功能。

极少有公司花在提高线上用户体验的时间比微软的MSN网站更多,它从1995年开始提供在线内容业务,至今仍然是互联网上最受欢迎的网站之一。但下 载音乐的人们会选择iTunes,而不会有选择微软的冲动,也没有类似iPod的产品制造者来和微软签订合作协议。人们会说去“Google”一下信息, 但不会说“MSN”一下信息。另外也是谷歌地图和谷歌地球(Google Earth),而不是微软的虚拟地球(Virtual Earth)在地图定位和寻址上获得更多认可。所以到目前为止,显然微软网站还不太入引领潮流的年轻一代的法眼。

认识到这些问题,微软正计划一场Web革新。微软公司计划在这个财政年度花费5亿美元在互联网搜索引擎和其他可与谷歌和雅虎竞争的软件研发上。这个 投资计划里还包括一个新的数据中心,以支撑将来的家用型和商业软件。此外的产品包括新的Zune音乐播放器和音乐销售网站。微软的在线地图软件——搜索功 能广受好评的一个应用——也推出了较大的升级,把地图转换成赏心悦目的3D图像。

微软会用什么技术来提高虚拟地球的用户体验呢?我们可以从2006年早些时候的两项购并里一窥端倪。微软购并了Vexcel公司,该公司的 Photogrammetry技术可以通过航拍照片创建出城市和乡村的3D图像。微软还购并了Massive公司,这家软件公司的技术允许赞助商把广告插 入视频游戏里去。像谷歌和雅虎的地图软件一样,微软已经把虚拟地图的应用编程接口(API)授权给Best Buy、Expedia等公司。这样可以允许合作伙伴为这些应用注入自己的创新——毫无疑问这是十足的Web2.0特色。

谷歌去年年底发布了新版本的谷歌地球,也加入了一些新花样。包括来自发现网络公司(Discovery Networks)和国家地理杂志(National Geographic)对一些世界著名景点的描述、国家公园服务的扎营地点和旅游线路的信息,还提供把自己飞越谷歌地球上空时的影像录制成高清电视 (HDTV)的功能。这些功能呈现的前所未见景象,都可能会令用户眼前一亮。在这场对峙中,快速、细节和趣味性最为重要。

社区

Web2.0里最引人瞩目的一方面就是社区概念。从Web的初始阶段开始,大家都认可的一个观念就是,成功的网站需要锁定一批稳定的社区用户,他们 有共同的兴趣、乐于讨论和争辩、积极分享自己的音乐、照片、代码和观点。就在2006年10月底,谷歌购并了硅谷初创公司JotSpot公司,该公司用 Wiki软件让用户分享电子表单、日历和相册。

但在线社区也是一个令人困惑的概念。他们很少像这个词的表面含义那样意味着“我们都在这里”。奥莱利传媒公司(O’Reilly Media)首席执行官(CEO)蒂姆·奥莱利(Tim O’Reilly)在Web2.0 大会上直言不讳地说:“我讨厌‘社区’这个词,人们常用这个词来逃避认真思考什么是Web最核心的概念。”奥莱利传媒公司和 《InformationWeek》母公司CMP集团共同召开了Web2.0 大会。

在奥莱利的观点里,一些最成功的社区型网站实际上与人们印象中的和谐型互联网的分享想法可能完全背道而驰。比如在亚马逊鼓励下,其用户贡献了百万条 书评、乐评和产品评论等,这是在极力赚取用户的集体智慧(其中还包括许多的俏皮话)。“他们不断压榨用户,”奥莱利指出。亚马逊还是一个社区网站吗?

在线社区通常为用户提供交谈、分享和彼此联系的功能——但是最后对网站的业务模式却没有什么帮助。奥莱利认为这就是问题的关键。

以Flickr网站为例,这个雅虎旗下的照片共享网站非常受欢迎。分享照片是很不错,但Flickr网站充分利用了照片的单向链接,所以我可以看到 你的照片,而你却不知道我在看。这里面几乎没有交流可言。另一个非常受欢迎的网站是由用户驱动的Craigslist,但只是以本人的兴趣为中心,你回应 我的广告,而我受惠。

MySpace把社区的概念转化成了真金白银,但绝大多数模仿它的网站都失败了。甚至维基百科(Wikipedia)乌托邦式的理想是收集、编辑与 传播全球的知识,现在其实也是被一群核心作者主导着。

“真正的问题在于,用户可以为你的事业做出什么贡献?”奥莱利说道,“社区只不过是2.0大局里的一小部分。”
19 May
这里的大型网站架构只包括高互动性高交互性的数据型大型网站,基于大家众所周知的原因,我们就不谈新闻类和一些依靠HTML静态化就可以实现的架构 了,我们以高负载高数据交换高数据流动性的网站为例,比如海内,开心网等类似的web2.0系列架构。我们这里不讨论是PHP还是JSP或者.NET环 境,我们从架构的方面去看问题,实现语言方面并不是问题,语言的优势在于实现而不是好坏,不论你选择任何语言,架构都是必须要面对的。

这里讨论一下大型网站需要注意和考虑的问题

1、海量数据的处理

众所周知,对于一些相对小的站点来说,数据量并不是很大,select和update就可以解决我们面对的问题,本身负载量不是很大,最多再加几个 索引就可以搞定。对于大型网站,每天的数据量可能就上百万,如果一个设计不好的多对多关系,在前期是没有任何问题的,但是随着用户的增长,数据量会是几何 级的增长的。在这个时候我们对于一个表的select和update的时候(还不说多表联合查询)的成本的非常高的。

2、数据并发的处理

在一些时候,2.0的CTO都有个尚方宝剑,就是缓存。对于缓存,在高并发高处理的时候也是个大问题。在整个应用程序下,缓存是全局共享的,然而在 我们进行修改的时候就,如果两个或者多个请求同时对缓存有更新的要求的情况下,应用程序会直接的死掉。这个时候,就需要一个好的数据并发处理策略以及缓存 策略。

另外,就是数据库的死锁问题,也许平时我们感觉不到,死锁在高并发的情况下的出现的概率是非常高的,磁盘缓存就是一个大问题。

3、文件存贮的问题

对于一些支持文件上传的2.0的站点,在庆幸硬盘容量越来越大的时候我们更多的应该考虑的是文件应该如何被存储并且被有效的索引。常见的方案是对文 件按照日期和类型进行存贮。但是当文件量是海量的数据的情况下,如果一块硬盘存贮了500个G的琐碎文件,那么维护的时候和使用的时候磁盘的Io就是一个 巨大的问题,哪怕你的带宽足够,但是你的磁盘也未必响应过来。如果这个时候还涉及上传,磁盘很容易就over了。

也许用raid和专用存贮服务器能解决眼下的问题,但是还有个问题就是各地的访问问题,也许我们的服务器在北京,可能在云南或者新疆的访问速度如何 解决?如果做分布式,那么我们的文件索引以及架构该如何规划。

所以我们不得不承认,文件存贮是个很不容易的问题

4、数据关系的处理

我们可以很容易的规划出一个符合第三范式的数据库,里面布满了多对多关系,还能用GUID来替换INDENTIFY COLUMN 但是,多对多关系充斥的2.0时代,第三范式是第一个应该被抛弃的。必须有效的把多表联合查询降到最低。

5、数据索引的问题

众所周知,索引是提高数据库效率查询的最方面最廉价最容易实现的方案。但是,在高UPDATE的情况下,update和delete付出的成本会高 的无法想想,笔者遇到过一个情况,在更新一个聚焦索引的时候需要10分钟来完成,那么对于站点来说,这些基本上是不可忍受的。

索引和更新是一对天生的冤家,问题A,D,E这些是我们在做架构的时候不得不考虑的问题,并且也可能是花费时间最多的问题,

6、分布式处理

对于2.0网站由于其高互动性,CDN实现的效果基本上为0,内容是实时更新的,我们常规的处理。为了保证各地的访问速度,我们就需要面对一个绝大 的问题,就是如何有效的实现数据同步和更新,实现各地服务器的实时通讯有是一个不得不需要考虑的问题。

7、Ajax的利弊分析

成也AJAX,败也AJAX,AJAX成为了主流趋势,突然发现基于XMLHTTP的post和get是如此的容易。客户端get或者post 到服务器数据,服务器接到数据请求之后返回来,这是一个很正常的AJAX请求。但是在AJAX处理的时候,如果我们使用一个抓包工具的话,对数据返回和处 理是一目了然。对于一些计算量大的AJAX请求的话,我们可以构造一个发包机,很容易就可以把一个webserver干掉。

8、数据安全性的分析

对于HTTP协议来说,数据包都是明文传输的,也许我们可以说我们可以用加密啊,但是对于G问题来说的话,加密的过程就可能是明文了(比如我们知道 的QQ,可以很容易的判断他的加密,并有效的写一个跟他一样的加密和解密方法出来的)。当你站点流量不是很大的时候没有人会在乎你,但是当你流量上来之 后,那么所谓的外挂,所谓的群发就会接踵而来(从qq一开始的群发可见端倪)。也许我们可以很的意的说,我们可以采用更高级别的判断甚至HTTPS来实 现,注意,当你做这些处理的时候付出的将是海量的database,io以及CPU的成本。对于一些群发,基本上是不可能的。笔者已经可以实现对于百度空 间和qq空间的群发了。大家愿意试试,实际上并不是很难。

9、数据同步和集群的处理的问题

当我们的一台databaseserver不堪重负的时候,这个时候我们就需要做基于数据库的负载和集群了。而这个时候可能是最让人困扰的的问题 了,数据基于网络传输根据数据库的设计的不同,数据延迟是很可怕的问题,也是不可避免的问题,这样的话,我们就需要通过另外的手段来保证在这延迟的几秒或 者更长的几分钟时间内,实现有效的交互。比如数据散列,分割,内容处理等等问题

10、数据共享的渠道以及OPENAPI趋势

Openapi已经成为一个不可避免的趋势,从google,facebook,myspace到海内校内,都在考虑这个问题,它可以更有效的留住 用户并激发用户的更多的兴趣以及让更多的人帮助你做最有效的开发。这个时候一个有效的数据共享平台,数据开放平台就成为必不可少的途径了,而在开放的接口 的情况保证数据的安全性和性能,又是一个我们必须要认真思考的问题了。
分页: 7/174 第一页 上页 2 3 4 5 6 7 8 9 10 11 下页 最后页 [ 显示模式: 摘要 | 列表 ]