您现在的位置:首页
--> 系统架构
对于buffer的设计,chaos和其他网络库的做法稍有不同,就拿libevent-stable-1.4.13(以下所提到libevent处皆为该版本)来说,它采用一种能够自动扩张的buffer,基本策略如下: 1. 当缓冲区不够存放新数据时,它会先在内部做marshal,看看是否能够腾挪出足够的空间 2. 假如没有满足,那么对buffer进行expand, 大小为原来的两倍,扩张之后该buffer就不会缩小...
由于之前工作用得是libevent和boost asio, 所以一直很想写一款基于自己设想的网络库, 并在某位大侠的鼓励下萌生了开发网络库的想法, 由于我的初衷是不打算使用任何第三方库, 从零开始完全自己编写, 故取名为chaos —无中生有, 始为混沌. 首先, Chaos是一个基于Linux平台, reactor模式的网络事件库, 目前仅支持TCP传输协议, 仅在x86_64下编译, 并遵循3-clause BSD开源协议. 在使用上, 可以说它很像boost asio, 可能是由于我对boost asio的接口设计很有爱吧, 而且对于boost asio在异步编程方面的思想, 我个人也比较认同, 但至今我也没有仔细阅读过boost asio的源码, 一是boost的模板化编程在可读性上让我比较折磨, 其二则是不想在对设计先入为主的情况下去开发chaos.......
“ZMQ(以下ZeroMQ简称ZMQ)是一个简单好用的传输层,像框架一样的一个socket library,他使得Socket编程更加简单、简洁和性能更高。是一个消息处理队列库,可在多个线程、内核和主机盒之间弹性伸缩。ZMQ的明确目标是“成为标准网络协议栈的一部分,之后进入Linux内核”。现在还未看到它们的成功。但是,它无疑是极具前景的、并且是人们更加需要的“传统”BSD套接字之上的一 层封装。ZMQ让编写高性能网络应用程序极为简单和有趣。” 近几年有关”Message Queue”的项目层出不穷,知名的就有十几种,这主要是因为后摩尔定律时代,分布式处理逐渐成为主流,业界需要一套标准来解决分布式计算环境中节点之间的消息通信。
对于服务器的优化,很多人都有自己的经验和见解,但就我观察,有两点常常会被人忽视 - 环境切换 和 Cache Line同步 问题,人们往往都会习惯性地把视线集中在尽力减少内存拷贝,减少IO次数这样的问题上,不可否认它们一样重要,但一个高性能服务器需要更细致地去考察这些问题,这个问题我将分成两篇文章来写: 1)从一些我们常用的用户空间函数,到linux内核代码的跟踪,来看一个环境切换是如何产生的 2)从实际数据来看它对我们程序的影响
挖掘新词的传统方法是,先对文本进行分词,然后猜测未能成功匹配的剩余片段就是新词。这似乎陷入了一个怪圈:分词的准确性本身就依赖于词库的完整性,如果词库中根本没有新词,我们又怎么能信任分词结果呢?此时,一种大胆的想法是,首先不依赖于任何已有的词库,仅仅根据词的共同特征,将一段大规模语料中可能成词的文本片段全部提取出来,不管它是新词还是旧词。然后,再把所有抽出来的词和已有词库进行比较,不就能找出新词了吗?有了抽词算法后,我们还能以词为单位做更多有趣的数据挖掘工作。这里,我所选用的语料是人人网 2011 年 12 月前半个月部分用户的状态。非常感谢人人网提供这份极具价值的网络语料。
在PHP开发中工作里非常多使用到超时处理到超时的场合,我说几个场景: 1. 异步获取数据如果某个后端数据源获取不成功则跳过,不影响整个页面展现 2. 为了保证Web服务器不会因为当个页面处理性能差而导致无法访问其他页面,则会对某些页面操作设置 3. 对于某些上传或者不确定处理时间的场合,则需要对整个流程中所有超时设置为无限,否则任何一个环节设置不当,都会导致莫名执行中断 4. 多个后端模块(MySQL、Memcached、HTTP接口),为了防止单个接口性能太差,导致整个前面获取数据太缓慢,影响页面打开速度,引起雪崩 5. 。。。
FFLIB 目前处于alpha阶段,一些有用的功能还需继续添加。但是FFLIB一开始就是为了解决实际问题而生。Broker 即可以以独立进程运行,也可以集成到某个特定的进程中启动。除了这些,FFLIB中使用epoll实现的网络层也极具参考价值。网上有一些关于epoll ET 和 LT的讨论,关于哪种方式更简单,本人的答案是ET。ET模式下epoll 就是一个完全状态机。开发者只需实现FD的read、write、error 三种状态即可。
今天把 Skynet 的集群部分,以及 RPC 协议设计实现完。 先谈谈集群的设计。 最终,我们希望整个 skynet 系统可以部署到多台物理机上。这样,单进程的 skynet 节点是不够满足需求的。我希望 skynet 单节点是围绕单进程运作的,这样服务间才可以以接近零成本的交换数据。这样,进程和进程间(通常部署到不同的物理机上)通讯就做成一个比较外围的设置就好了。 为了定位方便,我希望整个系统里,所有服务节点都有唯一 id 。那么最简单的方案就是限制有限的机器数量、同时设置中心服务器来协调。我用 32bit 的 id 来标识 skynet 上的服务节点。其中高 8 位是机器标识,低 24 位是同一台机器上的服务节点 id 。我们用简单的判断算法就可以知道一个 id 是远程 id 还是本地 id (只需要比较高 8 位就可以了)。
相比C, C++提供了更多的新的语法, 新的语言特性, 这也就是说, 需要更多的学习时间, 更大的学习成本. 举个例子, 大家看看C++ primer有多厚, 看完这些还不够, 因为还有很多的细节你可能会误用, 所以又有: “Effective C++”, “More Effective C++”, 哦, 还有STL, ” Effective STL”等等. 你真的愿意为了学习一门语言, 花费如此巨大的精力么?
目前HBase已经运用于淘宝主搜索的全量和增量的数据存储,有效的减低的数据库的压力,增强了业务扩展的能力。Dump系统的特点是要求在短时间内处理大量数据,对延时要求高。在实施这个项目过程中,我们积累了一些优化的实践,抛砖引玉,供大家参考。环境:Hadoop CDH3U4 + HBase 0.92.1 1、 尽可能用LZO 数据使用LZO,不仅可以节省存储空间尤其是可以提高传输的效率,因为数据是在regionserver端作解压的。通过测试,可以明显提高HBASE从HDFS的读的性能。尽量不用GZ的方式,GZ的方式在bulkload时有线程安全问题。 2、 根据场景调整Block size 由于使用我们非常关注随机读的性能,一条记录的长度较小,通过设置blocksize=8k,可以提高随机读的性能。
websocket: WebSocket 规范的目标是在浏览器中实现和服务器端双向通信.双向通信可以拓展浏览器上的应用类型. 它是基于 TCP链接的 全双工通讯,但与普通的TCP又不同,它提供的是消息流,而不是字节流。基于 HTTP 长连接的“服务器推”技术这项技术是在Ajax之后 备受追捧的一项技术,推送技术Server Push的基础思想是将浏览器主动查询信息改为服务器主动发送信息。服务器发送一批数据,浏览器显示这些数据,同时保证与服务器的连接。当服务器需要再次发送一批数据时,浏览器显示数据并保持连接。以后,服务器仍然可以发送批量数据,浏览器继续显示数据,依次类推。客户端拉曳(Client Pull) 在客户端拖曳技术中,服务器发送一批数据,在HTTP响应或文档头标记中插入指令,让浏览器“在5秒内再次装入这些数据”或“10秒内前往某URL装入数据”。
三年来一直从事服务器程序开发,一直都是忙忙碌碌,不久前结束了职业生涯的第一份工作,有了一个礼拜的休息时间,终于可以写写总结了。于是把以前的开源代码做了整理和优化,这就是FFLIB。虽然这边总结看起来像日记,有很多废话,但是此文仍然是有很大针对性的。针对服务器开发中常见的问题,如多线程并发、消息转发、异步、性能优化、单元测试,提出自己的见解。 面对的问题 从事开发工程中,遇到过不少问题,很多时候由于时间紧迫,没有使用优雅的方案。在跟业内的一些朋友交流过程中,我也意识到有些问题是大家都存在的。
(H2与HBase)面向行or面向列的存储模型? 目录 0. 示例 1. H2怎么存储pet表的记录? 1. 1 DATA_LEAF页格式 1. 2 DATA_NODE页格式 2. HBase怎么存储pet表的记录? 2. 1 Data Block格式 2. 2 Data Block如何存下面这些记录? 2. 3 leaf索引块的格式: 2. 4 root索引块的格式: 2. 5 IntermediateLevel索引块
最早lucene2.4以及以前,追溯到2008年前后,lucene刚刚引起大家的关注,到后来Nutch 、solr的出现,lucene变得更加热。Nutch、Solr的发展,极大推动了lucene的升级。 对于一些接触过搜索,使用过lucene、solr的人来说,一般都会感觉lucene、solr很牛逼。我个人也认为solr、lucene确实非常NB,他涵盖了信息检索的几乎全部基础知识和非常高性能的实现方式。从solr的结构,扩展、维护整体看,发现有非常多的“工程亮点”,熟读solr定会增加对java的理解、运用技能。 但是,其实lucene solr有其自身的一些局限性,而这些局限性在大数据量的时候显得更为明显。
建立一套独立的邮件发送系统真的是一件非常繁琐的事情,以下为网上收集的关于建立邮件系统需要注意的点: 一、给服务器分配一个静态的IP地址,并且确保IP地址不在邮件黑名单中。 Spamhaus是目前世界上影响最大反垃圾邮件组织,只要被它列入黑名单,你的邮件服务器就算瘫痪了,因为据说全球80%以上的服 务器会拒收从你的邮件服务器发去邮件。他们提供四种类型XBL,SBL,PBL,ROKSO。国内有很多IP被列为了spamhaus这几类RBL当中。 Spamhaus维护的列表分类 XBL(Exploits Block List):它是针对因为安全问题被劫持(比如僵尸机)或是蠕虫/病毒,带有内置式垃圾邮件引擎和其他类型的木马来发垃圾邮机器的实时黑名单IP列表。
在当前这个互联网业务飞速发展时期,新的产品如雨后春笋般涌出,老产品线新业务也在不断突破和尝试。这就对快速开发迭代提出了更高的要求。一、基础运行环境针对新产品的开发,必须能够快速搭建一套LAMP架构。那么无外乎选择一个webserver,选择一个php版本,选择一个mysql版本,再选择一个PHP开发框架和选择一些php通用扩展和基础库等。这个过程读者可能觉得已经很快了,能不能更快?选择的过程要求研发同学对相关技术方向有一定的积累,权衡利弊和优先点,又是一番调研和学习。如果有一键安装程序,提供自动化安装webserver,php,mysql,以及携带高性能灵活的php开发框架,并提供标准化、安全、常用的配置文件,可以大大缩短产品线LAMP系统调研的成本,缩短工作周期。
在过去的几年间,我们一直致力于重构Digg的架构,现在我们称之为“Digg V4”.本文我们将全面介绍Digg的使用的系统和技术。找出Digg引擎的秘密。 首先,我们来看下Digg给大众用户提供的服务吧: 一个社会化的新闻站点 为个人可定制的社会新闻 广告平台 API 服务 博客和文档站点 人们通过浏览器或者其他应用来访问这些Digg服务。一些有Digg账户的用户,可以得到“我的新闻”。每位用户可以得到的我们称之为“热门新闻”。我们有digg.com和移动版的m.digg.com,API服务的services.digg.com,信息介绍的about.digg.com,为开发者服务的developers.digg.com。这些站点统一为用户,新闻发布者,开发人员提供了博客和文档服务。 本文主要介绍Digg在社会化新闻产品中使用的高级技术。
Gecko是一套网络排版引擎,由来已久,为当年大名鼎鼎的netscape网络浏览器流传而来,后面也成为了firefox浏览器,thunderbird等等软件的基础。详细的发展历程在这里就不展开做具体介绍了,读者可以自行查阅百度百科,维基百科等资料。在这一章我们重点介绍一下gecko中是如何对全球各种不同的网页文档的编码方式来做出识别和转换的。我们知道,netscape或者firefox是面向全球用户的,并且,在互联网的世界,并没有什么界限妨碍一个美国的用户访问中文或者日文的网页。所以,在这种场景下,浏览器是否能正确识别每个地区的网页的编码格式,并正确地显示出来,就尤为重要了。
近3天十大热文
- [68] IOS安全–浅谈关于IOS加固的几种方法
- [66] Twitter/微博客的学习摘要
- [64] 如何拿下简短的域名
- [61] android 开发入门
- [60] find命令的一点注意事项
- [59] Go Reflect 性能
- [57] 流程管理与用户研究
- [56] Oracle MTS模式下 进程地址与会话信
- [56] 图书馆的世界纪录
- [55] 读书笔记-壹百度:百度十年千倍的29条法则
赞助商广告