- 浏览: 27798 次
- 性别:
- 来自: 深圳
最新评论
文章列表
大师级别的人总结出来的,细细体会,深刻领悟
1、“任何傻瓜都能写出计算机可以理解的代码。好的程序员能写出人能读懂的代码” ——Martin Fowler
2、“设计是一个发现问题、而不是发现解决方案的过程” —— Leslie Chicoine
3、“功能说明书里不存在可操作性” —— 37 Signals
4、“过去的代码都是未经测试的代码” —— Michael Feathers
5、“测试是来表明bug的存在而不是不存在” —— Edsger Dijkstra
6、“简单不先于复杂,而是在复杂之后” —— Alan Perlis
7、“没有绝世神功” —— Frederick ...
基于消息包可靠协议设计
- 博客分类:
- 游戏服务器
由于最近一两年里都是在负责做手游服务器的相关内容,对中国的这种2G/3G网络收费贵,而且带宽小,很想吐槽吐槽。但对于手游来说,这种其实都还可以接受,但是对于手机来说,网络其实是相当不稳定的,比如进出电梯,切换基站,地铁来说,对手机网络影响都很大。对于手机游戏,如果是短连接的话,还好,如果是偏实时性很强,有实时战斗这类的玩法,需要采用长连接了,那么就很影响体验了,就会出现各种断线,丢包,使游戏不能流畅的玩下去。
于是乎,在思考着如何让手游尽可能的在断线重连之后不丢包,能够比较流畅的玩下去。在这里,我们设计出了一种在tcp之上的一种基于协议包层面的确认机制。一种相对比较复杂一点, ...
对系统部署管理的一些拙见
- 博客分类:
- 游戏服务器
话说最近出了些小问题,让我认真对这个系统部署管理进行了一次深入思考,同时给出了一套适合自己的管理方案。
事情是这样的,最近服务器进行了一次版本更新,内网测试各种没问题,部署到外网,一开始也没啥问题,然后呢,大家都回家了,可是,由于某个原因,服务器崩了,运维兄弟想先回退到上一个版本,先跑着,于是各种找对接人。花了很长时间才整好。
由于这种突发事情,搞的措手不及,于是乎,在想一个比较好的方案来应对这种问题。
比较原始的方案,ftp上传到服务器,然后在替换版本的时候,在服务器上做一个备份,这种做法在很大程度上可以保证版本的回退。但是,人总有疏忽的时候,可能那天头晕了,就 ...
游戏多服务器架构的一点想法
- 博客分类:
- 游戏服务器
把网络游戏服务器分拆成多个进程,分开部署。这种设计的好处是模块自然分离,可以单独设计。分担负荷,可以提高整个系统的承载能力。
缺点在于,网络环境并不那么可靠。跨进程通讯有一定的不可预知性。服务器间通讯往往难以架设调试环境,并很容易把事情搅成一团糨糊。而且正确高效的管理多连接,对程序员来说也是一项挑战。
所以,我们在对项目进行架构选型时,要针对自己的需求来做,在手游,页游里,如果我们的没有那么复杂,尽量选择单进程来处理,这样做,可以避免分布式环境带来的各种稀奇古怪的问题比如,网络的不可靠,网络抖动。同时,编码,联调,测试效率也高。
微信游戏腾讯TDR评审感想
- 博客分类:
- 游戏服务器
因为最近的一款游戏,项目老板想上微信平台,并且项目老大也很有腾讯资源。但是,想要上微信平台并不是那么简单的一件事,就是技术,策划等方案必须通过腾讯的TDR评审,因为腾讯不想砸自己的招牌,同时,微信导量也很大,可能几分钟就能导入上10万的量,所以要服务器能抗的住,不宕机等。同时,微信平台游戏单服也需要能支撑10万同时在线的需求。
腾讯内部项目评审共5个阶段,其中,技术需要参与其中3个阶段评审。
立项初审,主要是对系统架构进行初步评审,这时会列出一些系统架构的问题,让改正,同时会给出比较完善的建议,方案等。
TDR2量产评审,这个会进行很具体的方案评审了,会针对各个问题,比如容灾方案 ...
断线重连,其实并不是一个神马高深的东西,相信各位做游戏的程序们都处理过这个问题,但是,怎么把这个断线重连做的安全,完善呢?下面就跟各位大神来讨论讨论这个问题~!
游戏中,断线重连(这里是基于TCP长 ...
基于zookeeper的分布式lock实现
- 博客分类:
- 内存数据库
博客分类: opensourcejavadistributed
参考地址
https://github.com/alibaba/canal/blob/5b56a027e59e46f13e9024bc2f24399981c29d7a/common/src/main/java/com/alibaba/otter/canal/common/zookeeper/ZooKeeperx.java
转载这位大神的,做个记录,因为项目中用到zookeeper的分布式锁
. ...
twemproxy生产实践
- 博客分类:
- 内存数据库
最近在项目中用到了redis,考虑到使用redis集群,由于reids3还未发布正式版,但是2.x还不支持集群,所以需要自己来维护一个集群。研究现在市面上比较成熟的方案,有codis,twemproxy等。codis是豌豆荚发布的一套redis集群代理框架,功能很强大,兼容twemproxy所有功能twemproxy是推特发布的,有大量公司使用。介绍大家可以去对应的github官方上看。
咱还是相信国际大公司的水准和其公司大数据的应用,决定使用twemproxy,这个东西在安装过程中,真是各种坑,稍不小心,就会安装失败,下面是我在安装中遇到的问题,总结下,让大家避免在同样的问 ...
圣诞平安夜马上就要来临了,很多人都开始准备过圣诞节了,这意味着2014年马上就要过去了。
细想这过去的一年里,我到底做了些啥呢!下面来总结下
身体来革命之本,在过去的几个月里,坚持锻炼身体,骑行25公里到30公里每星期,跑步5~10公里。从过去跑1KM就气喘嘘嘘,到现在一口气跑6~8KM都还行。
在技术方面,今年接触的比较多,也算是收获相对比较多的一年,在这一年里,接触了NODE.JS,Scala并在项目中实际应用。这2个语言从编程理念上跟类C语言还是蛮大的,node.js的回调模式,scala的函数式编程,都是之前未从接触过的。特别是akka的actor模式,让我在后面 ...
系统容灾其实是一个很大的话题,包括程序容灾和运维容灾等几个方面。
下面来跟大家来聊聊运维方面的容灾。说到运维容灾,可能大家想到了集群 。比如nginx做应用均衡负载。这样确实是可以解决某个应用服务器节点挂掉,而不会应用提供服务。那如果nginx这个关键节点挂了,怎么办呢。那么需要另外的方案。下面介绍下我们现在用的解决方案:LVS+Keeplived 来进行高可用性集群和负载。
名词解释:LVS linux visual server就是 linux 虚拟服务。
方案是:关键节点双机热备份架构,即2台关键节点(nginx) 后台挂载多应用web服务器。各服务器机之间采用keeplived检测 ...
在最近的项目中,由于对DB的IO有非常搞的要求,在数据库选择过程中考虑了mysql ,mongodb和reids即传统的关系型数据库和主流nosql中选择,经过测试,最后决定选用redis。
redis,使用的非常广泛的nosql数据库,我们非常熟悉的新浪微博和腾讯微博都采用了这个DB。redis的使用已经非常成功的使用经验。
redis是一个key value的内存数据库,具有有持久化的功能,内部采用的是单线程队列模型,保证数据安全。
在决定使用redis的时候,我们还是对它进行过一系列的测试,本机非局域网,20W次读写花费的时间是分钟级。局域网内花费的时间是本机测试 ...
我有一个很熟的朋友,他现在忙的不可开交。他手上有一大堆没有完成的合同,而且一个跟他一起开发的助手也离他而去。于是,在三个大客户的催命鬼时的督促下,他已经连续好几个星期没休息了。
其中有个客户跟 ...
并发---深入分析Volatile的实现原理
- 博客分类:
- java
Volatile的官方定义
Java语言规范第三版中对volatile的定义如下: java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁更加方便。如果一个字段被声明成volatile,java线程内存模型确保所有线程看到这个变量的值是一致的。
为什么要使用Volatile
Volatile变量修饰符如果使用恰当的话,它比synchronized的使用和执行成本会更低,因为它不会引起线程上下文的切换和调度。
Volatile的实现原理
那么Volatile ...
提问:
(1) 在分布式系统中,我们一般都有很多台节点服务器,那么如何让我们的逻辑落到指定的服务器节点上去处理呢?当我们增加或者删除节点的时候,还能让某一类处理落到相同的节点上去处理?
(2)、在架设分布式缓存比如memcache 或者 redis的时候,如何在增加或者删除节点的时候,能保证缓存的命中率。
很多人在分布式系统中,采用的是用某一个KEY(int) 对服务器数量取模,模等于几,就把数据发送到这台服务器上去处理,或者到这台缓存服务器上去拿数据。可是当我们需要增加N(>=1)或者删除N台服务器的时候,整个分布式系统数量都有所改变了,如果再 ...