软件又何妨拿来主义

今日听闻里云ODS与谷歌之争,还有核高基成了分账大会,大家争相申报课题来骗取国家巨额支持。操作系统,数据库,中间件都要有国内自主知识产权的产品。幸运的是,这三项都有对应成熟的开源成品,这也很快让我们有了所谓的自主研发产品。一个不变的定律是,一个开源版本的闭源分支最后一定会丧失活力,被淘汰,公司在强,也抵不过协作的力量。

要真想掌握相关的核心技术,还不如把人投入开源软件的自主研发和维护,不然想办法成为其的contributor,committer,mananger。从而引领开源界的发展,看你有没有实力,只要看程序发布清单中的贡献者大多是谁,那才是真正能服人的掌握核心科技。

有个说法说,国外一开源,我们就自主研发了,可悲的是我们一边宣传要有自己知识产权,却对知识产权好不重视,只看到开源软件的协议的破坏,抄袭。利用了开源软件,甚至最后都不承认,更别提对开源社区的回报了。协作是未来的主流,开源使得人们可以把精力集中在创造性的事情上,而不是大家各自重复做着同样的事情上。对于国内的软件交付企业来讲,自己辛苦投入研发的成果,开源出去,让别人吃白食,似乎没有这个道理。这点上Google也类似,google的很多论文影响了世界,但是请注意,他们的论文都是延时两三年发布的,等别人看到,将论文落地,已经落后google 四五年了。

软件不再是想过去那样埋头苦干了,当今的世界要求我们更能利用别人的成果,做事情之前先看看别人是否已经做过了,我们没有我们想象的那么独特,我们想到的,很可能别人早已经想到了,做到了,甚至比我们预想的更好。站在巨人的肩膀上开发吧,那样我们才能做的更好。

国产软件为什么这么难

今天上午GBASE的销售过来交流,主讲其列式数据库。 其中存储,压缩,索引上不少理念都有可取之处的,但是因为挂了个国产软件的名号,商业推广很是困难,大家普遍对国内厂商的技术实力表示质疑,也许真要在国外注册个公司,搞出口转内销才行。

国产软件普遍给人映像不好,认为技术实力弱,国内软件业的竞争环境相对比较恶劣,一个是计算机是国外发明,大家普遍有崇洋的心理,认为国外的东西总是先进,可靠的。另一个国内的软件这些年确实比较浮躁,耐心做研发的不多,普遍是买噱头,真真落到实处太少。

 

设计一个互联网级的大规模系统(On Designing and Deploying Internet-Scale Services)

前不久看到微软的James Hamilton 写的《On Designing and Deploying Internet-Scale Services》,觉得超棒,看完总想留下点什么,给自己出了个馊主意要把全文翻译成中文,花了一个晚上翻了3千字眼都花了。接下来我是真不想继续往下翻译,可是半途而废又心有不甘,突然想到我为啥要把丫翻译成中文,英文看着更顺,更准确啊,一下子把自己问住,是啊,自己突然脑残了。于是马上掉转方向,一个是只写总结要点了,另外一个是直接用英文了,哈,果然干起来顺畅了很多。

[gview file=”http://www.xiaohui.org/wp-content/uploads/2012/09/On-Designing-and-Deploying-Internet-Scale-Services_for_blog.ppt”]

[gview file=”http://www.xiaohui.org/wp-content/uploads/2012/09/On-Designing-and-Deploying-Internet-Scale-Services.pdf”]

使用“智能”路由,无缝翻墙

伟大的长城已经到了让人忍无可忍的地步,查资料,文档的时候各种无理由connection reset。连slideshare都墙让人很火光。无奈只好翻墙,我现在用的是vpn,但是开了vpn有个问题,上国内网站也要绕一圈回来,速度很慢。理想的是由网关来翻墙,而后根据访问的目标ip来走不通的路由。公司的网关我没有办法改,下面是具体的在一台redhat linux 5 网关服务器上的安装vpn作为新网关的安装步骤。

大慨步骤很简单1. 连接上vpn 2.获取中国IP列表,根据列表设置路由表,国内IP走国内网关,剩余的IP统一VPN出去。

1.安装openvpn客户端

wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

yum install openvpn

而后到/etc/openvpn 目录下新建文件 vps.opvn

client
dev tap
proto tcp
remote xxx.xxx.xxx.xxx 443
resolv-retry infinite
nobind
mute-replay-warnings
redirect-gateway
ca /etc/openvpn/ca.crt
cert /etc/openvpn/rhel223.crt
key /etc/openvpn/rhel223.key
comp-lzo
verb 4

直接执行以下命令启动客户端

nohup openvpn /etc/openvpn/rhel223.ovpn &

执行ifconfig应该可以看到类似的显示,表明vpn顺利连接。

2.设置路由表

新建一个shell脚本,getip.sh  ,内容与下

#!/bin/sh

rm ip.txt
FILE=china-ip
wget http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest -O $FILE
grep ‘apnic|CN|ipv4|’ $FILE | cut -f 4,5 -d’|’|sed -e ‘s/|/ /g’ | while read ip cnt
do
echo $ip:$cnt
mask=$(cat << EOF | bc | tail -1
pow=32;
define log2(x) {
if (x<=1) return (pow);
pow–;
return(log2(x/2));
}
log2($cnt)
EOF
)

echo $ip/$mask >>ip.txt
done

新建一shell脚本,addroute.sh 内容如下:

#!/bin/bash

VPS=”209.141.50.182″
#current default gw
GW=’172.16.131.254′
CNLIST=”ip.txt”

#VPS
route add -host $VPS gw $GW
#lan addr
route add -net 172.16.130.0/23 gw $GW
#change default gw
route add default dev tun0

for i in `cat $CNLIST`
do
route add -net $i gw $GW
done

而后执行两个shell,路由表就应该设置完成,执行route命令应该看到如下图的结果 

3.网络设置

编辑/etc/sysctl.conf 文件,将net.ipv4.ip_forward = 0 从0改为1

而后执行sysctl -p 命令将设置生效

而后执行以下命令允许不同网卡间转发,及做nat

iptables -A FORWARD -i eth0 -o tap0 -j ACCEPT
iptables -A FORWARD -i tap0 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -s 172.16.130.0/23 -o tun0 -j MASQUERADE

到此变结束了。

在windows的客户端上执行以下命令,设置路由,将局域网内服务器指向原默认网关,而新默认网关指向新的有vpn的服务器,即可。

route delete 0.0.0.0
route add 172.6.0.0 mask 255.255.255.0 172.16.131.254
route add 172.16.130.0 mask 255.255.254.0 172.16.131.254
route add 0.0.0.0 mask 0.0.0.0 172.16.130.223

在windows 上执行tracert slideshare.net 和tracert baidu.com 看看效果吧。

爽爽的享受吧!!