自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Final小屋

as simple as possible...

  • 博客(39)
  • 收藏
  • 关注

原创 整理下自己写的常用库

整理了一下之前自己写的linux库. 有兴趣的可以自取: https://github.com/finaldie/final_libs , 有什么建议可以mail给我[email protected] libs contain:1. a fifo list ( lockfree in one production one consumer )2. hash table3

2011-11-15 13:08:40 721

原创 magicnote, 送给深度命令行中毒的同学们, 让指令流淌于指尖

话说像我等一类的码农门人手一个magicnote已经是标配了, 这本神奇的记事本记录着我们平时使用的各种命令以及临时备忘, 起初我们对它关爱有佳, 不过日子久了, 麻烦也就来了.  话说, 还记不记得很多时候我们随手写下一段记录, 但是想要用的时候却忘记了写在哪里了...  话说, 还记不记得很多时候这本神奇记事本由于记录的太多太多东西, 以至于很难找到我们想要的东西...  话说,

2012-12-21 11:16:10 2929

原创 http mock service

最近在研究一个bug的时候发现原有的模拟http response的系统功能有些缺失, 主要是缺少了对chunked response的支持, 而这个bug恰恰就是在这种情况下容易出现, 遂为了能让这个系统更灵活并易于我们自己维护, 写了这个新的系统, ok, 废话不多说了, 简单介绍下这个service的大致功能吧:  1. 支持指定长度的response  2. 支持chunked r

2012-12-02 14:07:26 2411

原创 AutoBuild系统的改进

Title: Upgrade Autobuild SystemAuthor: 胡钰璋 ( Yuzhang Hu )Email: hyzwowtools at gmail dot comPersonal blog address: Here  之前写了一篇文章算是AutoBuild Server的开篇, 上一篇已经叙述了如何利用git server搭建自动构建系统

2012-08-15 13:59:21 3292

原创 打造高效的日志系统 -- Thread-Caching 日志系统

Title: Thread Caching Log SystemAuthor: 胡钰璋 ( Yuzhang Hu )Email: hyzwowtools at gmail dot comCode Location: https://github.com/finaldie/final_libs/tree/0.2.0/flogTesting Code: https://github.c

2012-08-02 02:59:15 5140 1

原创 Why Git

很多次给人推荐使用Git(DVCS, 一个分布式版本控制系统)去管理自己的代码, 本周继续给公司的同事们介绍Git, 很开心能有更多人一起使用它.   本篇整理了一下, 适合那些想初步尝试Git, 又或者想尝试Git但公司的server又是SVN的朋友们, :D 希望有用.

2012-04-13 14:44:31 1483

原创 巧用未初始化的数组

personal blog: http://finaldie.com/wordpress/  email: [email protected]问题:  我们在写程序的时候, 经常会碰到重置一大块连续数组空间的问题, 我们把问题简单化, 比如有 "int array[N]" 这样的数组作为hash映射表, N是个非常大的数字, 当插入元素M的时候我们就令arr

2012-02-09 23:58:55 2953

原创 How to Write a Simple UnitTest Framework

personal blog: http://finaldie.com/wordpress/email: [email protected]    很多时候, 我们需要UnitTest帮助我们快速的发现代码修改中引发的问题, UnitTest的意义以及重要性已经无需重复, 那么在实际项目中, 我们会选取合适的UnitTest Framework帮助我们完成这项工作, 然而Unit

2011-12-06 14:00:57 754

原创 How to Make a AutoBuild System with Git Server

personal blog: http://finaldie.com/wordpress/emai: [email protected]  今天给大家分享一下最近自己的成果, 折腾了一个autobuild系统, 如果您和我有同样的需求, 不妨跟随我一起搭建一个这样的系统, easy and simple, have fun :)Why:  事情是这样开始的, 我自己

2011-11-29 00:58:59 3563

原创 Include C file

出自我的blog 原文链接:  http://finaldie.com/wordpress/?p=21    好吧, 看到标题你一定认为我犯了一个big mistake, 我没有遵循include .h标准范式去编写程序, 不过我还是想说说这里面的好处   现在我们有一个需求, 想要编写一套事件库以便适应不同的平台(linux, freebsd … ), OK, 这里有一个显然的问

2011-11-15 11:33:45 867

原创 Event & Network 设计思考

我的站点: http://finaldie.com/wordpress/mail: [email protected]自己之前写了一个网络库, 最初仅仅是为了练手, 后来用着还算顺手, 就直接用在自己的小项目里了, 不过最近查看libev和redis的代码, 自己反思了下, 得到了一些总结一些经验 之前在写这部分的时候, 直接把epoll的代码耦合在网络库里了, 也

2011-11-11 17:00:02 620

原创 Install Git on redhat

今天拿到redhat account, 兴奋之余自然要装进去一些自己平时用着舒服的工具, 不过发现git不在默认的yum源中, 而很多第三方源也都失效, 遂动起了邪念, 自己来吧....  查了些文章都提到如何去更新yum源, 不过仔细一看发现版本都很低, 而最新的已经出到了1.7.7, officical也没有提供rpm包, 想了想 还是download一份source, 自己make吧.

2011-10-19 18:02:24 819

原创 判断TCP连接异常

这阵子突然重新接手做了下关于TCP连接异常中断的检测, 这里的异常中断指的是目标主机断电, 网线被拔等非正常因素.  这个问题已经被处理很多年了, 无非2种基本解决策略:   1. 应用层心跳  2. 开启协议栈提供的keepalive, 这个和操作系统有关 有些操作

2011-08-04 17:19:29 2663 1

原创 关于基础架构的一些零碎问题的整理记录

  很久没有写了, 今天偶来兴致, 记录一下 :)   每款产品无论大小都会尤其所谓的架构设计, 从百度的搜索框架, sina的微博平台, 360的云杀毒服务, 这些基础架构都或多或少的展现了其雄厚的技术体系.  多少人能完整的了解所有架构设计, 往往很少. 不过能在一定层面上做到精益求精, 超凡脱俗实属佳品.   分布式计算体系中经常会遇到一台服务器上的请求数量爆炸式增长时内存不

2011-07-01 15:53:00 902 1

原创 网络负载控制的一点经验

前言:   重构了几次的网络库基本上没什么问题了, 从单线程改为多线程, 又从多线程改为单线程... 反反复复, 细小的地方权衡了很多次, 从简洁到复杂看不顺眼, 又重构为简洁优雅~ , OK, 扯了一堆还没进入正题, 主要唠叨一下遇到的问题和经验吧: 我们使用诸如libevent之类的网络库, 典型的用法是接受到数据包之后要一次性将数据读取完整(不完整的协议内容除外), 不过这有个问题, 一

2011-06-10 23:15:00 843 1

原创 私有name service 续

  这几天折腾了一下~ , 把这个服务程序搭了出来, 总结来说结构上十分简单, 线程池, 搭配getaddrinfo就可以了, 不过一涉及到队列就会有容量限制, 现在来看满足自己的需求是足够了, 不过毕竟getaddrinfo也是阻塞接口, 开了32个线程每个线程1M的队列也总会出现队列满的情况, 仔细想了想, 要么告知客户程序服务繁忙稍后再试, 要么在网络层面上就要予以阻塞, 不过这回导致客户端

2011-06-08 11:29:00 976 2

原创 建立私有的name service

前言: <br />  提到dns, 让我们想起了 gethostbyname, gethostbyaddr 相关函数(线程安全的使用 getaddrinfo, getnameinfo), 不过他们都是阻塞函数, 在服务器端我们还需要额外构建一个异步环境来支撑这些阻塞函数运行.<br /> 需求:<br />   这几天因为这些阻塞函数导致我想编写一个内部的name service, 开始想得是直接在引擎里开多个线程可以并发的处理大量的dns请求, 不过后来发现这样不但和引擎耦合起来, 还导致了引擎不必要的

2011-05-24 10:20:00 734

原创 用valgrind查找内存错误

  一直以来写程序还算比较稳健, 每个模块的集成都先通过大量的单元测试, 很少出现严重的内存错误, 不过百密难得一疏, 前几天在查找一处疑似内存泄露问题的时候测出一个段错误... 杯具... 查了大段大段的代码也没有发现异常(事实证明这是一种不仅低效而且存在思维定势的审查方式)... 无奈之下让我又想起了valgrind  果断开启valgrind, 添加参数 -v --tool=memcheck --leak-check=full  --log-file=memcheck.log, OK, 很快完成了一次

2011-05-19 11:26:00 1120

原创 基于epoll异步connect实现

  这几天写网络爬虫, 结果服务器长时间阻塞在connect上导致不可容忍的并发问题, 于是着手增加一个异步connect接口.  常规的实现手段为配合select进行检测, 不过其性能对于高并发时会有些问题,  如果想做到结构简单合理采用one per one thread的处理方式还会引发过多的线程上下文切换导致不必要的性能浪费, 故放弃使用select来实现.  由于服务器网络库采用epoll实现, 故此接口也基于epoll实现. 查阅了一些资料, 总结一下:  1. 设置socket为nonbloc

2011-05-06 17:45:00 11354 1

原创 .SVN清理脚本

<br />  前几天移动项目想要放到另外一个版本控制平台, 结果发现大量的.svn污染整个目录... 之前公司有个同事用python写了个脚本用于清理..., 想了下, 如果单在linux下使用直接用shell就足够了.. 遂写了个...<br /> <br />  #!/bin/sh#remove appoint dir all the .svnif [ $# != 1 ]; then echo "must input clean dir";else find $

2011-04-29 19:09:00 1337 1

原创 lua经验 math.huge

<br />  偶然间因为一个死循环的BUG发现, 原来math.huge通过C接口luaL_checkint获取的结果为0 ... 备忘  :)

2011-04-27 22:21:00 4752

原创 非侵入式mongodb async find patch

<br />  前阵子为mongodb的cdriver添加了一个async find补丁, 不过简陋的将源码插入其中.. , 觉得怎么看怎么别扭... 如果官方更新了... 就容易悲剧了, 所以, 为了自己不用老是跟着改动, 就单独的将patch分离出来, 没什么技术含量, 仅仅作为记录.<br /> <br />  mongo_async.h<br />  //base info: create by final/*effect: mongo db async query patch***

2011-04-19 23:31:00 1641

原创 Lua pairs与ipairs效率分析

介于大家目前有些人比较关心 lua table中pairs 和 ipairs的效率问题, 特此研究了一下... 如有不正 还需指出.. 首先来看下 lua中table的结构定义:table中分为2个存储空间, 一个是线性数组空间(TValue *array), 和一个hash空间(Node *node) 当我们使用 pairs 和 ipairs 会产生两种不同的迭代器, 一个仅仅遍历数组, 一个遍历所有的值所以, 当调用ipairs的时候, 在线性数组中遇到第一个nil时便停止遍历, 不管后面还是否有值,

2011-04-19 17:06:00 10801 2

原创 网络异常处理

  这几天总结了下, 对于网络断开连接时的注意事项.  总体来说有三种情况:  1. 对端网络异常, 这时候可以从读写时发现  2. 用户层写buff满  3. 用户主动关闭  为了保证更少的暴露接口给用户, 经过自己的推敲, 发现当出错时, 走正常的通知模式, 抛出一个error给用户回调, 用户看情况清理自己的数据, 网络层会定期询问该用户是否可以被删除, 因为此时可能会有数据库操作被挂起~ :)   这个定期询问的函数也是个回调, 需要用户自己编写~ , 通常用来检测是否有正在挂起的数据库操作~ ,

2011-04-17 00:41:00 1324

转载 gcc 编译选项

<br /><br />发现一个好贴... 赶紧收藏~ 有待今后研究学习~ <br />GCC 函式追蹤功能 finstrument-functions __attribute__ +用 Graphviz 可视化函数调用 <br />http://blog.csdn.net/unbutun/archive/2008/08/29/2849048.aspx

2011-04-16 12:00:00 495

原创 hash_tbl 改造续..

<br />  经过一晚上的倒腾... 终于重构好了hash_tbl, 思路和之前想的一样~ , 从索引头到冲突链都使用数组实现~ 结构如下:<br /> <br />  <br /> <br />  原来协议层也用的hash_tbl进行管理, 但因为协议是连续自增ID, 不存在动态变化的可能, 所以这块不使用hash_tbl管理了, 直接用静态数组进行映射.<br />  这样的话, 只有逻辑层发送协议的位置有通过hash_tbl查找具体的net_buff, 不过这块是hash_find, 并无大碍. 因

2011-04-15 16:27:00 641 1

原创 hash_tbl 结构改造

<br />  这两天正在为网络层制作负载均衡策略, 这个具体的细节会在今后逐步写出, 先来说说在测试负载均衡时遇到的一点问题.<br /> <br />  昨晚改好后, 负载均衡策略可以按照预期逻辑层指定的返回值进行继续通知或者挂起~, 从而让优先级更高连接类型获得更多的执行权. 但是测试的结果并不像预期那样美好, 虽然服务器不会因为buff不足而被迫断开连接, 但是运行效率依然和以前一样稳步下降, 这让我着实很恼火..., 于是直接加上 -pg参数开始profile...<br /> <br />  p

2011-04-14 14:10:00 638

原创 网络负载平衡改造(续2)

  昨天有点事耽误了... 今天又接着改造... , 在改造的时候遇到了一个之前就曾经发生的问题: 因为epoll_wait和event处理使用2个不同的线程, 这就导致了, 有可能出现, 当event处理线程释放该connection, 但是epoll_wait线程已经获取了该event通知, 并压入event处理线程, 当event处理线程再次处理该事件时, 会访问非法空间一致崩溃 ...  想了半天, 终于有了一个好想法, 因为现在所有的事件都有一个event_type, 但其容量很小, 这样就可以将

2011-04-13 19:05:00 669

原创 网络负载平衡改造(续)

<br />  昨晚, 构思了一下, 稍微写了一些, 总结一下经验和遇到的问题.<br /> <br />  首先, 为了既能平衡调度各个连接, 又能保持对epoll_wait的接受, 需要额外增加一个调度线程, 而原有调用epoll_wait的线程只用于投递请求, 请求模式依然使用LT, 这里使用ET模式可能会引发一些不必要的BUG.<br />  多增加了线程, 就要更加注意防范引用到野指针的危险, 这里对net_buff增加引用计数, 初始计数2, 当网络错误, 或对端关闭时, 逐步关闭socket通

2011-04-12 14:23:00 712

原创 改造网络负载平衡

  原因:     经过前几天的压力测试, 发现网络层处理消息有些问题, 定长的BUFF导致响应客户端请求的数量要远高于数据库返回的响应(因为客户端发送的协议数据长度很小, 而数据库返回的却很大, 在同样长度的BUFF内可以容纳更多的客户端请求, 打个比方, 平均响应100条客户端请求, 才能响应一条数据库请求, 这势必会造成服务器内部堆积了大量的不均衡请求对, 最终有可能导致服务器挂掉), 所以打算近期进行改造.   思路:     如果能让每条连接响应的协议数量可控, 则可以大大减少这种情况的发生. 那

2011-04-11 19:03:00 769

原创 socket IP地址转换接口

<br />#include <sys/socket.h><br /> #include <netinet/in.h><br /> #include <arpa/inet.h><br /> <br />int inet_aton(const char *cp, struct in_addr *inp);<br /> in_addr_t inet_addr(const char *cp);<br />char *inet_ntoa(struct in_addr in);<b

2011-04-11 13:53:00 942

原创 mongodb 增加数据库连接

<br />  只是一篇记录性的, 没有任何技术可言...<br />  昨天下午由于建立一条数据库连接造成数据库连接断开... 无奈之举, 我建立了更多的连接用于异步查询, 这回数据库倒是很乖巧了... 不过引擎呈现莫名其妙的波动.... 导致我不得不放慢客户端发送频率... 后续还有待查证具体原因...

2011-04-11 10:05:00 1097

原创 mongodb 压力测试问题

  昨晚在做压力测试的时候, 同步查询经过了4亿次的调用没有发现问题.. 平均每秒5000次查询请求.  但是在异步查询时, 发现了一个奇怪的现象, 数据库链接buf很快就处于阻塞状态... 导致请求都堆积在缓冲里... 很快数据库就会抛出一个断言错误... : [conn25] Assertion: 10334:Invalid BSONObj size: 0 (0x00000000) first element: est.user: ?type=1160x55ece9 0x4ede7e 0x5396d8

2011-04-10 14:13:00 4626 2

原创 mongodb 异步查询(续)

  承接前一篇, 服务器采用C编写, 逻辑层使用LUA, 搭配开源mongodb c driver开发异步查询接口.  有了上一次的改造, 这次来说说是如何使用改造后的接口实现异步查询.  首先, 再来理清一下思路, 现在的一次完整同步查询被拆分成3个步骤:  1.创建并发送请求  2.接受返回结果消息头  3.接受返回结果数据并做相应的回调处理   为此我们需要2个结构来处理这个过程:   typedef struct { int type; mongo

2011-04-08 02:53:00 5734 1

原创 mongodb C driver的异步查询

  最近在选用NOSQL数据库的时候最终选择了mongdb, 感觉其各方面都很优秀, 于是为服务器增加了一组mongodb的接口, 以方便LUA逻辑层使用.  驱动方面选用了官方指定的C DRIVER, 大家有兴趣的可以直接去mongodb的官网上查找, 不过查看了其mongo_find接口发现为同步调用, 这在服务器并发应用方面会受到限制, 通常服务器为了提高并发处理效率会使用异步接口. 开始的时候比较偷懒, 在其官网上留言想让其driver开发人员帮忙添加异步调用接口, 这事情也就先放下了... 2天过

2011-04-02 03:12:00 4800 1

原创 是时候改变一下了

当摩尔定律不在那么有效的时候, 我们是依然静观其变,还是努力的寻找解决办法? 多数人当然会说后者, 可实际上绝大部分还是安分守己的选择前者, 不光是传统的编程思想易学, 更重要的还是考虑成本的问题, 多数公司不太希望在创新上浪费太多的钱, 更多的愿意选择使用经过别人发布测试好的程序. 在工程上来讲这确实可取, 毕竟可靠稳定是第一因素, 其次才是性能. 不过时代确实改变了..... 处理器的发展速度朝着截然不同的方向前进, 鸵鸟算法不再适用的时代, 为什么还有这么多人争先恐后的争当鸵鸟.... 确实让我很不解

2010-10-13 11:33:00 616

原创 SOCKET基础

  呵呵,我的水平也只够写点基础的,如果你是高手,那么可以直接跳过了。。以免耽误时间。。。  本文的目的只是为了帮助新手更好的入门,消除一些疑虑。  SOCKET,顾名思义,套接字,插槽,为什么这么叫那,其实它是一种接口而生的结构体,就好像货车拉货,需要一个箱子来包装货物,它就是一种用于承载数据的介质,我们把数据放入其中,根据TCP/IP规则让我们来区分各个数据包的归宿,所谓规则就是IP+端口,只

2008-10-01 13:58:00 692

原创 多目录的makefile

  都已经21世纪了,怎么说程序也不能就一个文件不是,呵呵,郁闷几天,现在终于把这个问题解决了.  问题描述:现有2个.cpp文件,1个.h文件 分别放在lib和sources文件夹下,顶层makefile如何解决.o所需依赖的文件之间的编译问题?  解决方案:    看了很多帖子,发现使用了.d,然后再include进来就可以了,不过我试了,好像不怎么好用,郁闷啊...毕竟是人家的风格,可能我还

2008-08-29 05:36:00 4458 1

原创 夏令营...

             这段时间最值得回忆的当属这次夏令营了...其实当初去就是为了排除一些疑惑,本没打算学到什么东西,头几天给我的感觉确实让我很郁闷,不说他们的回答让我没有任何意外,就连形式也感觉安排的很仓促.天那叫一个热啊,好在寝室很凉快,不过这凉快也是有代价的--蚊子真是巨多,多到一天晚上整个胳膊上没好地方了...弄得后面几天最大的消遣就是挠痒痒...听了几天无聊的概述后也总算知道了大连就

2008-08-24 00:33:00 708

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除