2012年11月4日星期日

SCUTOJ 建站手记

鉴于某学院的说法:你们不做出点样子(UI)来,我怎么好给你服务器呢??。。。 = =
好吧,既然这么蛋疼就先在VPS上面搞好了。。。(一上来就吐槽学院好像不太好的样子??

主机的话,原来想选Linode的,心想咱们也好不容易可以做一回壕啊。最后考虑到毕竟是测试阶段,服务器没必要选的那么好,所以退而求其次,选了xehost(在V2EX看到的,刚好碰上搞活动的说)。XEN主机,美国机房,ChinaCache线路,电信ping值在150-200ms之间,勉强还可以接受。价格的话略贵吧,月付80大洋。

硬件配置:
Xeon E5606 @2.13GHz 双核
512M RAM
20G 空间
500G 流量
100Mbps 带宽 (实测有接近2M/s的速度
磁盘I/O 测试了一下,40M/s, 勉强吧
系统 Ubuntu 10.04

======================================

hustoj代码托管在google code,要用SVN checkout(其实我还是更喜欢github)

svn checkout http://hustoj.googlecode.com/svn/trunk/ hustoj-read-only

进入到hustoj-read-only/install 目录中,修改一下安装脚本,把yum系的去掉,注意下数据库的用户和密码就可以运行了。其实最好就是手动安装一次,这样对整个架构就有个大体的把握了。

还有web服务器关于php脚本的设置:
       sudo vim /etc/php5/apache2/php.ini 
       open_basedir =/home/judge/data:/var/www/JudgeOnline:/tmp  
       max_execution_time = 300     ; Maximum execution time of each script, in seconds
       max_input_time = 600 
       memory_limit = 256M      ; Maximum amount of memory a script may consume (16MB)
       post_max_size = 64M
       upload_tmp_dir =/tmp
       upload_max_filesize = 64M
设置完以后重启apache。

在浏览器输入IP/目录,应该可以看到页面了。如果出现网页一片空白的情况,说明php脚本有语法错误或者web文件目录权限设置不对。这时候可以打开php.ini的display_error 选项,可以方便排除错误。debug完之后建议还是关上。默认,php报错是不记录进日志文件,这很不便于排查问题。打开php的错误日志记录也很简单。编辑php.ini
log_errors = On
error_log = /usr/local/php/log/error.log

========================================

接下来就是折腾DNS了。
偶在dot.tk上面注册了scutoj.tk的域名,其实也只是实验阶段,免费东西不知道靠谱不,到时有条件还是转.me好了(其实很想注册个像中大的那种短域名啊soj.me )。其实原来想用DNS Pod的服务(据说对google DNS和open DNS有优化,不过按照最近斯巴达的网络状况,8.8.8.8都全挂了 = =),但是懒了一下,暂时没弄。

后台添加一个A record,指向VPS的IP地址,主机名就写www。但是这样的话只是指向/var/www目录,而OJ是放在其子目录下。以前没试过子目录绑定域名,又是google上一阵狂搜,折腾啊~

最后发现是需要设置apache。这里又涉及到各种linux distribution的apahce配置文件位置不同名字不同 = =!,最后还是在ubuntu wiki上面找到官方说明,是设置apahce virtualhost。具体可以看这个链接。还有就是NameVirtualHost *:80 ,这里在 /etc/apache2/port.conf 里面已经设置过了,再在default里面设的话可能会报warn。只需要注释掉其中一个即可。

我记得以前在SJTU-NIC的时候有看过下apache的配置文件,过了几个月竟然忘得七七八八了。。。哎,这记忆力,跪了。




2012年11月3日星期六

基于OpenStack的Online Judge实现构想

应该说吧,这个构想在po主接下老师项目的时候就有点思路了。当时刚好接触openstack不久,对云计算有点概念。感觉openstack和OJ是可以结合起来的,当然具体的想法是经过了解openstack以后渐渐的明朗起来。

先交代下目前的状况。某理工作为国内排得上号的211,985传统理工学校,还没有一个像样的OJ系统。所谓的不像样,就是该OJ即使是面对两个班(大概一百多号人)同时上机实验都会随时崩溃...对于校赛这种就更不用说了,我们学校的ACM集训队从来不敢用我们自己的OJ,都是到杭电上面去搞contest...

Online Judge某种程度上也算是SaaS,为用户提供在线判题服务。用户把代码提交上去,服务器经过计算将结果返还给用户,典型的B/S架构。这样说的话,其实是单节点服务器就足以应付的小型应用(对于我们大SCUT来说还真是= =!)。但是单纯从web架构方面考虑,这里面还有很多需要改进的地方。最简单直接而且立竿见影的方案是,将LAMP架构换成LNMP架构,也就是apache + mod_php 改用 nginx + fastCGI 以提高系统并发量,加快PHP解释速度。。。至于动态网页静态化,数据缓存之类的优化方案也是可以有的,而且肯定会实现。

po主的想法是,如果由openstack在其中作为IaaS层向上提供服务,可以在物理服务器有限的前提下方便的搭建分布式判题系统,对外由nginx作为web前端节点,并为后面的判题节点集群作负载均衡。由于云计算“按需分配”的特性,可以较好的实现系统资源弹性分配,避免单服务器节点在高负载下成为系统瓶颈,同时也增强了可扩展性。虽然我们的初始需求仅仅是满足教学日常用途,但是在一开始就设立架构上的大方向,考虑到以后的可扩展性的话,目光放远点还是很有必要的。

同时po主准备基于hustOJ的系统进行二次开发,添加一些个性化的模块,比如mediawiki用作管理OJ的技术记录与使用说明。看了该项目的源代码一段时间,觉得原作者真是牛逼闪闪啊。框架暂时没发现什么问题,后期管理员的优化也很不错,这不得不说是开源的一大好处。貌似我越来越喜欢open source了~(才不是什么拿来主义呢

2012年8月12日星期日

SJTU-NIC实习总结

机缘巧合之下,有幸来到SJTU-NIC实习。转眼已经过去一个多月了。回顾在SJTU这一个月,感触良多啊~

七月份来到交大,一整天的火车啊。来之前并不算顺利,家里人意见蛮大的,主要是担心安全问题,而且也不想我整个暑假都在上海。说起来,也算是我一意孤行吧。并不是我不想回家,只是在家里的学习效率真的不能让我满意。琐琐碎碎的事太多了,囧。一直都认为在学校,在图书馆,在实验室的时候,效率是最高的。事实也证明,交大没有让我失望。

在Omnilab的日子,跟随 @WeiJianwen 老师,与 @WangHaiyang @LiuYukun 共事,学到了很多。应该说,我还是蛮幸运的。同来的另外一个实习生被分到openstack组,负责dashboard的前端开发了。本人是真的对前端无爱啊....而我则被分到BigDate组,负责Ganglia分布式监控平台的部署配置。应该说,这和我预想中的工作差不多,也是我目前最愿意做的。主要是纯linux的工作环境让我期盼已久啊!大体上,这是偏向运维一类的工作。大部分时间是工作在SSH的remote host上(终端什么的总是很有爱的~)。

整个实验室架构大概是:openstack组负责提供IaaS层的VM,然后在上面部署Hadoop与HBase环境,由rsyslog daemon负责从远端数据源接受海量数据转发到Hadoop经过分析写入HBase。Hadoop Cluster状态则有Ganglia负责监控,包括CPU,disk-IO,network-IO,memory等。

应该说,最大的收获是对linux操作熟练程度有了很大提升。之前一直苦于没有一个合适的环境来实践书上的各种理论,对服务器的各种daemon理解都不深。在实验室的时候,案上必备一本鸟哥,随用随查,感觉甚好。另外,实验室采用wiki的资源经验分享方式,结合git项目管理,让我受益匪浅啊。只是可惜直到现在对git的使用还是处于初级阶段,汗一个。。。还有就是对云计算和海量数据处理的概念有了一定理解。目前实验室项目的研究水平在国内的高校甚至业界也算是领先的吧,接触到都是世界范围内的领先技术与概念,真心感受到云计算的发展前景相当大啊。而海量数据处理也是相当程度上依赖于云技术,目前这两个名词已经被炒得相当火了。。。

实习期间还好是住在交大里面,白天全身心投入到工作中,到晚上回到宿舍不用怎么折腾就可以睡了。交大的环境很好,黄昏的时候,还有闲情逸致漫步校园。周末或泡图书馆,或到外面逛下,时间过的真心充实。这才是我梦寐以求的校园生活啊!~~

上一张wiki的图以示纪念吧~半个月的成果~