IT技术博客大学习 共学习 共进步

技术文章

精选技术长文、实践记录与系统化阅读

技术文章精选

低噪声、高可扫读;标题、摘要、来源、标签一目了然。

最新文章

采集自各技术站点的近期文章。

IT 其他/ 2012-05-17 23:34:55 / 累计浏览 2,608

HBase中如何开发LoadBalance插件

HBase 中的LoadBalancer策略控制了如何在集群启动时Assign所有用户Region到各个RegionServer上,以及如何定期检查Region分布情况并重新调整Region位置的。这些工作在0.92之前的版本中都是在HBase Master内核中实现的,开发人员如果希望扩展自己的LoadBalancer插件,只能Hack源码,但这随着社区版本的升级,Hack工作必须移植到新的版本中。幸好在0.92版本中,HBase将LoadBalancer策略从Master内核中抽取了出来,开放了LoadBalancer Interface,允许开发者根据自己的业务特定扩展自己的LoadBalancer插件。

IT 系统运维/ 2012-05-17 23:34:16 / 累计浏览 1,924

一个检查偶发连接失败的脚本

情景:从机器A到机器B发起连接,连接超时时间设置为1s,有一定概率的连接失败的情况,使用下面脚本来测试,不断连接,放过成功的连接,只显示失败的连接,并且显示连接失败的时间,脚本如下:while :; do r=`nc -z -v -w 1 10.79.40.43 11231 2>&1 | grep -v succe`;if [ "x$r" != "x" ]; then d=`date +"%H:%M"`;echo -n "$d "; echo $r; fi ;  done

IT 算法/ 2012-05-17 23:31:49 / 累计浏览 4,545

Linux下常用I/O模型

Linux异步I/O是Linux内核中提供的一个相当新的增强。它是2.6版本内核的一个标准特性,异步非阻塞I/O背后的基本思想是允许进程发起很多I/O操作,而不用阻塞或等待任何操作完成。稍后或在接收到I/O操作完成的通知时,进程就可以检索I/O操作的结果。

IT MySQL/ 2012-05-17 23:30:39 / 累计浏览 3,731

弃用NoSQL数据库 CouchDB再见了

2012年5月10日,Sauce Labs公司的首席架构师Steven Hazel,写了一篇关于弃用NoSQL数据库CouchDB产品,介绍他们将Couch数据库的数据迁移到MySQL数据库平台中。 在Sauce Lab(酱油实验室)里,我们刚刚庆祝完成一个重大项目—将最后的CouchDB数据库转变为MySQL数据库,以提高服务正常运行时间和可靠性。 由于大部分无故停机的是由于CouchDB数据库宕机引起的,因此完成这种迁移是我们一个重要的里程碑。

IT 互联网/ 2012-05-17 23:29:30 / 累计浏览 2,610

好游戏与好生意—网络游戏商业化之辩

首先我要说明的是,今天咱们群里大多数人不是专业的游戏策划和设计人员,所以,今天的话题,我会从比较一般性的原理和准则出发,争取让所有人都能够有收获,至于一些具体的游戏产品设计的细节不会讲太多,这方面,如果有兴趣,可以私下交流。 OK,下面进入正题。首先,第一个问题,既然是讲到了游戏的商业化,那么,对于我们来说,游戏(电子游戏)的基本定义是什么? 这个课题,在游戏策划的领域,定义其实很多。但今天我们分享一下比较一般性的看法。首先,游戏软件是一种软件,有代码,有图片资源,运行在计算机上. 然后,游戏是一种偏重于交互性的软件,存在着大量频繁的人机交互,当然绝大多数软件都是交互性的,但游戏软件在这方面特别突出。 这里衍生一个问题,人机交互。

IT PHP/ 2012-05-17 23:28:23 / 累计浏览 10,218

fsockopen 异步处理

前面参与一项目,逻辑处理比较多,所以采用异步处理。 因为之前采用异步处理时 Web 服务器是 Apache,而这次测试时也是,到把代码更新到服务器上时,执行死活不成功。折腾一番之后,才记起服务器上的 Web 服务器是 Nginx。试着从这个角度查找原因,找到如下这篇文章: FROM: 有关fsockopen相关随笔 测试环境,从本机(Windows)访问内外一台 Linux 服务器(此服务器装的是 Nginx)。

IT Linux/ 2012-05-17 23:25:53 / 累计浏览 2,208

Linux操作系统的LILO详解

LILO是一个在Linux环境编写的Boot Loader程序(所以安装和配置它都要在Linux下)。它的主要功能就是引导Linux操作系统的启动。但是它不仅可以引导Linux,它还可以引导其他操作系统,如DOS,WINDOWS等等。它不但可以作为Linux分区的引导扇区内的启动程序,还可以放入MRB中完全控制Boot Loadr的全过程。下面让我们看看几种典型情况下硬盘的主引导扇区和各个分区的引导扇区内程序的内容。

IT Linux/ 2012-05-17 23:24:15 / 累计浏览 6,333

vim(gvim)支持对齐线

前段时间有朋友在微博上@ 我推荐了一款vim的插件,用来显示对齐线,感觉效果不错,就给大家推荐一下. 插件为: Indent Guides 截图如下: 一. 安装 不用多说,直接解压放到vimfiles or .vim下

IT 系统架构/ 2012-05-15 23:46:58 / 累计浏览 2,792

开发笔记 : 热更新

这几天我的工作是设计未来游戏服务器的热更新系统。 这部分的工作,我曾经在过去的一个项目中尝试过 。这些工作,在当时一段时间与广州网易其他项目交流时,也对网易其他项目的设计产生过一些影响,之后,也在实战中,各个项目组逐步发展出许多热更新的系统来。 我最近对之前所用到的一些方案,如修改 lua module 的加载策略,增加一些间接层,来达到热更新代码的系统设计做了一些思考。感觉在处理热更新这个问题时,还不够严谨。经过两天的思考,我按我的构思实现了新系统的雏形。 在函数式编程语言中,热更新通常比较容易实现。erlang , lisp 都把热升级做为核心特性之一。函数副作用越小的语言,越容易做热升级:你只需要简单的把新写的函数替换回去就好了。

IT 系统运维/ 2012-05-15 23:43:29 / 累计浏览 2,994

linux大磁盘分区工具parted

由于单块硬盘的容量不断增大,价格也很便宜,现在2TB的硬盘已经很常见,而传统的MBR方式存储使很多分区工具不能正常读取大于2TB的磁盘而无法分区大于2TB的磁盘,linux提供parted工具可以很好的支持大磁盘分区。 Parted和fdisk很相似,也是命令行工具,但是parted分区是实时的,只要开始执行分区,就实实在在的分区啦,而不像fdisk工具需要执行w后才开始分区,所以使用parted分区的时候一定要注意,看清楚在下手。

IT 系统运维/ 2012-05-15 23:42:34 / 累计浏览 4,530

将远程共享文件夹挂载到linux本地目录

今天客户提个新需求,负责扫描的公司提交的数据是存放在Windows虚拟机里,而虚拟机用的磁盘,物理主机无法直接挂载,这样扫描公司提交的图片就需要拷贝到本地磁盘上,一是数据量巨大,第一期需要进数据库的图片就10多T,需要很长的时间来拷贝,二是拷贝会生成落地图片,就需要进行MD5校验,这需要更多的时间,客户提的需求是,在不生成落地文件的情况下将图片加载到数据库,对于这种需求,我首先想到2种方法,一种是在虚拟机上安装ORACLE客户端,SQLLDR将虚拟机上的图片加载到远程数据库,这种方法由于Windows虚拟机不能给登录权限,并且这批数据只能开放读权限而被否定,第二种方法就是将Windows虚拟机上扫描公司提交的图片以共享文件夹的形式提交给我们,然后将Windows的共享文件夹挂载到本地(linux服务器)的目录,也就是相当于将Windows共享的文件夹映射到linux服务器的目录下。

IT Oracle/ 2012-05-15 23:41:40 / 累计浏览 4,653

如何正确安装ORACLE使ORACLE状态最优

学习ORACLE的第一步就是安装ORACLE,很多情况下DBA安装ORACLE的时候为了方便都是一路下一步的形式来安装,其实这样小小的偷懒可能会带来数据库性能问题,也会给DBA日后的维护增加工作量和复杂度。 在安装ORACLE的时候,ORACLE会提示很多组件是否安装,一些环境用不到的组件建议不要安装,多安装一个组件对磁盘来说就会多占用写空间,对ORACLE本身来说也多了些自动维护的对象,对DBA来说就意味着可能会遇到这些组件带来的性能和可用性问题,增加维护数据库的工作量。 下面是我的环境ORACLE的安装和建库的示例。

IT 算法/ 2012-05-15 23:39:26 / 累计浏览 7,967

C++ 多线程编程总结

在开发C++程序时,一般在吞吐量、并发、实时性上有较高的要求。设计C++程序时,总结起来可以从如下几点提高效率: 并发、异步、缓存。下面将我平常工作中遇到一些问题例举一二,其设计思想无非以上三点。

IT 系统运维/ 2012-05-15 23:37:21 / 累计浏览 7,882

三种东西永远不要放到数据库里

我已经在很多演讲里说过,改进你的系统的最好的方法是先避免做“蠢事”。我并不是说你或你开发的东西“蠢”,只是有些决定很容易被人们忽略掉其暗含的牵连,认识不到这样做对系统维护尤其是系统升级带来多大的麻烦。作为一个顾问,像这样的事情我到处都能见到,我还从来没有见过做出这样的决定的人有过好的结果的。 图片,文件,二进制数据 既然数据库支持BLOB类型的数据,把文件塞进BLOB字段里一定没有错了!?错,不是这样的!别的先不提,在很多数据库语言里,处理大字段都不是很容易。 把文件存放在数据库里有很多问题: 对数据库的读/写的速度永远都赶不上文件系统处理的速度 数据库备份变的巨大,越来越耗时间 对文件的访问需要穿越你的应用层和数据库层 这后两个是真正的杀手。把图片缩略图存到数据库里?很好,那你就不能使用nginx或其它类型的轻量级服务器来处理它们了。

IT 源码分析/ 2012-05-15 23:35:31 / 累计浏览 2,567

ERLANG OTP源码分析 – gen_fsm

gen_fsm和gen_server非常的类似, 在gen进程递归调用loop函数的过程中,除有StateData还额外有一个StateName的atom, 它决定了下次执行的函数. 另外一个不同之处是, gen_server程序是由调用进程向gen进程发送消息, 一种cs模式的调用关系,而gen_fsm程序中这个发送消息的通常都是gen进程本身.  init 初始化过程和gen_server很类似,  区别是init返回必须获得一个当前状态StateName, 这样才能继续接下来的事件处理.

IT 算法/ 2012-05-15 23:34:31 / 累计浏览 3,527

ERLANG OTP源码分析 – gen_server

阅读OTP源码可以帮助你写出更好、更健壮的erlang程序.下面一系列文章就gen_server、gen_fsm、supervisor的源码进行分析, 从erlang级别解释其工作原理, 所有的完整流程图在这里, 第一次写erlang方面博文有错误请帮忙指出. 为什么从gen_server它开始, 因为gen_fsm和它很类似, 而supervsisor本身是一个gen_server. init 图示为一个叫Mod的模块, 它是一个gen_server程序, 绿色方格为调用进程(客户进程), 黄色方格为spawn出的gen进程(服务进程). 不同的泳道表示函数所隶属的模块, 通过这个图可以清晰的看出各个模块至之间的相互调用, 图是使用gliffy所画。

IT 源码分析/ 2012-05-15 23:33:42 / 累计浏览 1,946

ERLANG OTP源码分析 – supervisor

supervisor实际上是基于gen_server的系统进程,监控子进程的退出状态并设置一定的重启机制。 init 在这个例子里Mod模块是一个sup程序,它的启动会调用supervisor:start_link,而start_link实际上调用的gen_server:start_link并存入Mod模块的名字和参数. 从前面的文章我们可以知道, spawn出来的gen进程会先调用supervisor:init函数. 接着把gen进程设置为系统进程, 这样就可以捕获子进程退出信号, 然后根据Args里的Mod模块名和参数,再次调用到Mod:init. Mod的init函数返回的是一个{ok, SupFlags, StartSpec}的元组. SupFlags是supervisor管理的进程的启动策略和可重启的范围窗口,StartSpec是一个列表,保存多个子进程的MFA等信息.

IT 系统运维/ 2012-05-15 23:31:31 / 累计浏览 4,170

一些队列理论 吞吐量、延迟和带宽

你有一个队列在Rabbit中。你有一些客户端从该队列消费。如果你完全不配置QoS设置(basic.qos),这样Rabbit将以网络和客户端容许的尽可能快地速度发送队列中的所有消息到客户端。因为消费者在自己的RAM中缓存所有的消息,他们的内存将暴涨。如果你查询Rabbit,可能出现队列中是空的,但可能有以百万计的未确认的消息,因为它们在客户端,等待客户端应用程序处理。如果您添加了一个新的消费者,没有消息保留在队列中以被发送到新的消费者。消息只是被缓存在现有客户中,并有可能在那很长一段时间,即使有其它变为可用的消费者可以更快处理这些消息。这很不理想。