2012年3月3日

为什么要用非关系数据库?

摘要: 原文 http://www.iteye.com/topic/524977随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数据库产品的发展非常迅速。而传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,例如:1、High performance - 对数据库高并发读写的需求web2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用动态页面静态化技术,因此数据库并发负载非常高,往往要达到每秒上万次读写请求。关系数据库应付上万次SQL查询还勉强 阅读全文

posted @ 2012-03-03 10:28 daemonh 阅读(404) 评论(0) 推荐(0) 编辑

2012年3月1日

一种LFU淘汰算法

摘要: 以前介绍过LRU高效的实现方式:一种O1性能的LRU算法 http://blog.csdn.net/herm_lib/article/details/6535698今天也介绍一下LFU的实现方法。LRU是最近最少使用算法,就是把最早才访问的数据淘汰掉。LFU是最近最不常用算法,就是某一段时间内被用到最少的淘汰掉。LFU时间周期 使用次数的时间长度,这个时间不能太短,短了体现不出哪些数据是热点;同样也不能太长,太长的话,某一个时间点的对某个数据的访问峰值可以长期影响我们的淘汰策略。一般实现的算法可以根据业务特点去调节这个参数。上个周期访问次数权重 在本周期开始的时候,最粗暴的做法是把所有数据的访 阅读全文

posted @ 2012-03-01 19:56 daemonh 阅读(526) 评论(0) 推荐(0) 编辑

2012年2月29日

大规模服务设计部署经验谈(全)

摘要: 注意,这是公司内部一位同事整理的,我经过这位老兄(http://hi.csdn.net/fullsail)的同意,把他转到我的blog。原文英文地址: http://www.mvdirona.com/jrh/talksAndPapers/JamesRH_Lisa.pdf 网上应该只能找到(上)和(中),没有下篇,这个文章是从程序员杂志上一章章抠出来的,好东西值得这样折腾,感谢原文的翻译者。大规模服务设计部署经验谈本文中提出的最佳实践,来自于作者多年大规模服务设计和部署的经验,为设计、开发对运营友好的服务提供了一系列良好的解决方案。■ 文/James Hamilton 译/赖翥翔1 引言本文就设 阅读全文

posted @ 2012-02-29 14:15 daemonh 阅读(301) 评论(0) 推荐(0) 编辑

2012年2月23日

记录一下 __gnu_cxx::hash_map传一个新allocator的写法

摘要: 老得查代码写,这里记录一下:hash_map(size_type __n, const hasher& __hf, const key_equal& __eql, const allocator_type& __a = allocator_type()) // 全局的角色指针Allocator __gnu_cxx::__pool_alloc<Role*> g_rolePtrAlloc; typedef __gnu_cxx::hash_map< uint32_t, Role*, __gnu_cxx::hash<uint32_t>, ... 阅读全文

posted @ 2012-02-23 16:30 daemonh 阅读(346) 评论(0) 推荐(0) 编辑

内存碎片和memcached slab控制碎片方法

摘要: 转自:http://blog.csdn.net/xuzhonghai/article/details/7285821内存碎片的产生:内存分配有静态分配和动态分配两种 静态分配在程序编译链接时分配的大小和使用寿命就已经确定,而应用上要求操作系统可以提供给进程运行时申请和释放任意大小内存的功能,这就是内存的动态分配。 因此动态分配将不可避免会产生内存碎片的问题,那么什么是内存碎片?内存碎片即“碎片的内存”描述一个系统中所有不可用的空闲内存,这些碎片之所以不能被使用,是因为负责动态分配内存的分配算法使得这些空闲的内存无法使用,这一问题的发生,原因在于这些空闲内存以小且不连续方式出现在不同的位置。因此 阅读全文

posted @ 2012-02-23 10:04 daemonh 阅读(271) 评论(0) 推荐(0) 编辑

2012年2月22日

MMORPG类网络游戏的典型架构

摘要: MMORPG的特点是角色之间一般可见;有不同类型的地图,包括开放地图(城市、村庄等)和封闭地图(副本、大型战场和小型PK房间等);有各种RPG组织元素(如公会、家族等)。架构设计逻辑服务器部分的出发点是根据上面的特点设计的。一般可以用下面的架构: MMORPG的后台其实就这么简单,架构不复杂。对后台架构经验较少的兄弟,别太纠结,就用这个简单的架构一般就可以满足商业运营要求了。gated 前端接入服务器,主要功能是连接接入,消息接收和发送,也可以包括加解密和解压缩功能。ctrld 一个指挥控制的服务器,控制整个服务器组角色的状态,登录初始化也在这里处理。client进入游戏前的角色列表一般也从这 阅读全文

posted @ 2012-02-22 21:18 daemonh 阅读(555) 评论(0) 推荐(0) 编辑

2012年2月12日

即时通讯系统架构

摘要: 有过几款IM系统开发经历,目前有一款还在线上跑着。准备简单地介绍一下大型商业应用的IM系统的架构。设计这种架构比较重要的一点是低耦合,把整个系统设计成多个相互分离的子系统。我把整个系统分成下面几个部分:(1)状态消息系统 (2)好友系统 (3)P2P系统 (4)其他扩展业务系统先看状态消息系统 connd client接入服务器,可以支持UDP,也可以支持TCP,一般建议优先选择TCP。connd可以布置多台,client接入时,可以用简单的DNS轮询的方式实现负载均衡。connd功能是维护连接和转发消息包。pconnd proxy connd, 代理接入服务器,是connd的扩展,除了... 阅读全文

posted @ 2012-02-12 13:54 daemonh 阅读(648) 评论(0) 推荐(0) 编辑

2012年2月9日

SNS游戏中的数据特征随笔

摘要: 我们正在开发的一款游戏有MMO的特征,就是有任务,有战斗;同时又存在大量SNS行为,比如某个角色宠物可以找某个离线好友角色的宠物战斗,找离线角色的宠物修行等。估计目前SNS类的游戏都有这两种用户行为。这样我们看游戏中的数据:角色、宠物、道具、任务、成就、好友、修行、其他乱七八糟的数据。这些数据当中,道具、任务和成就数据,没有特殊需求的话,是不存在离线操作的。所以,这类数据的加载、回写和访问可以按照MMO游戏的处理方式。MMO处理方式,一般是用户登录时加载数据一个公用Cache,切换服务器时,从cache加载新数据,登出时回写数据。Cache可以直接做个简单的LRU淘汰机制。其他数据就按照SNS 阅读全文

posted @ 2012-02-09 17:25 daemonh 阅读(149) 评论(0) 推荐(0) 编辑

2011年12月20日

游戏网关服务器性能优化的一种方案

摘要: 这里的网关服务器(简称gated吧)是指逻辑服务器前面的那排服务器,一般有几个主要功能: (1)接入 (2)加解密 (3)解缩压gated一个特点是不处理逻辑,每个连接之间不存在交互关系,这点非常关键,是我这个优化方案的基础。上面(2)(3)两项目是很吃CPU的,而目前的机器一般是X个CPU,Y个核的,我们可以通过多线程的方式,更好利用机器硬件。当然多线程之间肯定没有任何锁之类的东西。有了锁,多线程效率就下来了。 上行处理过程: 接收线程收到数据后,将数据写入各自连接的接收队列中。 创建X个处理线程,每个处理线程根据某种hash算法去不同的接收队列中读取数据;X个处理线程并行地处理加解密&am 阅读全文

posted @ 2011-12-20 10:33 daemonh 阅读(439) 评论(0) 推荐(0) 编辑

2011年10月20日

字节序转换优化

摘要: 在一定的前提条件下,字节序转化可以做到对服务器透明,也就是说服务器不用调用htons&ntohs的等函数。首先得满足下面几个条件:1. 非标准产品 比如某个公司游戏产品,这类一般就公司自己的客户端或满足特定条件的第三方插件才能连接服务器。2. 项目组自己解析协议消息 如果项目是用像protobuf这种协议消息工具正常情况下,无法做到这类优化。优化方案:1. Client发协议消息前知道Server用的是哪种字节序 简单的方法是直接在配置文件里指定Server字节序,因为是自己的产品,运营的时候,大部分情况下是知道Server环境的字节序的。 如果有特殊要求,可能Server的字节序是不 阅读全文

posted @ 2011-10-20 14:16 daemonh 阅读(220) 评论(0) 推荐(0) 编辑

导航