Free Blog Engine, Forum System, Website Template and CMS Platform based on Node.JS and Redis
Author : Kris Zhang
ourjs 0.1.x using redis
ourjs 0.0.x using memory & file system
OurJS 基于Node.JS和Redis的开源的高性能博客引擎,网站模板,论坛系统和轻量级的CMS系统
ourjs 0.1.x 基于Redis
ourjs 0.0.x 基于内存和文件系统
首先下载最新的 ourjs,单击右侧的 Download ZIP 下载最新版(也可使用 git clone 复制0.1.x的branch, npm中发布的是0.0.x版); 然后你需要安装redis,windows版的是由微软维护的,可在MSOpenTech下载; 最后单击 ourjs.sh 或 ourjs.cmd 即可运行, 默认侦听 8051 端口, 即: http://localhost:8051
你可以安装第三方redis管理客户端 RedisDesktopManager 方便调试redis。
管理员用户: 首次使用,你需要指定一个管理员用户,你需要使用redis-cli或RedisDesktopManager为你注册的新用户添加isAdmin属性,值设为1,然后重新登录即可。
如你注册了一个新的用户ourjs,则可通过redis-cli用以下命令将其设置为管理员(ourjs默认使用第7个数据库),运行命令后需要重新登录。
select 7
hset user:ourjs isAdmin 1
只有发布后(article中的isPublic=1,并且在"public:1"有序集合中)的文章才可以在首页显示,未发布的文章都在“最新文章”中列出,你需要指定一名管理员用户,然后单击发布或取消发布即可。
npm在中国经常出现不可用的情况; 同时ourjs所采用的所有模块都不是平台相关的;再加上有时侯需要对redblade等底层模块做一些修改,这些修改只有稳定运行一段时间才能正式发布到npm上面。不管你使用何种平台,保留node_modules都不影响你使用
ourjs 0.0.x 基于内存和文件系统;相当于在node.js中实现了一个内存数据库,即先读写内存立即返回后,再同步到文件系统; 这种机制的优点是无任何依赖即可运行,单个实例性能强劲,使用非常低的服务器配置就可支撑较大流量,如 ourjs使用最低配置云服务器,运行稳定,半年多重启一次; 缺点是所有状态都在一个node.js线程中,无法分布式集群化部署,理论上无法应对超大规模并发,而且数据更新操作会略显复杂。
ourjs 0.1.x 所有session和数据均存放在redis中,网站进程不存放任何状态, 当需要应对超大规模流量时可布暑多个ourjs实例,通过更改config.js,让每个实例侦听不同端口,然后通过nginx反向代理或 DNS round robin 做负载均衡,集群化布暑和单个实例布暑不需要更改应用层的任何代码。
mongodb是非常好的nosql文档数据库,数据更新查询非常方便,但它是基于文件系统的,硬盘I/O的读写速度会严重限制网站可承受的最大并发量。
而redis是目前公认的速度最快的基于内存的键值对数据库,但redis的缺点也非常明显,仅提供最基本的hash set, list, sorted set等基于数据类型,不分表,没有schema,没有索引,没有外键,缺少int/date等基本数据类型,多条件查询需要通过集合内联(sinter,zinterstore)和连接间接实现,操作不便,开发效率低,可维护性不佳; 因此一般不将其视为完整的数据库单独使用,很多网站将redis作为高速缓存和session状态存储层,然后再与其他数据库搭配使用。 所以我们设计了redblade用以简化redis的操作。
首先redis是一个非常省内存的数据库,启动时只占用1M多内存,与node.js一样同为异步非阻塞构架,与多线程架构不同,其内存消耗不会随着并发的增长而显著增长 (注*性能测评:Ngix_Lua, Node.JS Python)。其次目前已经有很多第三方的redis集群化部署方案,通过这些工具,你可以将redis部署成一个内存无限大的数据库。
Bootstrap已经有了很大的更新的,但2.3.2版是对IE7兼容最好的一个版本。甚至还有一些支持IE6的第三方插件,比较适合中国国情。
WebSvr中有一个模板缓存对象,为了提升响应速度,会直接获取缓存中的模板,首次启动ourjs时,此缓存对象为空。在 deubg = true (config.js => templateCache = false)时,每次请求完成后会一直更新模板缓存;而在 debug = false 时,缓存对象一旦获取,将不再更新,即动态模板只会加载一次,以后都不会产生I/O操作,此时对模板的修改,需要重启ourjs进程。有些厂商会对I/O操作收费,对于静态资源一般走CDN单独部署或通过nginx设置。
AnyNB的分支为0.1.1,代码比较杂乱,也没有经过充分测试;0.0.x 和 0.1.x的分支相对稳定和干净。
BSD, See our license file