SlideShare uma empresa Scribd logo
1 de 9
Baixar para ler offline
PHP/NodeJS/Redis项目实战

   恐龙王国事业部 孙政华(@parith)
上期回顾&项目简介



项目地址:http://rc.qzone.qq.com/myhome/100629481
NodeJS 0.6 转 0.8
• 0.8已经出来了,建议转成0.8,因为:
   – 更加稳定
   – 更加快
   – 代码改动不大
   – 过渡可以很平稳

release note:
http://blog.nodejs.org/2012/06/25/node-v0-8-0/


* 我们项目大概会在0.8.1以后转,大家懂得
PHP与NodeJS的通信
• 使用了Redis的Pub/Sub功能进行通信,而不是使用PHP的
  socket功能,因为:
   – 如果达到了maxConnections上限,php发起的socket是
     会被拒绝的,使通信变得不可靠!
   – 对于PHP服务器,在有许多推送的情况下,可能会产生
     很多的socket,如果产生socket的速度(程序没有控
     制好)超过服务器释放连接的速度(TIME_WAIT),这样
     后果就很严重了!!
   – 每一个socket都是宝贵的,还是留给用户吧。

  所以我们采用了Pub/Sub机制!
NodeJS Pub/Sub实现代码
var redis = require("redis"),
    redisSub = redis.createClient();

redisSub.on('ready', function () {
    redisSub.subscribe('channel name');
});

redisSub.on('message', function (channel, message) {
    ...
});

代码没什么好研究的,讲机制啦!
我们是怎样使用Redis的
•   不使用rdb,只使用aof
•   no-appendfsync-on-rewrite yes
•   定期执行BGREWRITEAOF(一天一次)
•   未开启主从复制(相信他的稳定性)

未出现CPU飙高的现象
未出现内存大量占用的现象(别人都在说的
 两倍内存消耗)
未出现写延迟或读延迟的现象
线上运行情况(目前)
• php的CPU消耗有些高
   – 单个php-fpm有时会达到6%(战斗的时候计算量
     很大)
• redis不怎么耗资源,比想象中好
   – CPU:0.1%左右(有排行功能)
   – MEM:136m左右
• NodeJS运行稳定,未宕过(我们有小秘密)
   – CPU:3%左右
   – MEM:521m左右(有对数据的缓存)
展望未来
• 抛弃php,全部使用NodeJS? 需解决的问题:
  – 大计算量应用时的评估
  – 占用大内存量时的评估(存到Buffer里?)
  – 代码更新策略
     • 配置文件更新机制
     • 逻辑代码更新机制
  – ……
自由讨论&谢谢大家

Mais conteúdo relacionado

Mais procurados

高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现ideawu
 
twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1twMVC
 
Windows2003 steup vpn network
Windows2003 steup vpn networkWindows2003 steup vpn network
Windows2003 steup vpn networkexpert-slove
 
twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Eric Xiao
 
课题三:Nginx基础知识
课题三:Nginx基础知识课题三:Nginx基础知识
课题三:Nginx基础知识Liu Allen
 
PHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB ServerPHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB Server志賢 黃
 
twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波twMVC
 
twMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart FactorytwMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart FactorytwMVC
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕ideawu
 
Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹My own sweet home!
 
twMVC#43 YARP
twMVC#43 YARPtwMVC#43 YARP
twMVC#43 YARPtwMVC
 
超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8twMVC
 
华强北商城自动化发布系统
华强北商城自动化发布系统华强北商城自动化发布系统
华强北商城自动化发布系统Rongxing Liu
 
twMVC#41 The journey of source generator
twMVC#41 The journey of source generatortwMVC#41 The journey of source generator
twMVC#41 The journey of source generatortwMVC
 
Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程Simon Su
 
Node.js 淺談socket.io
Node.js   淺談socket.ioNode.js   淺談socket.io
Node.js 淺談socket.ioSimon Su
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Gelis Wu
 
Blog 第二次翻修及搬家施工及公告說明
Blog 第二次翻修及搬家施工及公告說明Blog 第二次翻修及搬家施工及公告說明
Blog 第二次翻修及搬家施工及公告說明立翰 洪
 

Mais procurados (20)

高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现高性能并发网络服务器设计与实现
高性能并发网络服务器设计与实现
 
twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1twMVC#42 Windows容器導入由0到1
twMVC#42 Windows容器導入由0到1
 
Windows2003 steup vpn network
Windows2003 steup vpn networkWindows2003 steup vpn network
Windows2003 steup vpn network
 
twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops)
 
Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出Node.js中间件 connect模块深入浅出
Node.js中间件 connect模块深入浅出
 
课题三:Nginx基础知识
课题三:Nginx基础知识课题三:Nginx基础知识
课题三:Nginx基础知识
 
PHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB ServerPHP 應用之一 socket funion : 偽 WEB Server
PHP 應用之一 socket funion : 偽 WEB Server
 
twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波twMVC#36.NetCore 3快速看一波
twMVC#36.NetCore 3快速看一波
 
twMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart FactorytwMVC#42 Azure IoT Hub for Smart Factory
twMVC#42 Azure IoT Hub for Smart Factory
 
高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕高性能并发Web服务器实现核心内幕
高性能并发Web服务器实现核心内幕
 
Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹Java API for WebSocket 實作介紹
Java API for WebSocket 實作介紹
 
twMVC#43 YARP
twMVC#43 YARPtwMVC#43 YARP
twMVC#43 YARP
 
超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8超。光速 網站最佳化實戰 -twMVC#8
超。光速 網站最佳化實戰 -twMVC#8
 
华强北商城自动化发布系统
华强北商城自动化发布系统华强北商城自动化发布系统
华强北商城自动化发布系统
 
twMVC#41 The journey of source generator
twMVC#41 The journey of source generatortwMVC#41 The journey of source generator
twMVC#41 The journey of source generator
 
Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程
 
Proxmox 5.0
Proxmox 5.0Proxmox 5.0
Proxmox 5.0
 
Node.js 淺談socket.io
Node.js   淺談socket.ioNode.js   淺談socket.io
Node.js 淺談socket.io
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革
 
Blog 第二次翻修及搬家施工及公告說明
Blog 第二次翻修及搬家施工及公告說明Blog 第二次翻修及搬家施工及公告說明
Blog 第二次翻修及搬家施工及公告說明
 

Semelhante a PHP/NodeJS/Redis项目实战

51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundryHong Cai
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介GO LL
 
构建基于Lamp的中型网站架构
构建基于Lamp的中型网站架构构建基于Lamp的中型网站架构
构建基于Lamp的中型网站架构HonestQiao
 
基于架构的开发模式
基于架构的开发模式基于架构的开发模式
基于架构的开发模式thinkinlamp
 
基于架构的开发模式
基于架构的开发模式基于架构的开发模式
基于架构的开发模式samon127
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node jsXuefeng Zhang
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍yczealot
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
MongoDB in SNS
MongoDB in SNSMongoDB in SNS
MongoDB in SNSkidrane
 
Ruby rails分享
Ruby rails分享Ruby rails分享
Ruby rails分享Cam Song
 
LINE Messaging API with LinkIt 7697
LINE Messaging API with LinkIt 7697 LINE Messaging API with LinkIt 7697
LINE Messaging API with LinkIt 7697 CAVEDU Education
 
Hongxing
HongxingHongxing
Hongxingncmooc
 
Web sockets
Web socketsWeb sockets
Web socketsTom Fan
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdfssuserd6c7621
 
深入淺出Node.JS
深入淺出Node.JS深入淺出Node.JS
深入淺出Node.JS國昭 張
 
[圣思园][Java SE]Network
[圣思园][Java SE]Network[圣思园][Java SE]Network
[圣思园][Java SE]NetworkArBing Xie
 
IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》easychen
 

Semelhante a PHP/NodeJS/Redis项目实战 (20)

51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry51 cto下载 51cto信息图:openshift vs cloudfoundry
51 cto下载 51cto信息图:openshift vs cloudfoundry
 
NodeJS基礎教學&簡介
NodeJS基礎教學&簡介NodeJS基礎教學&簡介
NodeJS基礎教學&簡介
 
构建基于Lamp的中型网站架构
构建基于Lamp的中型网站架构构建基于Lamp的中型网站架构
构建基于Lamp的中型网站架构
 
基于架构的开发模式
基于架构的开发模式基于架构的开发模式
基于架构的开发模式
 
基于架构的开发模式
基于架构的开发模式基于架构的开发模式
基于架构的开发模式
 
Full stack-development with node js
Full stack-development with node jsFull stack-development with node js
Full stack-development with node js
 
Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍Nosql七种武器之长生剑 mongodb的使用介绍
Nosql七种武器之长生剑 mongodb的使用介绍
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
MongoDB in SNS
MongoDB in SNSMongoDB in SNS
MongoDB in SNS
 
Ruby rails分享
Ruby rails分享Ruby rails分享
Ruby rails分享
 
LINE Messaging API with LinkIt 7697
LINE Messaging API with LinkIt 7697 LINE Messaging API with LinkIt 7697
LINE Messaging API with LinkIt 7697
 
Micro service
Micro serviceMicro service
Micro service
 
Html5
Html5Html5
Html5
 
Hongxing
HongxingHongxing
Hongxing
 
Web sockets
Web socketsWeb sockets
Web sockets
 
4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf4. Go 工程化实践-0124-v2.pdf
4. Go 工程化实践-0124-v2.pdf
 
深入淺出Node.JS
深入淺出Node.JS深入淺出Node.JS
深入淺出Node.JS
 
Meteor
MeteorMeteor
Meteor
 
[圣思园][Java SE]Network
[圣思园][Java SE]Network[圣思园][Java SE]Network
[圣思园][Java SE]Network
 
IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》IDF2013大会分享——《使用新浪移动云开发全平台应用》
IDF2013大会分享——《使用新浪移动云开发全平台应用》
 

PHP/NodeJS/Redis项目实战

  • 1. PHP/NodeJS/Redis项目实战 恐龙王国事业部 孙政华(@parith)
  • 3. NodeJS 0.6 转 0.8 • 0.8已经出来了,建议转成0.8,因为: – 更加稳定 – 更加快 – 代码改动不大 – 过渡可以很平稳 release note: http://blog.nodejs.org/2012/06/25/node-v0-8-0/ * 我们项目大概会在0.8.1以后转,大家懂得
  • 4. PHP与NodeJS的通信 • 使用了Redis的Pub/Sub功能进行通信,而不是使用PHP的 socket功能,因为: – 如果达到了maxConnections上限,php发起的socket是 会被拒绝的,使通信变得不可靠! – 对于PHP服务器,在有许多推送的情况下,可能会产生 很多的socket,如果产生socket的速度(程序没有控 制好)超过服务器释放连接的速度(TIME_WAIT),这样 后果就很严重了!! – 每一个socket都是宝贵的,还是留给用户吧。 所以我们采用了Pub/Sub机制!
  • 5. NodeJS Pub/Sub实现代码 var redis = require("redis"), redisSub = redis.createClient(); redisSub.on('ready', function () { redisSub.subscribe('channel name'); }); redisSub.on('message', function (channel, message) { ... }); 代码没什么好研究的,讲机制啦!
  • 6. 我们是怎样使用Redis的 • 不使用rdb,只使用aof • no-appendfsync-on-rewrite yes • 定期执行BGREWRITEAOF(一天一次) • 未开启主从复制(相信他的稳定性) 未出现CPU飙高的现象 未出现内存大量占用的现象(别人都在说的 两倍内存消耗) 未出现写延迟或读延迟的现象
  • 7. 线上运行情况(目前) • php的CPU消耗有些高 – 单个php-fpm有时会达到6%(战斗的时候计算量 很大) • redis不怎么耗资源,比想象中好 – CPU:0.1%左右(有排行功能) – MEM:136m左右 • NodeJS运行稳定,未宕过(我们有小秘密) – CPU:3%左右 – MEM:521m左右(有对数据的缓存)
  • 8. 展望未来 • 抛弃php,全部使用NodeJS? 需解决的问题: – 大计算量应用时的评估 – 占用大内存量时的评估(存到Buffer里?) – 代码更新策略 • 配置文件更新机制 • 逻辑代码更新机制 – ……