这节课我们要讨论什么
1、NodeJs异步IO原理浅析及优化方案
2、nodejs内存管理机制以及内存优化
3、大规模node站点结构原理分析
4、服务器集群管理和node集群的应用
5、UV过千万的Node站点真身
异步IO原理浅析
NodeJS异步IO原理浅析及优化方案
io就是输入和输出 input output
io密集型 一堆请求像你袭来 这个时候node全部接受 基于异步的处理机制
cpu要进行紧急运算
io是昂贵的
cup是昂贵的 因为运算特别快
cpu时钟周期 1/cpu 越
cpu分成两级缓存 一级缓存和二级缓存
内存缓存 member cache
缘起: 在数据驱动的web开发中,经常要重复从数据库中取出相同的数据,这种重复极大的增加了数据库负载。缓存是解决这个问题的好办法。
Memcached是什么?
Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
js和java不在一台服务器上 分布式服务器 通过网络进行请求 并在硬盘上找到文件 但是对于取到js文件时间更加长了 a.xx.com js访问 b.xx.com java
ws同步处理的任务 wp异步的任务
异步io创建出文件描述符后,等待系统底层处理后在扔回去
app就是application就是应用程序的简称 通过js代码绑定到v8的进程中 浏览器和v8引擎不支持es6 v8引擎通过nodejs基础的api 电饭锅饭好了会叫 被node封装了一层libuv 也叫asynchronous io node封装的一种异步通知的机制,eventloop 事件从event queue(事件队列)中 交给worker therads(工作线程)执行完毕后告诉eventloop 交回eventqueue(看nodejs事件驱动机制)
AIO ( Asynchronous I/O):异步非阻塞I/O模型。异步非阻塞与同步非阻塞的区别在哪里?异步非阻塞无需一个线程去轮询所有IO操作的状态改变,在相应的状态改变后,系统会通知对应的线程来处理。对应到烧开水中就是,为每个水壶上面装了一个开关,水烧开之后,水壶会自动通知我水烧开了。
BIO (Blocking I/O):同步阻塞I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。这里使用那个经典的烧开水例子,这里假设一个烧开水的场景,有一排水壶在烧开水,BIO的工作模式就是, 叫一个线程停留在一个水壶那,直到这个水壶烧开,才去处理下一个水壶。但是实际上线程在等待水壶烧开的时间段什么都没有做。
NIO (New I/O):同时支持阻塞与非阻塞模式,但这里我们以其同步非阻塞I/O模式来说明,那么什么叫做同步非阻塞?如果还拿烧开水来说,NIO的做法是叫一个线程不断的轮询每个水壶的状态,看看是否有水壶的状态发生了改变,从而进行下一步的操作。
从服务器上看node
Nginx负载均衡代理到lvs
pm2负载均衡去启动node 可以帮助零秒热启
pm2 是一个带有负载均衡功能的Node应用的进程管理器.
帮助事件轮询的libuv库和v8不是一个线程
libuv封装了两个东西在linux下叫custom threradpool 在windows 叫iocp
nodejs代码单线程 cluster启动多个服务 fork启动一个服务复制多个 主进程死了其余都崩溃 两种机制
哨兵变量
v8的垃圾回收策略基于分代式垃圾回收机制:新生代为存活时间较短的对象,老生代为存活时间较长的对象,gc是一种回收机制,来区分出新生代和老生代,scavenge算法,把内存一分为二,var a alert(a) var b ,此时b没有用到,把代码进行反转,var a alert(a),把a放到老生代空间内,老生代空间越来越多,也需要清理,a=null,把空间标记为星,把有用变量挪到一起,带星的删除。即先把变量放到老生态空间,在通过标记清除移动的方法,把老生态空间没用的内存干掉,跟磁盘碎片清理相似。
net多层架构
website 前端代码 html css js代码
webstieTest 单元测试文件夹
webService 外界提供接口
webControllers 路由
SQLServerDAL 数据库的一些具体的操作
Model 数据库对应的模型
IDAL 接口 不干活
DLLLlbraly 第三方的库
DBUtility 数据库封装的库
DataCache 一些缓存
DALFactory 最重要
BLL 真正干活 把IDAL接口层和SQLServerDAl连接起来 真正的路由落到BLL上
JavaWeb多层架构
action 路由层
common 公共的类
dao 数据库的实现层
po 数据库的类
service 实现数据操作的
依赖注入 控制反转
pm2 0秒停机重启
服务器集群
NGINX LVS
前端项目构建
dosc 前端项目
nodeuii node项目
scripts 运行脚本
webapp build脚本build到nodeuii中
nodeuii中包含
app.js 启动文件
bin 脚本
config 配置文件
controllers 路由
lib 常用的帮助库
middleware 中间件
models 和后端请求用的
nginx-conf nginx配置文件
node_modules node包
package.json 包管理器
pm2.json pm2的配置文件
public 公共的前端资源配置文件
receiver-master 接收前端传过来的receiver
test 功能化测试
views 模板