用unix socket加速php-fpm、mysql、redis的連接

圖蟲的服務器長期是單機運行。估計除了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都差不多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章