Archive for May, 2009
有线通在线用户分布简析-苏州
我的宽带服务商是苏州有线通,大约在2009年4月之前,上网速度还是蛮不错的,那个时候YouTube还没有被和谐,90%的情况下不需要缓冲就可以看YouTube的视频。然而4、5月之后有线通的上网速度就骤然下降,投诉到96296,客服态度不错,可就是解决不了实际问题,我不是大客户,无奈 ,只能接受现实,谁叫它便宜呢。
既然访问外部网络慢,等待页面时,我喜欢在有线通的内部网络中闲逛,若干天前逛至有线通的登录站点,无意中发现他们的登录服务器竟然把目录列表功能打开了,而且在web目录下保存了很多测试用的代码:
可见当时开发人员是为了图方便(也反映了给有线通开发这个系统的公司SCM没有做好),保存了那么多的以日期为结尾的代码。而这些文件会被Tomcat以文本的方式,直接暴露出它的内容来。比如:
<%
if("POST".equalsIgnoreCase(request.getMethod()) && "logout".equalsIgnoreCase(request.getParameter("flag"))){
//get the circuit and send snmp command to sms
String strSessionID = (String)session.getAttribute("sessionid");
String strCPEMAC = (String)session.getAttribute("CPEMACSession");
String nasaddress = (String)session.getAttribute("NASAddressSession");
String nasport = (String)session.getAttribute("NASPortSession");
String userattr = (String)session.getAttribute("UserAttrSession");
String cmmac = (String)session.getAttribute("CMMACSession");
Date startdate = (Date)session.getAttribute("StartDateSession");
//Date start = DateFormatter.parser(startdate);
System.out.println("startdate is " + startdate);
long length = ((new Date()).getTime() - startdate.getTime())/1000;
String strClientIP = request.getRemoteAddr();
//SnmpManager.clearCircuit(strSessionID,strCPEMAC,"hotal");
//用户退出成功,发包给radius
Properties sysProp = AppManager.getInstance().getProperties();
String strServer = sysProp.getProperty("BroadMAN.CommandServer.server");
String strPort = sysProp.getProperty("BroadMAN.CommandServer.port");
String strCommand = sysProp.getProperty("BroadMAN.CommandServer.command");
String radserver = sysProp.getProperty("BroadMAN.CommandServer.radiusserver");
String radport = sysProp.getProperty("BroadMAN.CommandServer.radiusport");
String strPassword = sysProp.getProperty("BroadMAN.CommandServer.radiuspasswd");
QuerryInfoClient querryInfoClient = null;
/*
用法:radacct radiusserver secret user accttype timelength nas-ip nas-port-id client-ip
radius主机端口 密码 用户名 Start/Stop 上网时长(Start时为0) 客户ip
如:radacct 192.168.2.208:1813 testing123 user38 Stop 555 192.168.2.209 1 192.168.1.250
*/
strCommand = strCommand +" " +radserver + ":" + radport + " " + strPassword + " " + strLoginName + " Stop " + Long.toString(length) + " " + nasaddress + " " + nasport + " " + strClientIP;
querryInfoClient = new QuerryInfoClient(strServer,Integer.parseInt(strPort),strCommand);
//update mysql
Properties myprop = new Properties();
myprop.setProperty(UserList.USERNAME,strCPEMAC);
myprop.setProperty(UserList.USERATTRIB,userattr);
myprop.setProperty(UserList.CALLEDSTATIONID,cmmac);
myprop.setProperty(UserList.FRAMEDIPADDRESS,strClientIP);
myprop.setProperty(UserList.FILTERIDFLAG,"0");
UserListManager.updateUserList(myprop);
//发包给sms
String usertype = AppManager.getInstance().getEnumManager().getEnumValueByName("CustomerAttribute",userattr);
SnmpManager.clearCircuit(nasaddress,strSessionID,strCPEMAC,usertype);
session.invalidate();
System.out.println("kicked customer alredady!!!!!!");
%>
我怀着无比猥琐的心情拜读了所有的代码(其实就若干个JSP文件,涉及到业务的Java代码没有泄露。其中一个JSP中的包含了数据库的用户名和密码,可是它是测试用的),没有发现对我有用的部分(因为我已经是注册用户),所以没有深入研究,但是无疑中发现了一个页面:
每次刷新,页面上的值都有所变动,而且在晚上十点钟后这个数字会慢慢的减少,我的第一反应就是这个可能是有线通的在线用户数,于是,就写了小程序,每隔5分钟访问一下这个页面,然后把那个数字抽取出来,存入数据库。我没有连续24小时运行这个程序,而是分了两次:一次是晚上7点到早上7点,另一次是早上7点到晚上7点后。绘图如下:
图二:日间用户分布图
看了图,基本上可以断定它就是有线通的在线用户数目,由于我只是抓了一个白天和一个黑夜的数据,所以图一中有一部分不太“和谐”,大约在5月27号凌晨4点之后,这一点可以当做是无效点忽略不计。
总体来说,在线用户数成规律性的分布:凌晨用户最少,早上9点钟以后,一直到晚上10点这个白天的时间段,用户数一直处于增长的趋势,且晚上7点后增长开始加速,到了晚上10点左右到达顶峰,然后开始快速的下降,凌晨3、4点后进入谷底。
从上面的数据中,我们可以得出下面的一些信息:
1. 要想网速快,请在凌晨上网(废话),且晚上10点大部分人开始下线休息
2. 白天用户数增长比较平稳,晚7点后,很多人晚饭后开始上网
3. 苏州有线通的同时在线人数大概就在1万到1.5万之间
对于上面的1和2,我相信其他网络接入商也是类似,请适当避开上网高峰期,合理安排自己的时间。对于第3点,也许可以借此推算出苏州有线通的用户数:苏州共629万人,市区238万左右(2008年末数据),有线电视共110万用户数(2007年末数据),那么使用有线通网络的用户肯定少于110万。我们假设每天有一半的用户会同时上网(其他人虽然付了费,但是没有在同时上网,比如我晚上统计的时候,他却在白天上网),那么有线通大概也就1-1.5万的两倍=2-3万用户,当然我的那个假设没有任何确凿的科学依据,是我凭空想的,所以最终的结果有待考证,不过这个页面提到苏州共有宽带用户近万户,那个是2007年的新闻,现在是2009年,由此可见,我在上面由图得出的2-3万大概也是近似的。
延伸一下我们的推测:平均每个用户续费要RMB550一年,那么苏州有线通每年可以有:550*20,000 ~ 550*30,000 的收入。
My Project Timeline
很久没有更新Blog了,最近比较忙(好像我一直这么说^_^),其实是比较懒,对于blog这种‘长篇’而言,很难及时更新,幸好有了Twitter这样的微博客,可以让人微微的博一下,聊以证明我在网络上的存在。
题外话暂且不表。由于team中有若干项目同时在做,一直想找个好的工具来追踪这些项目,但是没有合乎自己需求的工具。机缘巧合,发现了SIMILE的Timeline项目,遂改之,加了些管理页面,于是,就有了这个小工具,暂命名为:My Project Timeline(但凡取不到中意的名字,我都冠以My,比如MyApp, MyBrowser等)
一句话概括之:它是一个可视化的时间线软件,可将任何时间点(段)在页面上展示出来,可用来做项目管理的辅助工具
开发页面:http://code.google.com/p/project-timeline/
Demo:http://charry.org/timeline
目前处于Alpha状态中,基本功能已经完成,我会在自己有兴趣的情况下为它添加新的功能。如果要给它一个广告词,hmmm,可以考虑:震宇Timeline自家用(?)。