摘要:
使用gdb调试时,有的函数只在某些路径上会执行到,而触发这些路径执行的条件构造起来比较麻烦,比如某个server在接收到READ请求时,会调用do_read进行响应,这时如果我们想调试do_read函数,就必须在客户端构造一个READ请求来触发。
int do_read(const ReadRequest& req); 假设我们知道do_read调用时参数ReadRequest的具体内容,能否直... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(2411)
评论(0)
推荐(0)
摘要:
block标识
TFS每个block有一个唯一标识,目前的实现是一个uint32_t的整数id,每次新增一个block,就会为其分配新的id,具体实现方式是保存一个全局global_block_id的值,每次分配时就直接将这个值加1做为新的blockid;代码实现大致如下,每次需要分配时就调用generate函数。
class BlockIdFactory {
public: uint32_... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(550)
评论(0)
推荐(0)
摘要:
去年写过一篇tbnet的分析文章,主要介绍tbnet(获取源代码)框架结构及基本使用方法,最近又重读了下源码,有一些新的收获。
连接是核心
tbnet框架围绕网络连接(对应Connection类)展开,Connection主要包含如下成员。
class Connection { bool _isServer; ... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(1885)
评论(0)
推荐(0)
摘要:
google开源的gflags是一套命令行参数解析工具,比getopt功能更强大,使用起来更加方便,gflags还支持从环境变量、配置文件读取参数(可用gflags代替配置文件)。本文简单介绍gflags的使用,内容主要译自 http://gflags.googlecode.com/svn/trunk/doc/gflags.html 。 定义参数 使用flags需要包含头文件 #i... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(677)
评论(0)
推荐(0)
摘要:
linux socket使用16bit无符号整型表示端口号,最大到65535。关于端口号,有一个经典的误解就是,因为端口号有限,所以一个客户端最多建立65536个socket连接,但实际上并不是这么回事,端口是可以复用的。 一个socket连接是一个[srcip, srcport, destip, destport]组成的四元组,如果再算上协议(tcp、udp、rawsocket等)就是五... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(2906)
评论(0)
推荐(0)
摘要:
2012年,结束了长达19年的校园生活长跑,走上了工作岗位,开始人生一个新的起点。我的工作其实跟在实验室差不多,依然是分布式存储领域,公司简单的同事关系就跟在学校同学一般纯真,每天上班依旧是一辆破自行车,甚至连距离都跟宿舍去实验室差不多,还有在学校的同学雷雷、小鳄、宝仔在同一个组工作。 新人学习 入职后加入TFS(Taobao File System)项目组... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(182)
评论(0)
推荐(0)
摘要:
SNIA的云存储标准(Cloud Data Mamangement Interface,CDMI)出来有一段时间了,目前云存储战场竞争激烈,标准的到来给云存储服务提供了指导作用,期待未来有美好的一天,所有的云存储提供商都遵循这个标准,让标准真正的发挥作用,让互联网用户受益。 理想很丰满,现实很骨感,制定标准跟标准落地还有很长的一段距离,标准的合理性首先需要得到检验并不断的改善,而... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(519)
评论(0)
推荐(0)
摘要:
近半年在做分布式系统开发的同时,也做了不少的测试工作,软件工程教科书上描述软件项目的流程,基本上都会提到单元测试、集成测试、压力测试等名词,但对这些词汇一直停留在理论认识阶段。研究生阶段做的项目,因为要求不高,基本上也没做什么测试工作;去年在实习的时候,因为时间有限,主要接触单元测试和系统功能测试;直到现在才把这些词汇都近距离的感受了一下。
单元测试
分布式系统的开发工作通常会被划分成多个模块,由... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(1625)
评论(0)
推荐(0)
摘要:
最近写博客的频度远不如以前,主要是想要求自己尽量保证每篇博文的质量,每次想写博客的时候,就发现想写的内容很简单(浅薄),根本不值一写,于是就搁置了。平时关注互联网的内容也比较多,没有明确的主题,单独写出一篇博客的确不值,所以就准备把零散的想法组织到一起记录下来,今天就先从微信公众平台说起。
微信公众平台
微信刚火起来那会,大家都用微信发语音短信,那会我没有智能手机,只能在一边羡慕嫉妒恨,当时对微信... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(268)
评论(0)
推荐(0)
摘要:
使用wordpress一年多了,各种折腾,虽离预期有距离,但目前简洁的主题加上一些常用的插件,已经基本满足我的要求,今天将我使用的一些插件介绍给大家,并分享一些使用经验。
封杀广告评论
akismet,这个必须有,不然每天会有一大堆的评论出现在你的文章里,按理说文章评论多应该是好事呀,但可惜这些都是垃圾评论,里面大都是一堆广告链接,如果任由这些广告评论猖獗下去,你的博客就会变得“你自己都看不下去了... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(409)
评论(0)
推荐(0)
摘要:
Blobstore是twitter的图片存储系统,主要参考twitter员工博客及其译文,译文基本是按照字面进行翻译,部分地方理解有些问题,比如文中提到的“每秒上千万张吞吐量的图片请求”,而英文原文是hundreds of thousands of,翻译为上千万显然是很误导读者的;本文主要谈谈我对blobstore的理解,如有问题请指出。
相比facebook的haystack、以及taobao的... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(921)
评论(0)
推荐(0)
摘要:
春节回家,发现网络这个词被提起的频率越来越高了,年前就准备写一篇农村与互联网相关的博文,但由于家里没有网络,一直拖到今天上班,刚在微博上看到腾讯科技的特别策划对话另一个世界-三四线地区人群互联网真实状态调查。看了几篇文章,发现腾讯的工作人员做了很多工作,深入三四线地区进行实地采访,非常有意义的策划活动,让更多的人了解到“他们的世界”。
基本现状
他们的世界跟我了解到的差不多,在我的家乡(典型的贫困... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(451)
评论(0)
推荐(0)
摘要:
HTTP推荐阅读资料 HTTP权威指南:详细介绍HTTP协议相关的细节,非常值得一读。
HTTP wiki:维基百科你懂的,该页面还提供了很多相关链接扩展阅读。
HTTP协议详解:快速了解HTTP协议基本知识。
理解HTTP协议:内容同上,但讲解更加详细具体。
HTTP cookie:全面解读HTTP cookie
HTTP协议之代理:解析HTTP与代理,很多配图,挺生动。
CGI/FAST C... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(171)
评论(0)
推荐(0)
摘要:
昨天下午线上辅集群加机器扩容,扩容的机器在运行一段时间后线上有block lost的告警,从Nameserver(NS)的日志上发现,扩容的新机器上有多次加入集群和退出集群的记录,最初我怀疑是扩容后,集群做容量负载均衡,大量数据往新加入的节点迁移,导致新机器负载高,从而出现心跳信息没有及时到达NS的情况,此时NS认为Dataserver(DS)宕机,如果有一个block的多个副本都被迁入到新扩容的... 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(262)
评论(0)
推荐(0)
摘要:
12月03日03:50左右,有多台Dataserver(DS)内存占用飙升,如10.246.70.71 dataserver 3,常驻内存突然飙升到21G,并且一直没有释放。查看dataserver的日志,发现大量的read v2失败 ,返回值主要是-8025(block不存在), -8016(文件被删除或隐藏)。但这些失败信息从0点开始一直很多,而且这两种失败不会导致DS分配很多内存,所以应该跟内存问题没关系。在3:50左右5分钟内,发现readv2 success的日志很多,主要集中在3:48,3:49,3:50这3分钟内,3分钟的readv2请求超过4w,平均每秒200+,每个文件请求都 阅读全文
posted @ 2013-04-19 14:14
ydzhang
阅读(334)
评论(0)
推荐(0)
摘要:
core文件对问题查找非常有帮助,大部分时候我们能根据core文件直接定位到问题,但当出现内存乱掉的情况时,core的backtrace可能也不能指出问题源头。最近线上问题较多,针对dataserver出现的问题做个总结:1. 如果在read/write时coredump,则多是因为磁盘故障(或是文件系统崩溃),IO的一些严重问题可通过dmesg查看,如果出现Medium Error,EXT4-fs error(device sdx), Device offlined, I/O error, rejecting I/O to dead device之类的关键字,就说明磁盘已经出问题了,如果是文 阅读全文
posted @ 2013-04-19 14:13
ydzhang
阅读(616)
评论(0)
推荐(0)
摘要:
分布式文件系统主要用于解决海量数据存储的问题,如Goolge、Facebook等大型互联网企业都使用分布式文件系统作为数据存储的基础设施,并在其上构建很多服务,分布式文件系统通常采用三副本的策略来保证数据的可靠性,但随着应用数据量的不断膨胀,三副本策略为可靠性牺牲的存储空间也越来越大,如何在不降低数据可靠性的基础上,进一步降低存储空间成本? Facebook将erasure code应用到内部HDFS集群中,该方案使用erasure code代替传统的三副本策略,在保持集群可用性不变的情况下,节省了数PB的存储空间,Facebook的实现方案(HDFS RAID)目前已贡献给开源社区。Eras 阅读全文
posted @ 2013-04-19 14:13
ydzhang
阅读(506)
评论(0)
推荐(0)
摘要:
Nameserver(NS)是TFS的总控节,NS的主要职责包括为写分配block、为读查找block、管理block与dataserver对应关系、管理dataserver、备NS状态,执行后台复制、均衡、压缩任务,以保证整个集群良好的工作。Block分配NS接收到客户端的写请求,会分配一个可写的block,如果没有可写block,则会创建一个新的block,每个block由一个id标识(uint32_t,后续会将该值提升至uint64_t),blockid不能重复,且不复用,新创建的block,在当前id的基础上递增,产生新的blockid。为了保证产生不重复的blockid,必须将blo 阅读全文
posted @ 2013-04-19 14:13
ydzhang
阅读(618)
评论(0)
推荐(0)
摘要:
学习篇 1.科研方面基本没接触新的内容,仍然把学习重点定在分布式技术及应用方面。把经典的几篇论文(GFS、Bigtable、Dynamo、Zookeeper …)重新研读了几次,结合网上技术博客的分析,对分布式系统的理解稍稍有些加深。 2.项目方面根据Spyglass和Meggllan两篇论文的思路,实现了一个元数据检索系统原型,后将其扩展并作为我毕业论文的课题。 3.持续关注Nosql方面... 阅读全文
posted @ 2013-04-19 14:13
ydzhang
阅读(234)
评论(0)
推荐(0)
摘要:
本地文件系统如ext3,reiserfs等(这里不讨论基于内存的文件系统),它们管理本地的磁盘存储资源、提供文件到存储位置的映射,并抽象出一套文件访问接口供用户使用。但随着互联网企业的高速发展,这些企业对数据存储的要求越来越高,而且模式各异,如淘宝主站的大量商品图片,其特点是文件较小,但数量巨大;而类似于youtube,优酷这样的视频服务网站,其后台存储着大量的视频文件,尺寸大多在数十兆到数吉... 阅读全文
posted @ 2013-04-19 14:13
ydzhang
阅读(363)
评论(0)
推荐(0)