圖蟲的服務器長期是單機運行。估計除了mysql之外,php-fpm和redis還可以在單機上共存很長時間。(多說服務器早就達成了單機每日2000萬+動態請求,所以我對單機搞定圖蟲的大流量非常樂觀)
如果是單機服務,其實就不需要用IP哪怕是127.0.0.1這樣的IP去連接mysql/redis/php了,因爲即使是127.0.0.1也是要走TCP/IP層的。
unix提供的unix socket來實現單機的端口訪問,很多文章提到用unix socket可以提升連接速度。
我簡單測試了一下,200次redis請求的耗時38ms,如果改成unix socket方式,立刻降到27ms。這簡直是立竿見影啊,10ms的差距足以讓我們有動力把IP方式改成unix socket方式。
Mysql(PDO)啓用unix socket的方法
1.在PDO的DSN裏面:原來寫host:xxx,改成unix_socket:/var/run/mysqld/mysqld.sock (當然你可以在my.cnf裏面設置成別的)
2.給mysql的用戶名@localhost,設置訪問權限。由於unix_socket並不是主機,所以用unix socket方式連接mysql,mysql會強制認爲用戶是來自於localhost,所以一定要給username@localhost設置權限,而不是username@’%’
redis(phpredis)啓用unix socket的方法
1.redis 默認沒有開啓unix socket,需要在/etc/redis/redis.conf中修改。注意unixsocketperm 777
unixsocket /var/run/redis/redis.sock unixsocketperm 777
2.用phpredis連接:
$redis->connect('/var/run/redis/redis.sock')
nginx + php-fpm啓用unix socket的方法
1.php-fpm 的pool配置文件中:
listen = /var/run/php5-fpm.sock;
2.nginx sites的配置文件中:
fastcgi_pass unix:/var/run/php5-fpm.sock;
由於redis連接次數很多,因此redis使用unix socket的效果最明顯,mysql其次,php基本上沒有用不用sock都差不多