七月 19th, 2010Facebook背后的软件

Facebook的数据规模使得很多传统的解决方案根本不适用,或者无法分解来处理。保持一个拥有5亿用户的系统一直稳定可靠的运行,并不是一件很容易的事情。这篇文章介绍了一下Facebook使用的软件。
 
Facebook的扩展性挑战
 
在我们讨论细节之前,这里有一些Facebook已经做的软件规模:
 
> Facebook有570000000000每月页面浏览量 (据Google Ad Planner)。
 
> Facebook的照片量比其他所有图片网站加起来还多(包括Flickr等网站)。
 
> 每个月超过30亿张照片被上传。
 
> Facebook的系统服务每秒处理120万张照片 。 这不包括CDN服务中处理的照片。
 
> 每月超过25亿条的内容 (状态更新,评论等)被共享。
 
> Facebook有超过30,000服务器 (这个数字是去年的!)
 
Facebook扩展所依赖的软件
 
Facebook是在某些程度上说仍然是LAMP的站点,但它比普通的LAMP大得多,以纳入其他元素和很多服务,并修改现行的做法。
 
例如:
 
> Facebook也使用PHP,但它已经为它建立一个编译器,以便它可以分为本地代码打开了Web服务器,从而提高性能。
 
> Facebook也使用Linux,但它特别为网络吞吐量做了优化。
 
> Facebook也使用MySQL,但主要是作为一个Key-value的持久性存储,Jions和服务器逻辑操作在Web服务器上操作。因为在那里更容易执行。
 
> 还有是自编写的系统,如Haystack,一个高度可扩展的对象存储,用来存储Facebook的照片。还有Scribe,一个日志系统,可以运行在Facebook的巨大规模上的日志系统。
 
OK。现在 我们介绍一下全球最大的社会网络网站的所使用的软件吧。
 
Memcached
 
memcached的
是现在互联网最有名的软件之一了。 这是一个分布式内存缓存系统,用来作为Web服务器和MySQL服务器之间的缓存层(因为数据库访问比较慢)。
多年以来,Facebook已经提出了一些优化Memcached和一些周边软件的办法。如压缩network stack。
 
Facebook的每时每刻都有数10TB的数据缓存在Memcached的数千台服务器上。 它可能是世界上最大的Memcached的集群了。
 
HipHop for PHP
 
PHP作为一种脚本语言,和本地程序相比是运行缓慢的。 HipHop可以将PHP转换成C++代码,然后再进行编译,可以获得更好的性能。 因为Facebook严重依赖PHP,这使得其可以让Web服务器运行的更有效率。
 
一个工程师小团队在Facebook(一开始只有三人)花了18个月时间开发HipHop,现在已经是可用状态。
 
Haystack
 
Haystack是Facebook的高性能照片存储/检索系统(严格来说,是一个对象存储,因此它并不一定要存储照片)。 它有许多工作要做;有超过20亿张上传的照片,并且每一个被保存在四个不同的分辨率,因此有超过800亿张照片。
 
它不仅是对能够处理的上亿的照片,运行表现也是至关重要的。 正如我们前面提到的,Facebook的服务约120万张照片每秒 ,这个数字不包括CDN上的。 这是一个惊人的数字。
 
BigPipe
 
BigPipe是Facebook开发的一个动态的网页服务系统。 Facebook使用它来按section(称为“pagelets”)处理每个网页,以获取最佳性能。
 
例如,在聊天窗口是分开的,新闻Feed也是分开的,等等。 这些pagelets可以在一个页面表现的时候同时使用,这是该页面表现的时候获取进来的。即使某些工程的一部分关闭或中端,用户也可以获得一部分网页。
 
Cassandra
 
Cassandra是一个不会单点失败的分布式存储系统。 这是为NoSQL运动的一个重要组成部分,并已公开的源代码(它甚至成为一个Apache项目)。Facebook在搜索功能中使用它。
 
除了Facebook,还有一些人也用它,例如Digg的。 不过最近Twitter放弃了cassandra。
 
Scribe
 
Scribe是一个灵活的日志系统,Facebook在他的内部大量使用。 它的能够处理在Facebook的大规模日志记录,并自动处理新的日志记录类别,Facebook有数百个日志类别(categories)。
 
Hadoop and Hive
 
Hadoop的是一个开源的map-reduce实现,使得它可以在进行大数据上进行运算。 Facebook的使用这个进行数据分析(而我们都知道,Facebook已经大量的数据)。 Hive就是发源于Facebook,使得对于Hadoop使用的SQL查询成为可能,从而是其更容易对非程序员使用。
 
Hadoop和Hive是开源的(Apache项目),有为数众多的追随者,例如雅虎和Twitter。
 
Thrift
 
Facebook使用的几种不同的语言和不同的services。 PHP是最终用于前端,Erlang是用于聊天,Java和C ++也使用于多种场所,也许还有其他语言。Thrift是一个内部开发的跨语言的框架,联系语言,使他们可以在一起合作,从而使他们之间可以交互。 这使得Facebook可以更容易为继续保持其跨语言的发展。
 
Facebook已经让Thrift开源。更多的语言支持已被添加到Thrift。
 
Varnish
 
Varnish是一个HTTP加速器,可以作为一个负载平衡器,并缓存的内容,然后可以以闪电般的速度送达。
 
Facebook使用的arnish来处理照片和个人资料图片,处理每天数十亿的要求。 和其他的东西一样,Varnish是开源的。
 
保持Facebook 顺畅运行的其他东西。
 
我们已经提到的软件,组成了Facebook的系统,并帮助运行在大规模上。 但是,处理这么大的系统是一个复杂的任务,因此我们将列出一些其他的东西,他们保持了Facebook的平稳运行。
 
渐进发布和暗启动
 
Facebook有一个他们所谓的守门人制度(Gatekeeper),允许他们可以给不同的用户运行两套不同的系统。 这让Facebook渐进的发布新的功能,A / B测试,只为Facebook雇员发布等的某些特性。
Gatekeeper
也可以让Facebook实现“暗启动”,这是在用户使用一些功能之前,就激活某些功能(因为用户没有察觉,所以称之为暗启动)。
这将作为一个现实世界的压力测试,在正式启动前,帮助揭露一些功能障碍和其他问题。 暗启动通常是在正式启动前两个星期。
 
Profiling的直播系统
 
Facebook的仔细监控其系统,有趣的是它也负责监察每一个PHP函数在生产环境的性能。 检测各个PHP的环境的配置运行情况。使用开源工具,XHProf 。
 
渐进的利用关闭功能来提升性能
 
如果Facebook运行时出现性能问题,有一个办法,就是逐步禁用不太重要的功能,以增强Facebook的大量核心功能表现。
 
我们没有提及的事情
 
我们没有提到硬件相关的事情,但这也是提高可伸缩性的重要一环。例如,就像其他大型站点,Facebook利用CDN来处理静态内容。Facebook还有一个the huge data center,可以帮助他扩展更多的服务。
 
Facebook的开源情节
 
不仅是Facebook使用(和帮助),如Linux,Memcached的,MySQL和Hadoop的开源软件,以及许多其他情况下,也贡献许多了其内部开发的软件。
 
Facebook亦开源了Tornado,一个高性能的网络服务器框架,由FriendFeed团队开发。
 
关于开放源码软件清单,可以在Facebook’s Open [...]

六月 18th, 2010开源Web流量分析工具

  Web 流量分析工具多不胜数,从 WebTrends 这样专业而昂贵的,到 Google Analytics 这样强大而免费的,从需要在服务器端单独部署的,到可以从前端集成的,不一而足。本文收集并介绍了10个功能强大的开源 Web 流量分析工具,因为是开源的,因此可以免费部署到你的网站。
  TraceWatch

  TraceWatch 是一个开源 Web 流量分析程序,支持实时分析,可以提供深度分析报告。
  SlimStat

  基于 PHP-MySQL,同时,可以像 Google Analytics 那样,通过 JavaScript 或 PHP 脚本集成到网站。
  Piwik

  可以生成站点的详细的实时访问报告,基于 PHP 和 MySQL,也可以像 Google Analytics 那样在前端集成。
  Open Web Analytics

基于 PHP,内置对 WordPress,Gallery 以及 MediaWiki 的支持。
  W3Perl

W3Perl 是一个 Web Log 分析工具。
  CrawlTrack

  CrawTrack 是一个很好的 Google Analytics 的开源替用品,提供非常独特的报告,比如,CrawTrack 可以帮你预防诸如 SQL 注射一类的攻击。
  BBClone

BBClone 是一个 Web 计数器,可以提供很详细的访问报告。基于 PHP。
  PhpMyVisites

  基于 GNU/GPL 开源协议,可以提供很详细的,有关访问者信息的报告,它的 GUI 界面很有趣而且实用,安装也很简单。
  AWStats

  可以提供非常强大的,关于网站,FTP 站点,乃至 Email 服务器的访问分析报告,基于 [...]

六月 3rd, 2010自动SVN

@echo off
for /l %%x in (1,1,50000000000) do (
timeout /T 3 /nobreak
"C:\Program Files\CollabNet\Subversion Client\svn.exe" update "E:\c.51yx.com"
echo %%x
)
pause

当你在使用电脑时突然碰到了问题自己解决不了,那么我们可以通过远程协助来让网友解决。首先,如果网友和你在同一个局域网中你可以使用的就是Windows 的远程桌面功能。如果你不在局域网中,并且只有一个Internet 连接。你可以通过其他的远程协助软件从互联网中得到网友的帮助。这里我们列出九款免费的Windows远程协助软件。
 
1。 Team Viewer:TeamViewer是一个既简单又友好的远程协助工具。您可以通过它远程控制对方的桌面,在线帮助对方,也可以让对方看你的屏 幕,无需担心防火墙,IP地址和NAT。

2。 CrossLoop:CrossLoop 是另一个免费的远程协助工具,该软件需要两个人都安装它。有关CrossLoop的更多内容可以在 这里看到。

3.LogMeIn:LogMeIn是 一个免费的应用程序,一般在你想让自己的电脑被其他的电脑通过互联网远程控制时使用。通过互联网对方可以完全控制你整个电脑。之前我们曾在这个博客中提到 过LogMeIn。

4.Mikogo:这是另一种易 于使用的跨平台桌面共享工具,非常适合网络会议,在线会议或远程协助。而且它对商业和私人使用都免费。

5.ShowMyPC:ShowMyPC 提供即时协作工具,也是个免费软件。软件功能包括桌面共享,屏幕录制,远程PC访问。

 
6.YuuGuu:这是 另一个有用的远程桌面应用程序,支持Windows以及Mac OSX的平台。

7.UltraVNC:ultravnc 是一个功能强大,易于使用的免费软件,可以在你自己的屏幕上显示另一台电脑的屏幕(通过互联网或局域网)。该软件允许你使用鼠标和键盘来远程控制其他电 脑。

8.TightVNC:另一 个免费的远程控制软件。通过TightVNC,你可以像坐在自己的电脑前一样,看到并使用本地的鼠标和电脑控制远程电脑的桌面。它也是免费的。

9.EchoVNC:EchoVNC 是一种既安全,“又对防火墙友好的”远程桌面控制工具,支持VNC,Radmin服务器和查看对方桌面功能。有了它,Windows系统的PC和Mac OSX系统的苹果机都可以无视防火墙,路由器和网络代理配置互相进行远程控制。

/**
* 读取文件前几个字节 判断文件类型
*
* @return String
*/
function checkTitle($filename) {
    $file = fopen ( $filename, rb );
    $bin = fread ( $file, 2 ); //只读2字节
    fclose ( $file );
    $strInfo = @unpack ( c2chars, $bin );
    $typeCode = intval ( $strInfo ['chars1'] . $strInfo ['chars2'] );
    $fileType = ”;
    switch ($typeCode) {
      [...]

windows上的nginx+php+mysql套装wnpmserver,当前版本

nginx
v0.8.35
(2010-4-14)

php
v5.3.2 (nts)
(2010-3-23)

mysql
5.5.3 m3
(2010-4-14)

下载地址:http://wnpmserver.googlecode.com/files/wnpm.7z
项目地址:http://code.google.com/p/wnpmserver/
注意:需要.net 支持

四月 15th, 2010jQuery 表格工具集

本文搜集了大量 jQuery 表格插件,帮助 Web 设计者更好地驾御 HTML 表格,你可以对表格进行横向和竖向排序,设置固定表头,对表格进行搜索,对大表格进行分页,对表格进行滚动,拖放操作等等。这些插件很多都包含详细的教程。
jQuery 表格插件
Flexigrid – Web 2.0 Javscript Grid for jQuery - 可变列宽,自动适应表头宽度,可通过 Ajax 连接 XML 数据源,类似 Ext Grid,但基于 jQuery 因此更轻量小巧。

Chromatable JQuery Plugin - 固定表头,可滚动内容区,内容区滚动的时候表头位置保持不变。

Ingrid, the jQuery Datagrid - 在 HTML 表格上加入列宽调整,分页,排序,行列式样等功能(演示)。

JQTreeTable - 在表格中加入树形结构

Scrollable HTML table - 将普通 HTML 表格变为可滚动状态。将表头部分放入 THEAD 区,内容部分放入 TBODY 区,脚注部分放入 TFOOT 区域,引用 webtoolkit.scrollabletable.js 文件,然后在每个表格后面创建 ScrollableTable() 对象即可(演示)。

KeyTable - [...]

在线地图已经是很平常的应用,Google Map 甚至可以用作驾驶导航仪,然而,这些应用的实现涉及到千丝万缕的艰辛工作,仅仅是定位你现在的位置,就有很多技术,有幸的是,如今在你的 Web 站点中,你可以通过短短的几行代码,获得一个用户的地理位置,本文介绍的是用在 Web 中的各种地理定位技术。
通过 IP 地址获得用户的地理位置信息
互联网不过是一个巨大的网络,上面的每一台电脑对应一个 IP 地址,通过这个 IP 地址,可以知道这个用户在什么位置,我们可以通过查询 Maxmind GeoIP 数据库 获得,Maxmind 还提供了一个 JavaScript 接口让你在网站上实现这一功能。

这个方法(演示)有一个问题,就是说,你获得的 IP 地理位置信息未必非常准确,因为这个 IP 是你的 ISP 分配给你的,你获得的事实上是 ISP 的地理位置,另外,如果你使用 VPN,你实际的得到可能是十万八千里之外的地方了。
通过 W3C Geo API 获得用户地理位置
通过 IP 地址获取用户地理位置还有一个棘手的问题,就是安全和隐私问题,毕竟,并不是每个用户都愿意自己的地理位置信息被别人知道,鉴于此,人们开发了很多技术,Google Gears 拥有一个 Geo-Location 服务,Plazes 帮助你保存你的位置,而 Yahoo Fire Eagle 算得上这类技术中最顺手的一个。然而这些技术共同的问题是,它们要求用户要么安装一个插件,要么需要访问特定的 Web 服务,这有些麻烦。
W3C 有一个 Geo-Location API 可以帮助浏览器制造商,在浏览器中集成地理信息功能。Firefox 3.5 以上的浏览器支持 W3C Geo-LocationAPI,同样支持该 API 的还有 iPhone 上的 Safari 浏览器(需要 [...]

Google Chrome浏览器跟火狐浏览器一 样,可以通过使用扩展来增强浏览器的功能。如果你是一位网页开发 者,Google Chrome内置的开发者工具会让你的工作轻松不少。但是除此之外,Chrome浏览器上也有众多扩展给你提供不少工具,供你使用。扩展有一个最大好处, 那就是它可以让你不用切换到其他应用程序就可以完成一些任务。这种不用切换就能完成某些任务的特性可以让你节省不少时间。
注意:如果你在下载Chrome扩展时遇到问题,请打开C:Windows\System32\drivers\etc下的host文件,在其中添加一行:74.125.47.139   clients2.google.com 即可。
下 面就是13个你会觉得有用的Chrome浏览器扩展。

拾色器

拾色器可以让你获取任何颜色的Hex和RGB值!你也可以调整 颜色的色调,饱和度和颜色平衡。
Firebug精简版

Firebug精简版是针对开发的一款工具,它可以让你编辑,调试和监视网页页面的CSS,HTML,以及JavaScript内容。
域名注册查看器

这款 扩展可以查看某个域名是否可以购买。如果你可以直接通过工具条查到信息,那你还有必要另外登录专门的页面去查看吗?
Aviary 截屏扩展

Aviary 截屏扩展可以让你对任何页面进行截图,并通过Aviary.com的网页应用直接在浏览器中对图片进行编辑。另外,它也提供便利方式帮助你访问 Aviary 的网站和上面的工具
Lorem Ipsum测试文本生成器

Lorem Ipsum测试文本生成器不费吹灰之力就可以生成设计模型所需要的测试文本内容。
IE标签页

它会使用IE浏览器在Chrome的标签页中显示对应的页面。一些网站只能使用IE浏览器来访 问,有了这款扩展,你可以在Chrome中直接查看这些网站。对于那些想测试IE渲软引擎或是登录的网站需要使用ActiveX插件,或是想使用浏览器查 看本地文件的人来说,这款扩展会非常适合。
MeasureIt!

MeasureIt! 可以让你画出一个尺子,然后测量网页页面中任一元素的高度和宽度。
PlainClothes

这款扩展会对页面进行样式渲软,设想一下:文本是黑色的,背景是白色的,未点击链接是蓝色的,访问过的链接 是紫色的,所有的链接都有下划线。或者你把这一切改成你想要的颜色。所有的文本都以你选择的默认字体来显示(这跟通过 “选项” > “高级选项” > “更改字体和语言设置”进行修改的效果是一样的)。修改后的效果会自动应用到所有页面。
滴管

滴管和颜色拾取扩展可以让你从页面或是从高级颜色拾取面板来选取颜色。
速度追踪器

速度追踪扩展可以帮助你识别并修正网页应用的性能问题。它会对从浏览器内部获得底层数据进行可以 可视化处理,并在你网页应用程序运行的过程中进行分析。速度追踪扩展是一款Chrome浏览器扩展,可以在扩展目前支持的所有平台上运行(window和 Linux)。
Pendule

它对Chrome内 置的开发者工具进行扩充。
分辨率测试

问辨率测试扩展可以改变浏览器的尺寸,方便开发者在不同的屏幕分辨率下预览网站的实际效果。它包含一个常用分辨率的列 表,另外你也可以输入你自己需要的分辨率。
Snippy

Snippy可以让你让你抓取页面中的部分内容,然后保存下来, 供将来只用,它可以抓取丰富的内容,并保留格式。所以你用它来抓取段落。图片,链接等诸多格式的内容。

一月 28th, 2010Google Voice曲折激活

网上某位仁兄的高见,IPKall+NoNoh,实用高效!
SIP Phone Number: 填写 Nonoh的用户名
SIP Proxy: 填写 sip.nonoh.net
Email Address: 填写你的Gmail
Password: 填写在Nonoh的密码
另:基于 Adobe Air 的 Google Voice 桌面程序 Adobe AIR Desktop Utility for Google Voice


© 2006~2010 后羿之弓 赣ICP备10006480号