免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 无风之谷
打印 上一主题 下一主题

[C] 线上讨论:千万级广告投放核心的设计和实现——分享案例 探讨解决方案 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2011-11-04 17:03 |只看该作者
本帖最后由 lifeistrue 于 2011-11-04 17:05 编辑

我以前做过一个类似的系统,不过不是广告投放 ,日PV比这个系统要高。
说下我的思路吧:
前端是apache(或者其他的WEBServer),单独写一个apache模块与后端进行socket通信,将关键词,IP等以key-value的方式发送到后端广告分析模块,并从后端分析模块取出投放素材返回给用户

后端广告分析模块采用C/C++编写,单独开一个线程定时载入数据库并载入到内存,内存数据结构最好也为key-value的形式以便快速查找,key为hash后的广告策略,value为广告素材(如果广告素材比较大,则放硬盘上,内存中为素材的索引地址)。载入内存后进行内存的双buffer切换,这样可以保证重新载入素材不会导致重启服务。
另外,需要监控模块的运行,若模块挂掉,监控程序要能很快重启该模块并发出报警(报警处理很重要,我那个模块有一次core了,不停重启然后core,然后硬盘就满了。。。。)

剩下的就是分流,分机房,HA,冗余部署方面的,有运维经验的应该能很容易给出方案。 估计千万级的流量,单机扛住没有任何问题。

论坛徽章:
0
22 [报告]
发表于 2011-11-07 10:59 |只看该作者
本帖最后由 songtebo 于 2011-11-07 11:12 编辑

问题的关键是规则经常变换,那么可以这样:整理当前规则,以及可能的规则,写一个程序做下面几件事情
1.分析规则是否符合逻辑
2.自动生成C代码,并编译
3.通过测试和审核后自动发布到集群

论坛徽章:
0
23 [报告]
发表于 2011-11-07 16:56 |只看该作者
我来分享一下我的项目经验。目前已实际使用中。

为了开发兼顾效率和维护,我特开发了RedBridge中间件. 基 ...
七夜 发表于 2011-11-07 15:33



很好,如果稳定的话以后可能会考虑用到。

论坛徽章:
0
24 [报告]
发表于 2011-11-08 11:30 |只看该作者
我来分享一下我的项目经验。目前已实际使用中。

为了开发兼顾效率和维护,我特开发了RedBridge中间件. 基 ...
七夜 发表于 2011-11-07 15:33



    仔细看了下这个解决方案,有一点MVC的感觉。让C程序员完成核心代码, 让普通程序员 用lua代码 去满足多变的市场需求。 确实是不错的开源项目。
   看了下,还可以应用 数据统计,微博等应用

论坛徽章:
0
25 [报告]
发表于 2011-11-08 11:38 |只看该作者
设计比较实用,尝试一下去~

论坛徽章:
0
26 [报告]
发表于 2011-11-09 07:30 |只看该作者
我觉得可以使用nigix,至于需不需要redis不好说。

我觉得可以用nigix替换apache,依然用C写模块。因为nigix本身就有一些很好的实例,你们仿照它的模式写,编程规范肯定不会差的。
如果需要一些动态性的地方,可以使用Lua。可以依然使用MySQL,我觉得这个应该不会有性能的问题,对于千万级的规模。

回复 4# lnczly1

论坛徽章:
0
27 [报告]
发表于 2011-11-10 14:38 |只看该作者
回复 1# 无风之谷
1. 需要再apache module 写大量的业务逻辑 C代码(比如根据页面关键词、IP等条件进行广告投放).  使C代码更加的复杂。如果缺少完整的文档。别人很难接手维护
用apache module 或者其他如nginx关系不太大,关键是看团队和维护成本。如果大家都熟悉apache module那就做持续优化
2. 投放核心 需要定期从MySQL重载数据。
Cache、Cache、还是Cache
3. 代码结构不清晰。维护不容易
这个不是C的问题,是做设计、实现和后续维护人的水平问题。
4. 因为业务需要,经常需要修改修改业务逻辑。所以要反复编译、部署、测试。比较麻烦。
业务逻辑本身建议用脚本或者类似DSL来表达,比如lua,python等,只需要检测到更新时再重新加载一遍即可。这要看设计者的水平了。

论坛徽章:
10
CU大牛徽章
日期:2013-09-18 15:20:48程序设计版块每日发帖之星
日期:2016-07-21 06:20:00IT运维版块每日发帖之星
日期:2015-07-30 09:40:01技术图书徽章
日期:2014-10-14 16:00:43天蝎座
日期:2013-09-27 17:41:29CU大牛徽章
日期:2013-09-18 15:21:17CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:20:58每日论坛发贴之星
日期:2016-07-21 06:20:00
28 [报告]
发表于 2011-11-11 12:51 |只看该作者
既然业务逻辑用了C,那不妨把HTTP服务器也自己写了吧。
反正就是要高PV,也可以把APACHE,NGINX裁剪一下。
我目前的一个就是自己写的http server 了

论坛徽章:
0
29 [报告]
发表于 2011-11-11 17:00 |只看该作者
lighttpd + tomcat + servlet + mysql,其中servlet定时从mysql同步广告数据

论坛徽章:
9
技术图书徽章
日期:2014-10-14 15:48:13数据库技术版块每日发帖之星
日期:2015-06-04 22:20:00数据库技术版块每日发帖之星
日期:2015-06-10 22:20:00数据库技术版块每日发帖之星
日期:2015-06-11 22:20:00数据库技术版块每日发帖之星
日期:2015-06-13 22:20:00IT运维版块每日发帖之星
日期:2015-09-22 06:20:00IT运维版块每日发帖之星
日期:2015-12-08 06:20:00综合交流区版块每日发帖之星
日期:2016-02-02 06:20:00IT运维版块每日发帖之星
日期:2016-07-25 06:20:00
30 [报告]
发表于 2011-11-13 22:24 |只看该作者
你们就不能考虑一下服务器硬盘的感受吗?文件系统的选择非常关键,因为文件系统直接关系RDMBS的查询性能!用XFS吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP