Apr 12

做个笔记.

# nginx.conf

server {
    listen 8080 ;
    server_name localhost;

    location / {
        root           /home/work/htdocs;
        expires 1d;
        autoindex on;
        index  index.php index.html;
    }
    location ~* \.php$ {
        root           /home/work/htdocs;
        fastcgi_pass   127.0.0.1:30000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /home/work/htdocs/$fastcgi_script_name;
        client_max_body_size       100m;
        include        fastcgi_params;
        fastcgi_connect_timeout 1000s;
        fastcgi_send_timeout 1000s;
        fastcgi_read_timeout 1000s;
    }
}

# nginx.sh ngix 启动脚本

#!/bin/sh
case "$1" in
    'start')
        sudo /usr/local/nginx/sbin/nginx -s start
        ;;
    'stop')
        sudo /usr/local/nginx/sbin/nginx -s stop
        ;;
    'restart')
        sudo /usr/local/nginx/sbin/nginx -s reload
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
    ;;
esac

# spaw-php.sh php-cgi 启动脚本
#!/bin/sh
dir=`dirname $0`
PID_FILE=/home/work/htdocs/spaw-php.pid
PHP_FCGI="/home/work/php/bin/php-cgi -f /home/work/htdocs/php.ini"

case "$1" in
    'start')
        spawn-fcgi -C 3 -p 30000 -f "$PHP_FCGI" -P $PID_FILE
        ;;
    'stop')
        kill `cat $PID_FILE`
        ;;
    'restart')
        kill `cat $PID_FILE`
        spawn-fcgi -C 3 -p 30000 -f "$PHP_FCGI" -P $PID_FILE
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
    ;;
esac

Written by ideawu at 2012-04-12 15:52:17

Apr 08

中国足球技术不差吗? 战绩不丢人吗? 球员不猥琐吗? 假球不普遍吗? 足球官员不腐败吗? 中国足球不是十几年没有任何进步吗? 为什么还是有无数的人喜欢和支持?

你对中国足球嗤之以鼻, 你对中国足球怒其不争, 你用尽所有脏话污辱中国足球(中国的球员, 教练, 官员, 观众), 这确实是他们应得的. 但是, 你能说球场看台上那些花了钱进场欢呼呐喊, 一会儿喜极而泣, 一会儿唉声叹气, 一会儿激动不已的球迷, 这些一个个鲜活的脸, 都不是真实的吗?

你能说中国足球骗了一批又一批刚长大或者还未长大的无知小孩, 你安慰自己这些人很快就会识破的中国足球垃圾和狗屎的本质, 但是, 中国足球(包括有中国球员参与的)的赛场看台上的观众和电视机前衷心的观众全部都是毛头小孩吗? 那些十几年如一日地发自内心地支持中国足球的球迷, 他们真的是愚蠢到了极点了吗?

当某人嘲讽了中国足球的某支联赛球队, 立即便有成千上万的该俱乐部的忠实球迷出来对嘲讽的人进行人身攻击, 极尽恶毒的语言, 难道你能说, 对于垃圾的中国足球及其所有甲A球队 — 当然他们也都是垃圾和狗屎 — 任何人都有权污辱他们吗? 那些狂热的球迷他们真挚的感情难道不是应该值得敬畏的吗?

Written by ideawu at 2012-04-08 02:23:04

Apr 06

我收集到一些文章和视频, 可以带你窥探 Facebook 的架构. Facebook 承载了几十亿的用户, 它的架构(包括思想和实现)是非常值得参考的. 当然, 你要小心不要照搬 Facebook 的每一字一句, 因为任何思想和实现都是有自己的应用场景的.

Written by ideawu at 2012-04-06 13:17:22

Mar 24

write

ssize_t write(int fd, const void *buf, size_t count);

将数据写到文件中. 注意, 如果文件是保存在硬盘中, write() 函数调用返回之后, 并不表示数据已经写入到硬盘中, 这时如果掉电, 数据可能会丢失.

fsync

int fsync(int fd);

程序调用本函数, 通知内核把数据写到硬盘(file)中. 比如, 你开发一个数据库软件, 就需要这样的函数, 否则掉电或者系统崩溃时便会丢失数据.

如果你的程序不调用 fsync(), Linux 内核也会自动在”合适”的时候将你的数据真正写入到硬盘(类似调用 fsync), 最长的延时默认是 30 秒.

阻塞

阻塞是 IO 的精华所在, 不管是文件 IO 还是网络 IO, 只有真正了理解了 IO 阻塞, 才能做出所谓在高并发高性能软件(服务器).

当 fsync() 和 write() 同一个 fd 时, write() 必然阻塞. 当系统 IO 非常繁忙时, fsync() 可能会阻塞, 即使系统 IO 不繁忙, fsync() 也会因为数据量大而慢.

注: 许多 Linux 系统函数如 read(), write() 等, 粗看起来很简单, 也很容易用. 正如所有的事情一样, 要做到精致肯定不简单. 当你脱离初级的学习阶段, 要写真正生产环境的软件时, 这些”简单”的函数就大有门道了. 你需要不断的阅读它们的手册, 了解每一个参数, 每一个返回值, 同时还要阅读和试验在各种条件和环境下这些函数的表现, 这样, 才有可能做出真正的软件.

Written by ideawu at 2012-03-24 16:14:19 | tags: ,

Mar 23

Redis 是一个性能非常高效的内存 Key-Value 存储服务, 同时它还具有两个非常重要的特性: 1. 持久化; 2. Value 数据结构. 这两个特性让它在不少场景轻松击败了 Memcached 和 Casandra 等.

Redis 的持久化在两种方式: Snapshotting(快照) 和 Append-only file(aof). 在一个采用了 aof 模式的 Redis 服务器上, 当执行 bgrewriteaof 对 aof 进行归并优化时, 出现了 Redis 被阻塞的问题, 此时, Redis 无法提供任何读取和写入操作.

按字面理解, bgrewriteaof 是在后台进行操作, 不应该影响 Redis 的正常服务. 原理也确实是这样的, Redis 首先 fork 一个子进程, 并在该子进程里进行归并和写持久化存储设备(如硬盘)的. 按照正常逻辑, 在一台多核的机器上, 即使子进程占满 CPU 和硬盘, 也不应该导致 Redis 服务阻塞啊!

其实, 问题就出在硬盘上.

Continue reading »

Written by ideawu at 2012-03-23 13:50:34 | tags: , , , , , , ,

Mar 08

以前偶尔被人问到, 为什么你(和大部分互联网公司)做Web开发要选择PHP, PHP有什么好处. 简单的回答便是”PHP简单,开发快速”.

但是, ASP.NET不简单吗? ASP.NET上手不快吗? Python呢?

有些人用各种PHP框架能快速搭建简单博客的例子来说明PHP的优势, 但这全是狗屎! 实际的业务不可能是博客那么简单.

我认为, PHP的最大优势便是他的数据结构和内置函数, 具体地说便是字符串和数组, 以及字符串和数组的函数.

PHP的字符串既能表示一般文本, 也能表示任意二进制数据, 也就是说, PHP的字符串就是一段内存. PHP的的字符串操作函数囊括了大部分常见和不常见的文本操作: 截取, 查找, 正则, 字符集编码转换…每一个都是一把利器.

PHP的数组是整合了列表和哈希表的数据结构. 由于”树”是最能描述现实世界的数据结构, 而PHP的数组可以(轻松地)表示任意树, 所以, PHP的数组也最能描述现实世界(建模).

如果要用一句话来描述PHP的优势, 我会用这一句:”PHP语言的数据结构和内置函数, 可以几乎直接地描述和处理实际业务. PHP是计算机与现实业务的最直接胶合剂.”

Written by ideawu at 2012-03-08 10:43:18