ourjs

Free Blog Engine, Forum System, Website Template and CMS Platform based on Node.JS and Redis

739
180
JavaScript

OurJS 0.1.x

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 0.1.x Beta版

OurJS 基于Node.JS和Redis的开源的高性能博客引擎,网站模板,论坛系统和轻量级的CMS系统

ourjs 0.1.x 基于Redis
ourjs 0.0.x 基于内存和文件系统

常见问题

如何安装ourjs 0.1.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

ourjs 0.1.x 基于哪些框架

  1. web框架使用的是只有一个文件实现的websvr,支持include模板文件及其嵌套;
  2. 数据库ORM采用的是redblade ( 文档 ),同样只用一个文件实现; 只要事先定好schema,就能像mongodb那样操作redis,自动帮你创建index/ keyword等索引; 不过还是推荐使用原生redis指令读取数据,用redblade来更新数据,这样就可以发挥redis的超强性能。在使用时你需要对redis指令和数据类型非常熟悉。
  3. 模板引擎采用了性价比较高的 doT, 十分钟即可上手。

为什么新发布的文章无法在首页显示

只有发布后(article中的isPublic=1,并且在"public:1"有序集合中)的文章才可以在首页显示,未发布的文章都在“最新文章”中列出,你需要指定一名管理员用户,然后单击发布或取消发布即可。

为什么要保留node_modules文件夹

npm在中国经常出现不可用的情况; 同时ourjs所采用的所有模块都不是平台相关的;再加上有时侯需要对redblade等底层模块做一些修改,这些修改只有稳定运行一段时间才能正式发布到npm上面。不管你使用何种平台,保留node_modules都不影响你使用

为什么ourjs 0.1.x版可以应对超大规模并发

ourjs 0.0.x 基于内存和文件系统;相当于在node.js中实现了一个内存数据库,即先读写内存立即返回后,再同步到文件系统; 这种机制的优点是无任何依赖即可运行,单个实例性能强劲,使用非常低的服务器配置就可支撑较大流量,如 ourjs使用最低配置云服务器,运行稳定,半年多重启一次; 缺点是所有状态都在一个node.js线程中,无法分布式集群化部署,理论上无法应对超大规模并发,而且数据更新操作会略显复杂。

ourjs 0.1.x 所有session和数据均存放在redis中,网站进程不存放任何状态, 当需要应对超大规模流量时可布暑多个ourjs实例,通过更改config.js,让每个实例侦听不同端口,然后通过nginx反向代理或 DNS round robin 做负载均衡,集群化布暑和单个实例布暑不需要更改应用层的任何代码。

为什么不用mongodb

mongodb是非常好的nosql文档数据库,数据更新查询非常方便,但它是基于文件系统的,硬盘I/O的读写速度会严重限制网站可承受的最大并发量。
而redis是目前公认的速度最快的基于内存的键值对数据库,但redis的缺点也非常明显,仅提供最基本的hash set, list, sorted set等基于数据类型,不分表,没有schema,没有索引,没有外键,缺少int/date等基本数据类型,多条件查询需要通过集合内联(sinter,zinterstore)和连接间接实现,操作不便,开发效率低,可维护性不佳; 因此一般不将其视为完整的数据库单独使用,很多网站将redis作为高速缓存和session状态存储层,然后再与其他数据库搭配使用。 所以我们设计了redblade用以简化redis的操作。

使用Redis内存撑爆了怎么办

首先redis是一个非常省内存的数据库,启动时只占用1M多内存,与node.js一样同为异步非阻塞构架,与多线程架构不同,其内存消耗不会随着并发的增长而显著增长 (注*性能测评:Ngix_Lua, Node.JS Python)。其次目前已经有很多第三方的redis集群化部署方案,通过这些工具,你可以将redis部署成一个内存无限大的数据库。

前端为什么要用Bootstrap 2.3.2

Bootstrap已经有了很大的更新的,但2.3.2版是对IE7兼容最好的一个版本。甚至还有一些支持IE6的第三方插件,比较适合中国国情。

为什么第一次加载页面布局会乱

WebSvr中有一个模板缓存对象,为了提升响应速度,会直接获取缓存中的模板,首次启动ourjs时,此缓存对象为空。在 deubg = true (config.js => templateCache = false)时,每次请求完成后会一直更新模板缓存;而在 debug = false 时,缓存对象一旦获取,将不再更新,即动态模板只会加载一次,以后都不会产生I/O操作,此时对模板的修改,需要重启ourjs进程。有些厂商会对I/O操作收费,对于静态资源一般走CDN单独部署或通过nginx设置。

相关资源、示例

  1. 中文支持: http://ourjs.com/bbs/OurJS
  2. AnyNB 股市牛博汇; 基于OurJS 0.1.x版; 运行在最低配的云服务器上: 512Mb内存+1核CPU+1M宽带; 运行进程: nodejs 2个(ourjs+文章自动采集进程),redis,ftp,nginx等
  3. OurJS 我们的JavaScript; 基于OurJS 0.0.x版; 服务器配置:1G内存+1核CPU+1M宽带; 运行进程: nodejs 4个(网站3个,微信自助查询服务1个),redis,ftp,nginx,svn等; 从2013年底开始运营,在Google Analytics上观测千人在线时,网站也基本上能够秒开。

AnyNB的分支为0.1.1,代码比较杂乱,也没有经过充分测试;0.0.x 和 0.1.x的分支相对稳定和干净。

https://raw.githubusercontent.com/newghost/blog/master/res/ga_ourjs.png

License

BSD, See our license file