posts - 283,  comments - 6272,  trackbacks - 107
摘要: 在开发LLServer的同时,我一直在跟进测试企业版的相应LLServer客户端,目前这部分代码已测试完毕并提交的Discuz!NT产品中,会跟随最新的源码包一并发布。本文主要是介绍一下产品中引入LLServer的架构思路。在Discuz!NT的企业版产品中,使用了Memcached,Redis这两个软件来提供分布式缓存服务(两者任选其一)。现有又有了LLServer,它不仅提供了KEY/VALUE缓存,还包括持久化存储部分。这样,用户可以有更多大的选择余地。下面是Discuz!NT的企业版分布式缓存中一个架构图:阅读全文
posted @ 2011-08-26 11:13 代震军 阅读(2746) 评论(15) 编辑
摘要: LLServer是本人基于libevent和leveldb这两个开源软件,开发的轻量级数据存储服务器软件,借助libevent高效网络接口实现对leveldb的访问封装。项目网址:http://code.google.com/p/llserver/. 使用环境:Linux. 作者:代震军. 目前发布版本:1.0阅读全文
posted @ 2011-08-23 13:20 代震军 阅读(3355) 评论(14) 编辑
摘要: 很久没写口水文了,因为一直没有像样的话题。另外作为一个技术从业者,写那类东东实在没什么意思。但昨天与公司销售一起去一家客户那做技术交流的过程中发现了技术之外的话题,我想很多公司可能也正在上演以这类话题所引发的冲突,所以就一并以流水帐的方式呈现出来了。因为这次是客户那边的CTO 对我们产品有疑问,所以之前我们早早准备了一些资料和相关测试说明文档,希望能全方位的介绍一下我们产品特别是企业版的细节和应用场景。这里要说明的是因为这家公司在过去不到一年的时间里因为技术和商务那边内耗过重,经历了两轮大的人事变动,基本上技术部门人员流失怠尽,而早期与我们接触的技术人员已全部离任。阅读全文
posted @ 2011-06-17 11:27 代震军 阅读(9041) 评论(100) 编辑
摘要: 在之前的一篇文章中,介绍了mongos的启动流程,在那篇文章的结尾,介绍了mongos使用balancer来进行均衡,今天就继续讲其实现方式。首先我们看一下Balancer及相关实现策略的类图:阅读全文
posted @ 2011-05-23 10:53 代震军 阅读(1770) 评论(6) 编辑
摘要: 考虑到mongodb使用了boost库源码,参考mongodb官方文档后,下载编译boost版本是1.42(时间为2010-2-2)或更新版本: boost版本1.42: http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.zip/download阅读全文
posted @ 2011-03-07 13:25 代震军 阅读(4271) 评论(16) 编辑
摘要: 在之前的Discuz!NT缓存的架构方案中,曾说过Discuz!NT采用了两级缓存方式,即本地缓存+memcached方式。在近半年多的实际运行环境下,该方案经受住了检验。现在为了提供多样式的解决方案,我在企业版里引入了Redis这个目前炙手可热的缓存架构产品,即将memcached 与Redis作为可选插件方式来提供了最终用户,尽管目前测试的结果两者的差异不是很大(毫秒级),但我想多一种选择对用户来说也是好的。阅读全文
posted @ 2011-02-21 10:51 代震军 阅读(6960) 评论(19) 编辑
摘要: 在开发LLServer的同时,我一直在跟进测试企业版的相应LLServer客户端,目前这部分代码已测试完毕并提交的Discuz!NT产品中,会跟随最新的源码包一并发布。本文主要是介绍一下产品中引入LLServer的架构思路。在Discuz!NT的企业版产品中,使用了Memcached,Redis这两个软件来提供分布式缓存服务(两者任选其一)。现有又有了LLServer,它不仅提供了KEY/VALUE缓存,还包括持久化存储部分。这样,用户可以有更多大的选择余地。下面是Discuz!NT的企业版分布式缓存中一个架构图:阅读全文
posted @ 2011-08-26 11:13 代震军 阅读(2746) 评论(15) 编辑
摘要: LLServer是本人基于libevent和leveldb这两个开源软件,开发的轻量级数据存储服务器软件,借助libevent高效网络接口实现对leveldb的访问封装。项目网址:http://code.google.com/p/llserver/. 使用环境:Linux. 作者:代震军. 目前发布版本:1.0阅读全文
posted @ 2011-08-23 13:20 代震军 阅读(3355) 评论(14) 编辑
摘要: qq:25112522 www.yasn.com.cn这是公司网站 www.yasn.net这是展会网站 公司位置在建德门这边,离地铁很近。 网站架构师(1名) 岗位职责 Ø 参与网站架构策划设计和数据库设计、核心代码开发,数据库优化,提升后台数据支撑能力,提升页面响应速度等后端相关工作; Ø 参与网站功能设计,技术解决方案,及技术规范制定,对技术团队提供技术支持等工作; Ø 参与产品的质量和开发进度管理; Ø 参与网站SEO优化。 任职资格 Ø 计算机相关专业本科以上学历,5年以上软件开发经验,2年以上的.NET架构设计经验; Ø 阅读全文
posted @ 2011-07-15 17:37 代震军 阅读(739) 评论(0)  编辑
摘要: 在之前的文章中,介绍了关于master-slave模式下的主从端代码的执行流程,因为当时篇幅所限,未对oplog的数据结构以及mongodb的 local数据库作过多阐述,而这可能会让不知道其内容的朋友看代码时云里雾里找不到头绪,今天我专门用一篇文章来大致解释一下(这些内容可能会在后面章节中有所涉及)。首先了解一个local数据库: 在mongod中,出于特殊目的(复制机制),保留性使用了local数据库。当使用认证机制时,对local数据库等同于认证admin数据库。阅读全文
posted @ 2011-06-27 11:50 代震军 阅读(2427) 评论(3) 编辑
摘要: 在上文中介绍了主从(master-slave)模式下的一些基本概念及master的执行流程。今天接着介绍一下从(slave)结点是如何发起请求,并通过请求获取的oplog信息来构造本地数据的。 不过开始今天的正文前,需要介绍一下mongodb在slave结点上进行数据同步时的一个大致流程:阅读全文
posted @ 2011-06-20 08:32 代震军 阅读(1226) 评论(5) 编辑
摘要: 很久没写口水文了,因为一直没有像样的话题。另外作为一个技术从业者,写那类东东实在没什么意思。但昨天与公司销售一起去一家客户那做技术交流的过程中发现了技术之外的话题,我想很多公司可能也正在上演以这类话题所引发的冲突,所以就一并以流水帐的方式呈现出来了。因为这次是客户那边的CTO 对我们产品有疑问,所以之前我们早早准备了一些资料和相关测试说明文档,希望能全方位的介绍一下我们产品特别是企业版的细节和应用场景。这里要说明的是因为这家公司在过去不到一年的时间里因为技术和商务那边内耗过重,经历了两轮大的人事变动,基本上技术部门人员流失怠尽,而早期与我们接触的技术人员已全部离任。阅读全文
posted @ 2011-06-17 11:27 代震军 阅读(9041) 评论(100) 编辑
摘要: mongodb中提供了复制(Replication)机制,通过该机制可以帮助我们很容易实现读写分离方案,并支持灾难恢复(服务器断电)等意外情况下的数据安全。在老版本(1.6)中,Mongo提供了两种方式的复制:master-slave及replica pair模式(注:mongodb最新支持的replset复制集方式可看成是pair的升级版,它解决pair只能在两个结点间同步的限制,支持多个结点同步且支持主从宕机时的自动切换)。阅读全文
posted @ 2011-06-13 12:47 代震军 阅读(2355) 评论(7) 编辑
摘要: 在之前的一篇文章中,介绍了mongos的balaner的执行流程,其中在源码中的Balancer::run()方法里简单说明了为了连接到 configserver,balancer通过构造ScopedDbConnection实现来链接并执行相应操作,因为当时篇幅所限,只是该链接使用池化的方式一带而过,今天就专门介绍一下mongodb中使用池化方式来管理链接对象以提升链接效率的原理。阅读全文
posted @ 2011-06-07 09:03 代震军 阅读(2263) 评论(1) 编辑
摘要: 在之前的一篇文章中,介绍了balancer会声明使用分布式锁来协调分布式环境下的信息沟通并确保事务一致性,有关分布式锁的一些原理性信息可以参见这几篇文章:http://wenku.baidu.com/view/19ce3085b9d528ea81c77982.html http://wenku.baidu.com/view/d94ac11ffc4ffe473368ab27.html阅读全文
posted @ 2011-05-30 09:52 代震军 阅读(2083) 评论(2) 编辑
摘要: 在之前的一篇文章中,介绍了mongos的启动流程,在那篇文章的结尾,介绍了mongos使用balancer来进行均衡,今天就继续讲其实现方式。首先我们看一下Balancer及相关实现策略的类图:阅读全文
posted @ 2011-05-23 10:53 代震军 阅读(1770) 评论(6) 编辑
摘要: MongoDB提供了auto-sharding 功能。因为其是auto-sharding,即mongodb通过mongos(一个自动分片模块,用于构建一个大规模的可扩展的数据库集群,这个集群可以并入动态增加的机器)自动建立一个水平扩展的数据库集群系统,将数据库分表存储在sharding的各个节点上。阅读全文
posted @ 2011-05-16 10:16 代震军 阅读(2801) 评论(2) 编辑
摘要: 在这个系列的开头几篇文章中,曾经介绍了Mongodb的查询流程,因为篇幅所限,并未介绍对cursor进行遍历查询时,如何将查询记录装填进结果集中。今天就针对诸如"select top n"这类返回一定数量记录的查询操作,来分析mongodb是如何将查询结果装填到结果集中的。这里要说明的是之前文章中的大部分程序流程,在select top 这类操作也都是要执行的,所以这里接着之前文章所说的内容,继续向底层挖掘相应的功能逻辑:阅读全文
posted @ 2011-05-05 18:00 代震军 阅读(2203) 评论(6) 编辑
摘要: Command在Mongodb中是一类特殊操作,它提供了强大的管理及各项操作(比如建库,索引,删除集合等)。可以说通过Command可以完成几乎所有想做的事情。同时Mongodb开发者在Command上又做了非常清晰体系架构和设计,便于管理和高效执行各种类型的Command。 今天就专门用一篇篇幅来着重介绍一下其Command的体系架构,并用例子来介绍mongod是如何将Command引入其中的。阅读全文
posted @ 2011-04-29 11:55 代震军 阅读(1389) 评论(2) 编辑
摘要: 在Mongodb中,其使用了操作系统底层提供的内存映射机制,即MMAP。MMAP可以把磁盘文件的一部分或全部内容直接映射到内存,这样文件中的信息位置就会在内存中有对应的地址空间,这时对文件的读写可以直接用指针来做,而不需要read/write函数了。同时操作系统会将数据刷新保存到磁盘上。如下图:阅读全文
posted @ 2011-04-25 08:36 代震军 阅读(3124) 评论(4) 编辑
摘要: 在Mongodb中,其提供了类似关系型数据中cursor对象来遍历数据集合,同时mongodb并要根据不同的场景生成不同的游标对象(cursor),比如顺序遍历游标(basicCursor),反向游标(reverseCursor), B树索引游标(btreeCursor)等。 下面是其游标体系架构类图,cursor.cpp, cursor.h, clientcursor.cpp, clientcursor.h阅读全文
posted @ 2011-04-15 11:29 代震军 阅读(2079) 评论(6) 编辑
摘要: 在之前的一篇文章中,介绍了assembleResponse函数(位于instance.cpp第224行),它会根据op操作枚举类型来调用相应的crud操作,枚举类型定义如下: 可以看到dbUpdate = 2001 为更新操作枚举值,下面我们看一下assembleResponse在确定是更新操作时调用的方法,如下:阅读全文
posted @ 2011-04-11 09:49 代震军 阅读(2230) 评论(5) 编辑
摘要: 在之前的一篇文章中,介绍了assembleResponse函数(位于instance.cpp第224行),它会根据op操作枚举类型来调用相应的crud操作,枚举类型定义如下...可以看到dbDelete = 2002 为删除操作枚举值。当客户端将要删除的记录(或条件的document)发到服务端之后,mongodb通过消息封装方式将数据包中的字节流解析转成 message类型,并进一步转换成dbmessage之后,mongodb就会根据消息类型进行判断,以决定接下来执行的操作),下面我们看一下 assembleResponse在确定是删除操作时调用的方法,如下:阅读全文
posted @ 2011-04-06 14:11 代震军 阅读(1715) 评论(0) 编辑
摘要: 在Mongodb中,客户端和服务端进行通信是基于mongodb wire protocol。说白了,该协议是一个简单的基于socket,请求/响应方式的协议,客户端使用常规的TCP/IP套接字(socket)进行通信。客户端与服务端使用约定的消息(格式)进行通信,其消息头结构与C语言中的struct类似。具体的代码(位于message.cpp):阅读全文
posted @ 2011-04-02 14:45 代震军 阅读(2110) 评论(3) 编辑
摘要: 在之前的mongodb查询流程中,介绍了assembleResponse函数(位于instance.cpp第224行),它会根据op操作枚举类型来调用相应的crud操作,枚举类型定义如下: enum Operations { opReply = 1, /* reply. responseTo is set. */ dbMsg = 1000, /* generic msg command followed by a string */ dbUpdate = 2001, /* update object */阅读全文
posted @ 2011-03-30 13:23 代震军 阅读(2248) 评论(6) 编辑
摘要: 王二是个有钱人,很多很多钱。王家的高墙大院,既为邻里所艳羡,又被人厌恶。艳羡是因为邻里们其实也想有高墙大院,厌恶是因为只有而且偏偏是王二住在高墙大院里。 王二不是一直都很有钱的,当年他和所有人一样穷。只是王二从来都不甘于贫穷,他需要的只是致富的时机。王二发的第一笔财是靠种地种出来的。他不仅干活干得比 谁都卖力,而且很有商业头脑。别人都种粮食,他种的却是蔬菜,然后可以赶上几十里地去城里卖菜。一年下来,他挣得比谁家都多。没几年,王二就有了一点积 蓄。因为进城多,他发现城里什么都好卖,而且越来越觉得靠天吃饭挣钱总是有限的。于是,王二就拿出自己全部的积蓄,又找亲戚朋友借了钱,在村里办起了一个 小作坊。王二买了十几台缝纫机,找了村里十几个中年妇女,开始做点衣服、鞋子、毛衣什么的,然后拿到城里去卖,生意很是不错。王二的小作坊不久就变成了大 作坊,然后生意也越做越广,钱也越挣越多。直到那时,王二在村里都是一个英雄式的人物。红眼的人总是有,但多数人还是觉得王二的钱是他该得的。阅读全文
posted @ 2011-03-22 12:54 代震军 阅读(904) 评论(0)  编辑
昵称:代震军
园龄:5年11个月
荣誉:推荐博客
粉丝:483
关注:3

<2012年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

搜索

 
 

常用链接

随笔分类(366)

随笔档案(283)

文章分类(8)

文章档案(31)

相册

JavaScript

LINQ

silverlight

UML,OO

WebBlogger

负载开源项目

  • Discuz!NT
  • LLServer
  • TokyoTyrantClient
  • WebCam

个人简历

漫画

其它

企业级架构

网站案例研究

积分与排名

  • 积分 - 1217581
  • 排名 - 26

最新评论

阅读排行榜

评论排行榜

推荐排行榜