网络广告推送的系统和方法与流程

文档序号:12039485阅读:236来源:国知局
网络广告推送的系统和方法与流程
本发明涉及网络广告推送的系统和方法,更具体地,本发明涉及基于REDIS缓存技术来实现高并发网上答题形式的网络广告推送的系统和方法。

背景技术:
目前的在线答题网站通常需要记录用户的当前答题数、答题正确数和答题积分,同时累积用户的累积总答题数、答题正确数和积分。如果在答题时动态显示赞助商广告,则需要系统实时动态地选择要显示的广告内容,并计算广告商的广告显示次数,用以精确地计算广告费用。在开发在线答题网站时,普遍使用的方法是:将问题以及答案、问题类别、赞助商广告链接、广告显示次数等信息存储在关系型数据库(RDBMS)中。每次答题需按题型、用户等信息查询数据库中的问题,以作为下一题的显示,并在作出累加后写入数据库。使用应用服务器会话或应用服务器静态对象存储用户答题的信息,包括答题类型、上一题答案、本次答题次数、答题正确数等。这种方式通常需要频繁访问数据库,大量占用应用服务器的内存空间。如果应用在用户数量庞大的网站上,必然出现性能瓶颈,影响用户体验,甚至因为服务器压力过大而导致系统崩溃。因而,期望提供一种能够实现高并发网上答题形式的网络广告推送的系统和方法。

技术实现要素:
为了解决现有技术中的上述缺点和问题中的至少一个而提出本发明。根据一个方面,本发明提出了网络广告推送的系统,包括:应用前端,用于显示相关界面以及发送答题操作;负载均衡服务器,用于分发答题操作的请求;应用服务器集群,用于直接从redis数据库读取数据以及将信息直接存储到redis数据库;还用于在接收到负载均衡服务器分发的答题操作的请求时,直接读取redis数据库以获取正确答案,将答题操作的请求中所包括的答案与从redis数据库获取的正确答案进行比较以确定答案是否正确,当答案正确时,应用服务器将更新的信息直接存储到redis数据库,更新的信息包括更新的用户和更新的赞助商广告信息,更新的用户信息包括增加的用户答题数或积分等;更新的赞助商广告信息包括增加的赞助商广告显示次数;以及Redis数据库,用于存储数据并对应用服务器集群的操作进行响应。可选地,该系统进一步包括:关系数据库,用于持久化存储数据。可选地,所述应用服务器集群包括应急处理模块,用于在所述redis数据库无法访问的情况下将所述系统切换到应急模式。可选地,在所述应急模式的情况下,所述应急处理模块检测所述redis数据库是否恢复到能正常被访问;当检测到所述redis数据库恢复到能正常被访问,从关系数据库恢复数据到所述redis数据库,并重新切换回到正常模式。可选地,所述应用服务器能够直接读写所述关系数据库来获得查询统计。可选地,所述redis数据库进一步包括持久化模块,用于定期地将所述redis数据库中的数据持久化到所述关系数据库中。根据另一个方面,本发明提出了一种网络广告推送的方法,包括:通过应用前端显示相关界面;通过应用前端发送答题操作;通过负载均衡服务器将答题操作的请求分发给应用服务器集群的应用服务器;通过应用服务器直接读取redis数据库以获取正确答案;通过应用服务器来确定答案是否正确;通过基于答案是否正确通过应用服务器来读写redis数据库;所述方法还包括:在接收到负载均衡服务器分发的答题操作的请求时,直接读取redis数据库以获取正确答案,将答题操作的请求中所包括的答案与从redis数据库获取的正确答案进行比较以确定答案是否正确,当答案正确时,应用服务器将更新的信息直接存储到redis数据库,更新的信息包括更新的用户和更新的赞助商广告信息,更新的用户信息包括增加的用户答题数或积分等;更新的赞助商广告信息包括增加的赞助商广告显示次数。可选地,该方法进一步包括:检测所述redis数据库是否无法访问,并且当检测到redis数据库无法访问时,自动将系统切换到应急模式。可选地,该方法进一步包括:在自动将系统切换到应急模式之后,检测所述redis数据库是否恢复到能正常被访问;并且当检测到所述redis数据库恢复到能正常被访问,从关系数据库恢复数据到redis数据库,并重新切换回到正常模式。可选地,该方法进一步包括:定期地将所属redis数据库中的数据持久化到关系数据库中。附图说明通过下面结合附图进行的描述,本发明一些示范性实施例的上述和其他方面、特征和优点对于本领域技术人员来说将变得显而易见,其中:图1是图示根据本发明的网络广告推送的系统的拓扑图;以及图2是根据本发明的网络广告推送的方法的流程图。具体实施方式提供参考附图的下面描述以帮助全面理解本发明的示范性实施例。其包括各种细节以助于理解,而应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,省略了对公知功能和结构的描述。根据本发明的用于在分布式系统中进行检测的系统和方法能够通过带有时间戳信息的心跳信息并且通过远程过程调用(RPC)服务来检测节点存活、数据流通状态和网络延迟。下面将参考附图详细描述本发明。图1是图示根据本发明的网络广告推送的系统的拓扑图。如图1中所示,根据本发明的系统100包括应用前端110、负载均衡服务器120、应用服务器集群130、Redis数据库140、以及关系数据库150。应用前端110用于显示相关界面以及发送答题操作。例如,用户可以通过应用前端110进入网络答题页面,通过此页面可进行答题操作。网络答题页面可包括问题区域,在该问题区域中可显示当前的问题以及备选答案。此外,问题区域可以进一步显示上一题的答题结果、正确答案等。替选地,网络答题页面可有进一步题型选择区域,用于用户选择将在问题区域中显示的题型。而且,在用户答题的同时,可以在网络答题页面的某个位置(例如在网络答题页面的正下方等)根据用户答题是否正确、后台设置的赞助商广告、广告权重等中的至少一个动态显示与广告相关的信息。与广告相关的信息可以是广告本身、广告图片、广告链接等。在与广告相关的信息是广告图片、广告链接的情况下,广告图片、广告链接支持用户点击,以将用户指向广告相关的主页等。另外,网络答题页面可以在某个位置(例如网络答题页面的右边)显示当前用户答题的总数、答题正确数、最新参与者列表等信息。负载均衡服务器120用于分发答题操作的请求。负载均衡服务器120可以采用NGINX服务器,但是不限于此,也可以采用任何其他负载均衡服务器。由于作为web请求的负载均衡服务器对于本领域技术人员是已知的,所以在此不再进行详细描述。应用服务器集群130用于直接从redis数据库140读取数据以及将信息直接存储到redis数据库140。例如,当应用服务器集群130中的一个应用服务器接收到负载均衡服务器120分发的答题操作的请求时,其可以直接读取redis数据库140以获取正确答案。应用服务器将答题操作的请求中所包括的答案与从redis数据库140获取的正确答案进行比较以确定答案是否正确。当答案正确时,应用服务器可以将更新的信息直接存储到redis数据库140。例如,在一个示例中,更新的信息可以包括更新的用户和更新的赞助商广告信息等。更新的用户信息可以包括增加的用户答题数或积分等;以及更新的赞助商广告信息可以包括增加的赞助商广告显 示次数等。此外,当答案正确时,应用服务器可以进一步所设置的赞助商广告、广告权重等来选择要显示的广告。作为一个示例,应用服务器可以从redis数据库140获取所有赞助商广告的权重、计算要显示的广告、并显示计算出的广告。可选地,在显示计算出的广告之后,应用服务器可以获取广告已显示次数和上限并判断广告显示次数是否已达到上限;当已达到上限时,可以将该广告下线,此外可以删除redis数据库中的该广告的信息。当答案不正确时,应用服务器可以读取redis数据库以从redis数据库随即获取下一题。当应用服务器将信息直接存储到redis数据库中时,对redis数据库的选择可由zookeeper等服务器进行管理,也可采用一致性哈希算法来进行选择。本领域技术人员鉴于本文的教导将容易理解选择的方式,在此不再详述。应用服务器对于其他业务数据也可以直接读写关系数据库(RDBMS)。例如,当应用服务器要获得厉月汇总数据、个人累积答题数据等时,应用服务器可以直接从RDBMS中查询统计得出。此外,应用服务器集群130可以包括应急处理模块,用于在redis数据库140无法访问的情况下切换到应用服务器缓存的方式。例如,应急处理模块可以检测redis数据库是否能正常被访问。当应急处理模块检测到redis数据库无法访问时,可以自动将系统切换到应急模式。在应急模式中,可以采用应用服务器缓存和/或数据库缓存的方式。在一个示例中,当应急处理模块检测到redis数据库无法访问时,可以对运行标志进行设置以指示无法使用redis数据库,从而在该 情况下自动将系统切换到应急模式,例如采用应用服务器缓存和/或数据库缓存的方式。当系统切换到应急模式时,由于应用服务器的内存空间很有限,所以优选地对问题的类型或数量进行精简,以减少新参与者缓存的缓存时间。此外,在对用户数据的读写和广告数据的读写的数据量庞大的情况下,可以将对用户数据的读写和广告数据的读写采用RDBMS缓存的方式,而不是放在应用服务器内存中。在应急模式的情况下,由于频繁读写数据库将使得访问数据变慢、浏览器的响应时间增加,并且在高并发的情况下系统反应变慢,但可保证系统仍能正常响应用户请求,答题将继续。而且,在应急模式的情况下,应急处理模块可以检测redis数据库是否恢复到能正常被访问。当检测到redis数据库恢复到能正常被访问,从RDBMS恢复数据到redis数据库,并重新切换回到正常模式。Redis数据库140用于存储数据并对应用服务器集群130的操作进行响应。例如,当应用服务器请求正确答案时,redis数据库140可以用GET命令并以会话ID+题标识为KEY来获得正确答案,从而将正确答案返回给应用服务器;当应用服务器请求增加用户答题数/积分时,redis数据库140可以用INCR命令并以用户ID为KEY来实现;当应用服务器请求增加广告已显示次数时,redis数据库140可以用INCR命令并以广告ID为KEY来实现;当应用服务器请求返回所有广告权重时,redis数据库140可以用LRANGE并以所有广告的固定标识为KEY来获得所有广告权重,从而将所有广告权重返回给应用服务器;当应用服务器请求删除广告信息时,redis数据库140可以用DEL/HDEL命令并以广告ID为KEY来实现;当应用服务器请求随机获取下一题时,redis数据库140可以用GET命令并以题型标识为KEY来实现。从上面可以看出,对指定数据的原子性增加操作使用了redis数据库的INCR(时间复杂度为O(1)),对于获取所有广告的信息使用了redis数据库的LRANGE(时间复杂度O(S+N)),很好地利用了redis数据库在原子增的高性能和对多种数据结构的操作支持,从而能够有效应对频繁地读取和写入用户信息和广告信息的操作。此外,redis数据库可以进一步包括持久化模块,用于定期地将redis数据库中的数据持久化到RDBMS中。关系数据库150用于持久化存储数据。由于关系数据库对于本领域技术人员是熟知的,所以在此不再详述。图2是根据本发明的网络广告推送的方法的流程图。如图2中所示,根据本发明的方法开始于步骤S210。在步骤S210中,通过应用前端显示相关界面。例如,可以通过应用前端向用户显示网络答题页面,通过此页面可进行答题操作。网络答题页面可包括问题区域,在该问题区域中可显示当前的问题以及备选答案。此外,问题区域可以进一步显示上一题的答题结果、正确答案等。替选地,网络答题页面可有进一步题型选择区域,用于用户选择将在问题区域中显示的题型。而且,在用户答题的同时,可以在网络答题页面的某个位置(例如在网络答题页面的正下方等)根据用户答题是否正确、后台设置的赞助商广告、广告权重等中的至少一个动态显示与广告相关的信息。与广告相关的信息可以是广告本身、广告图片、广告链接等。在与广告相关的信息是广告图片、广告链接的情况下,广告图片、广告链接 支持用户点击,以将用户指向广告相关的主页等。另外,网络答题页面可以在某个位置(例如网络答题页面的右边)显示当前用户答题的总数、答题正确数、最新参与者列表等信息。在步骤S220中,通过应用前端发送答题操作。例如,用户可以通过选择答题的四个选项A、B、C、D中的一个并按下提交按钮等来发送答题操作。在步骤S230中,通过负载均衡服务器将答题操作的请求分发给应用服务器集群的应用服务器。例如,负载均衡服务器可以采用NGINX服务器,但是不限于此,也可以采用任何其他负载均衡服务器。在步骤S240中,通过应用服务器直接读取redis数据库以获取正确答案。在步骤S250中,通过应用服务器来确定答案是否正确。例如,应用服务器可以将答题操作的请求中所包括的答案与从redis数据库获取的正确答案进行比较来确定答案是否正确。在步骤S260中,通过基于答案是否正确通过应用服务器来读写redis数据库。根据一个实施例,当答案正确时,应用服务器可以将更新的信息直接存储到redis数据库。例如,在一个示例中,更新的信息可以包括更新的用户和更新的赞助商广告信息等。更新的用户信息可以包括增加的用户答题数或积分等;以及更新的赞助商广告信息可以包括增加的赞助商广告显示次数等。此外,当答案正确时,应用服务器可以进一步所设置的赞助商广告、广告权重等来选择要显示的广告。作为一 个示例,应用服务器可以从redis数据库获取所有赞助商广告的权重、计算要显示的广告、并显示计算出的广告。可选地,在显示计算出的广告之后,应用服务器可以获取广告已显示次数和上限并判断广告显示次数是否已达到上限;当已达到上限时,可以将该广告下线,此外可以删除redis数据库中的该广告的信息。当答案不正确时,应用服务器可以读取redis数据库以从redis数据库随即获取下一题。可选地,该方法可以包括检测redis数据库是否无法访问,并且当检测到redis数据库无法访问时,可以自动将系统切换到应急模式。在应急模式中,可以采用应用服务器缓存和/或数据库缓存的方式。在一个示例中,当应急处理模块检测到redis数据库无法访问时,可以对运行标志进行设置以指示无法使用redis数据库,从而在该情况下自动将系统切换到应急模式,例如采用应用服务器缓存和/或数据库缓存的方式。当系统切换到应急模式时,由于应用服务器的内存空间很有限,所以优选地对问题的类型或数量进行精简,以减少新参与者缓存的缓存时间。此外,在对用户数据的读写和广告数据的读写的数据量庞大的情况下,可以将对用户数据的读写和广告数据的读写采用RDBMS缓存的方式,而不是放在应用服务器内存中。可选地,该方法可以进一步包括在自动将系统切换到应急模式之后,检测redis数据库是否恢复到能正常被访问;并且当检测到redis数据库恢复到能正常被访问,从RDBMS恢复数据到redis数据库,并重新切换回到正常模式。可选地,该方法可以进一步包括定期地将redis数据库中的数据持久化到RDBMS中。应指出的是,上面分别对本发明的装置和方法实施例分别进行了描述,但是对一个实施例描述的细节也可应用于另一个实施例。以上结合具体实施例描述了本发明的基本原理,但是,需要指出的是,对本领域的普通技术人员而言,能够理解本发明的方法和系统的全部或者任何步骤或者部件可以以软件、硬件、固件或者它们的组合加以实现,这是本领域普通技术人员在阅读了本发明的说明的情况下运用他们的基本编程技能就能实现的。因此,本发明的目的还可以通过在任何计算装置上运行一个软件模块或者一组软件模块来实现。所述计算装置可以是公知的通用装置。因此,本发明的目的也可以仅仅通过提供包含实现所述方法或者装置的程序代码的程序产品来实现。也就是说,这样的程序产品也构成本发明,并且存储有这样的程序产品的存储介质也构成本发明。显然,所述存储介质可以是任何公知的存储介质或者将来所开发出来的任何存储介质。虽然本说明书包含许多特定实施方式细节,但是不应当将这些细节解释为对任何发明或可以主张的内容的范围的限制,而应当解释为对可以特定于特定发明的特定实施例的特征的描述。还可以将在本说明书中在分离的实施例的情境中描述的某些特征组合在单个实施例中实现。相反地,也可以将在单个实施方式的情境中描述的各个特征分离地在多个实施方式中实现或在任何适当的子组合中实现。此外,尽管可能在上面将特征描述为在某些组合中起作用,甚至最初主张如此,但是可以在一些情况下将来自所主张的组合的一个或多个特征从组合中删去,并且可以将所主张的组合指向子组合或者子组合的变体。类似地,虽然在附图中以特定次序描绘了操作,但是不应当将这理解为需要以所示的特定次序或者以连续次序执行这样的操作、或者需要执行所有图示的操作才能达到期望的结果。在某些情况下,多任务以及并行处理可以是有利的。此外,不应当将在上述实施例中的各种系统组件的分离理解为在所有实施例中均需要这样的分离,而应当理解的是,通常可以将所描述的程序组件和系统集成到一起成为单个 软件产品或封装为多个软件产品。计算机程序(也称作程序、软件、软件应用、脚本或代码)可以以任何形式的编程语言编写,所述编程语言包括编译或解释语言、或者说明性或过程语言,并且其可以以任何形式部署,包括作为独立程序或作为模块、组件、子程序或适于在计算环境中使用的其它单元。计算机程序没有必要对应于文件系统中的文件。可以将程序存储在保持其它程序或数据的文件(例如,存储在标记语言文档中的一个或多个脚本)的一部分、专用于讨论中的程序的单个文件或者多个协调文件(例如,存储一个或多个模块、子程序或部分代码的文件)中。上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1