我在断断续续的火警铃声下,更新我的 blog。
不知从何时起,写一篇 blog 变得越来越难,每天的生活都好像 nothing special,一天被问几十遍 how’s going 的结果都是还可以。曾经一度喜欢抱怨,最后也终于变成懒得抱怨。
人人和微博上到处都是羡慕嫉妒恨,我写不完一篇长文,140字的 twitter 也不行,想说的只有一个字,唉——
我在断断续续的火警铃声下,更新我的 blog。
不知从何时起,写一篇 blog 变得越来越难,每天的生活都好像 nothing special,一天被问几十遍 how’s going 的结果都是还可以。曾经一度喜欢抱怨,最后也终于变成懒得抱怨。
人人和微博上到处都是羡慕嫉妒恨,我写不完一篇长文,140字的 twitter 也不行,想说的只有一个字,唉——
貌似最近通过搜索 校内 502 Bad Gateway 来到此页面的同学越来越多了。简单明了的告诉你,这是校内的服务器不行了,不是用户的问题,也许等等就好了,如果等等也不好……那……校内,你倒底行不行啊? — Updated on 2 Jun, 2009
晚上开着校内的时候,突然弹了个框出来,说是 502 Bad Gateway,然后按刷新就看不到校内了,看到了……我熟悉的 nginx 502 错误页面~ 当时就想,校内又出错了啊,还是 nginx,可以研究一下哈。
立刻问了一下小野猪,他说校内是可以上的,就是有点慢。而我却是立刻返回 502 页面,服务器 nginx 0.6.32,校内正常的服务器应该是 resin 才对。两个人访问结果不同的情况,除了我 RP 差之外,还是有其他原因的,我猜就是我这两天碰巧在搞得 DNS Round Robin
$ nslookup xiaonei.com Server: 208.67.222.222 Address: 208.67.222.222#53 Non-authoritative answer: Name: xiaonei.com Address: 211.157.20.6 Name: xiaonei.com Address: 211.157.20.3 Name: xiaonei.com Address: 211.157.20.2
和 google.com 一样,xiaonei.com 解析的时候也会有三个 IP,DNS Server 会在每次回复的时候改变顺序,不过究竟用哪个 IP 还是客户端说了算,有时候 DNS Cache 久了,你可能长时间使用一个 IP 访问。不过这个在减低服务器负载上还是有效果的,因为人多了之后,还是大致上 IP 均分的。
DNS Round Robin 的实现是很容易,然后也有很大的弊端:由于 DNS propagation delay 通常要很久,几十分钟到几个小时甚至几天都有可能,所以如果一个服务器要临时下线的话,客户端是不知道这一情况的,还是会继续访问那个 IP,并不会被自动分流到好得 IP 上去。当然还是可以在 router/firewall 上把下线的 IP 分给某一台在线的服务器,不过要做到完全平滑过渡似乎是不大可能了(你至少得把所有 TCP 连接给断开才能改吧?)
回到校内这个问题上来…… 我试着反复清空 DNS cache,情况是,有一个 IP 返回 502,两个 IP 是好的,之后似乎情况又有变化,甚至有一段时间有两个 IP 是 502…… 于是猜测校内在重启 back-end server,但由于 DNS round robin 并不能解决平滑过渡的问题,即使是三只服务器依次重启,我还是遇到了出错的页面。
至于 nginx 的出现,我并不觉得惊讶,因为 nginx 的优秀性能总能让用它的人从中受益,校内可能省了点硬件的钱,我们则得到更好的用户体验~ 对于校内背后的服务器结构,我依旧迷惑。最外层是 squid,直接打 IP 就能看出来,而且即使 nginx 报 502 的时候,同一个 IP 还是能看到 squid,所以 squid 是最外层。然后是 nginx,可是再里面呢?resin?如果用 nginx 做 reverse proxy 的话,他的 server tag 是不会变的,永远都会自称 nginx,这个和 Apache 不同, Apache mod_proxy 做 reverse proxy 的话,server tag 是显示的 back-end server 的 server tag。于是迷惑了,更加奇怪的是,既然用到了 nginx,为什么校内的静态图片却是在 Apache 上呢…… 也许要等下次,下下次,不知道多少次校内出错的时候才能猜出来了~~
先是Facebook开放了一部分代码,之后是校内开始要开放API。这二者有没有必然联系,我不知道,但至少看起来都该是好事。
在校内看了有关API的东西,一些讨论,和那个尚未完成的wiki。现在遇到这种新东西,已经不是很怕了,因为总是可以看Documentaion。然而这次校内的API令我很迷茫,我不知道这究竟是什么,一些人说可以用了,一些人说用了有问题,我说我不知道API在哪里……文档做得实在是太糟糕了,或者说,完成的部分太少了,能供人参考的部分很少。而现在正在做开发的那些人是怎么得到信息的呢?很大程度上,通过Facebook的API。
在校内的API文档稍稍有所进步的时候我再来看这个API,稍加研究,和Facebook的对比,我才发现他们是出奇的相似。从应用的工作原理,到API的函数名,参数名,格式,基本上都是一样的。而如果我想用PHP来写校内应用,该怎么办呢?校内目前提供的官方client library是java的,于是我可以去Facebook下一个PHP的client library,然后把里面的facebook改成xiaonei,FB改成XN,FBML就是XNML……基本上就能工作了……
我本是想,如果没有官方PHP的library,我自己写也未尝不可,然而看了Facebook的代码,我忽然发现,他们写得实在是太好了,我自己写决不可能做得那么简洁、高效,自己写也比拿Facebook的改慢的多。于是,我为什么不拿来改呢?或者说,我为什么不抄呢?
解决的client library,我们再来想究竟写什么应用,在没有任何想法之前,我们很有可能想看看别人写出了什么应用。然而,很不幸,校内上目前似乎还没有谁写出了什么能够用的应用,于是,我们又来到Facebook,这里的第三方应用实在是多得数不清,其中不乏想法精彩,制作出色的东西。而这些,搬到校内上应该也能成功。于是,我们为什么不port呢?我们为什么不抄呢?
校内开放API,我希望这是一件好事。可以预见的就是几个月之后的校内上,会出现各种好玩且有用的第三方应用。然而,我也不希望看到,这些应用中有许多是从Facebook上照搬过来,克隆而成。API的开放,提供的是自由和创新,不是让开发者们跟着校内一起抄袭,或者帮着校内抄袭。
今天ice告诉我说,校内把饭否屏蔽了,当时就想不可能。首先,我用的饭否图片插件,css中background贴上去的,总不可能屏蔽图片吧,那其他的图片也没了?再说,校内和饭否不存在什么竞争关系,人家千橡大公司不至于这么小家子气,还屏蔽饭否……
再一细问,原来……涂鸦板里的fanfou自动替换成了好好学习,天天校内…… 真是哭笑不得,校内果然和猫扑是一家的,千橡就是牛逼,还玩这一套。我真想看哪天校内上冒出中国人民公共安全专家大学来。
然而这种拙劣的替换手段,基本上是可以无视的。好办法我是没有,不过笨办法倒是几秒种内就想了一个。 (more…)
校内和facebook最大的差距除了页面混乱之外,还有一点就是api。
用饭否的时候发现它api做得还是不错,而且本身提供了图片、flash、javascript的插件,所以肯定是所有地方都能放了。
在校内上放饭否基本很容易,涂鸦版里加一句
<img src="http://b.fanfou.com/u/YOURID/multi.png" />即可
然而这样只是插在了涂鸦版里,不好看。如何用饭否取代校内自己的“我的状态”呢?稍稍动用一下css其实也不难…… (more…)