我的2011-分享我的四个项目经验

请勿抄袭,转载请注明出处 http://blog.csdn.net/chlaws

前言

2010-11-01入职到现在有一年多了,这一年来,也做了比较多的事。也学到很多东西,基本来说这期间一直在忙碌着,没有停过。有些时候也会挺有压力的。11月底的时候就开始计划准备写个总结,既能回顾下这一年自己在哪些地方成长了,也能加深下自己的所做过项目的印象。之后的内容会按所做的项目进行大致的描述,小项目之类的都不会在此介绍,项目的设计,框架,细节方面到时会分别单独写文章放置到我的博客中,希望通过这系列的总结也能提高自己对事物的准备描述能力。

 

第一个项目:Nginx资源服务器

       刚入职的时候开始看nginx源码大概花了1个半月,这期间也有被带我的师傅鄙视过。Nginx大致10W行左右的代码,主要看了下程序的流程,http通信过程。然后尝试写了下nginx的模块。我们的基于nginx的资源服务器的主要功能是通过http求解进行解析出来后读取视频文件块并数据。需要知道是高并发请求server端接收到后如果是直接读取磁盘会由于磁盘读写速度的限制的瓶颈,从而会导致用户观看视频变卡不流畅,造成用户体验低等问题。因此我们基于nginx开发了http的缓存模块,所有请求会组织成相应结构存放到共享内存中等待后台处理程序处理,每个结构中会通过标识标出是否处理,以及处理结束后通过指针指向共享内存中的数据块数据块都会存放到内存中数据,内存中的数据块都会比请求数据的长度大,这样第一次除第一次数据块不存于内存中时,才会去读磁盘。Nginx通过共享内存进行与后台处理程序进行通信,共享内存中的数据块通过最后最少使用算法进行替换。使用率最高的内存块会较长时间存在于内存中,通过这种方式来提供用户请求的响应速度。另外在后期测试优化的过程中读磁盘的读写采用了asio去异步的读取,这样内核层能合并部分在磁道中距离近的读写请求。这部分的内容倒是会分成两部分或者三部分去讲,大致会较为细致的介绍该项目的架构与实现,以及后期的优化处理过程,如果时间充裕,也会将nginx的源码阅读的资料进行整理发布出来,可能包含HTTP协议的理解。

第二个项目:广告系统

       在资源服务器项目完成之后,在公司做了论文回学校答辩了之后回来,开始做广告系统。广告系统的功能大致是这样的:分成客户端和服务端。广告客户端可以提前启动,在系统中驻留;监听客户端(播放器)的请求解析处理,并通过构造本地HTTP服务器响应广告;与服务器交互,更新推送广告的版本,当版本不同时,存放广告的server上下载广告文件至本地。服务器对广告的推送可以通过配置文件去指定,可以完成预先推送,按地域,按频道,按影片,按合作商,广告轮播,影片黑名单等各式的广告推送以及版本更新控制。为了加快通信过程采用udp作为客户端和服务端的通信协议,为防止udp丢包会模拟tcp应答机制,去确认包的正确接收。考虑到广告客户端是部署在用户机子上的,因此内存,cpu的占用需要考虑,并且要尽量少的占用资源。因此广告客户端首先只会启动一个主线程,当存在HTTP请求才会启动HTTP处理进程。当存在推送内容是会启动下载线程去下载广告到用户机器中,并在推送版本变更时,会将上一个版本的广告内容从用户磁盘中删除,减少磁盘的占用。通过这一协议的手段,广告客户端能控制在2M左右的内存占用,CPU使用非常少。

第三个项目:采编系统

     大约在8月底9月初的时候时候,采编那边需要做一个自动化处理系统:包括视频下载,转码,合并字母,并将处理结束后的文件转存。设计基本是我去搞的,同样是客户端和服务端,大致设计是这样子的:采编会提交处理请求,一条处理请求就是一个任务。
这个任务可能只是去下载片子,也可能是转码,当然也可能是下片+转码,下片可以处理HTTP,FTP,ED2K,THUNDER,BT这几种协议。这条处理任务会写到数据库中,服务端要做的就是从服务端读取一个请求,并根据所有连接上服务端的机器,根据调度方式,决定这个任务是发完哪台客户机上去处理,并接受客户端的定时状态反馈,然后将状态写入数据库中,使得采编知道哪些任务处理完成。客户端要做的就是根据接受到的任务,进行排队处理,这是由于系统资源有些,且在转码的时候会占用大量的系统资源,包括CPU,内存等等,不过不同机器的配置不同,因此根据优先级之类的,以及配置文件的控制来决定同时处理下载任务数和转码任务数。客户端定期会发送一个心跳包给服务端,告知其存活,当存在任务处理的时候,也会定时返回当前的处理状态。总来的说就是根据采编提交的请求,服务端去读取,分发任务到客户端(也就是实际处理任务的机器),并更新处理状态到数据库中。

第四个项目:数据挖掘-推荐系统

       在10月下旬的时候公司决定要做一个推荐系统,前期是做一个影片推荐,后期可能会应用到广告推荐上面。推荐系统里面包含的东西很多,到目前为止,一直在进行当中,预计过年前可能能拿出第一版。
        这个推荐系统就是根据用户观看视频的日志,进行分析用户行为,并推荐其可能喜欢的影片给用户。
        要分析用户的数据,就需要做数据的收集,由于之前的数据都是存放在oracle当中的,而要进行大数据的分析处理,需要用hadoop,hbase,mahout那一套东西。因此需要将之前的数据从数据库中导出,一部分数据存放到hdfs上面,一部分数据存放hbase上面,不同的数据,各种导入导出的处理上也不同,并且需要考虑哪些数据是放置在hdfs上合适,哪些数据时放置在hbase上合适。然后是每天产生的数据,自动化的处理,不需要人为去干预。当然自动化处理过程需要监控,hadoop,hbase这套东西也需要监控,因此初期通过自己写脚本去实现监控,并在出现问题的时候发送短信和邮件。目前数据入库的工作基本完成,期间由于hbase,hadoop是java写的,虽然是提供了c++的接口,但是由于各种原因c++没用上,后来讨论了下,决定用java去实现各种处理,因此花了2天时间去看了下java。然后开始写处理程序,并查看API文档,基本是摸石头过河。。。
        在hadoop,hbase的优化上还有很多工作要做,不过一直没时间。。之后大致做结果数据,写mapreduce去讲需要的数据给分析出来,然后用mahout去跑。做完这些的话,就可以写推荐反馈的服务了。哈哈,希望时间够,争取过来,我来做。

收获

        这一年来,跟着师傅做各种服务,学到了很多,从大局上知道了一个项目如何去思考其架构,学会了,自己去讲一个项目从无到有的实现,也让自己在能在不同的情景下,选择合适的语言去解决这个问题。我喜欢去做各种为接触过的项目,在项目的进展中,解决各种问题,锻炼自己的思考能力,逻辑思维,在不断的遇到,解决,这个过程总是很让我兴奋。

        本来是在11月份的时候就想法将这个年终总结给写出来,也算是我对自己在2011年的回顾吧,一直由于各种事情的繁忙,没有时间去理顺思路来写,现在终于在2011年的最后一的晚上来写完这篇总结,也很高兴。另外可能过年回去的时候会整理更多的内容出来,和大家分享。期待我的2012能有更大的进步,也希望家人身体健康,高高兴兴。最后也祝大家元旦快乐,玩的开心。


PS:做C++服务端的朋友,搞hadoop,hbase的朋友,搞nginx的朋友可以加我,互相交流学习。


                                                                                                                                        写在2011-12-31晚 于杭州
江文龙
  • 20
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值