CN201310572329.0
2013.11.15
CN104636395A
2015.05.20
实审
审中
实质审查的生效IPC(主分类):G06F 17/30申请日:20131115|||公开
G06F17/30
北京信威通信技术股份有限公司; 深圳信威通信技术有限公司
蒋永海
100193北京市海淀区东北旺西路八号中关村软件园七号楼信威大厦
本发明公开了一种计数器处理方法及装置,该方法包括:接收用户的访问业务的请求;通过内存计数器对访问所述业务的请求进行计数。通过本发明解决了相关技术中的计数器所存在的问题,提高了计数器使用的效果。
权利要求书1. 一种计数处理方法,其特征在于包括: 接收用户的访问业务的请求; 通过内存计数器对访问所述业务的请求进行计数。 2. 根据权利要求1所述的方法,其特征在于,通过所述内存计数器 对访问所述业务的请求进行计数包括: 建立于所述业务对应的缓存队列; 将所述业务的请求放在所述缓存队列中; 对所述缓存队列中的请求通过所述内存计数器进行计数。 3. 根据权利要求2所述的方法,其特征在于,对所述缓存队列中的 请求通过所述内存计数器进行计数包括: 使用与所述缓存队列对应的线程对所述缓存队列中的请求通过所述 内存计数器进行计数。 4. 根据权利要求3所述的方法,其特征在于,将所述业务的请求放 在所述缓存队列中包括: 根据所述业务请求访问的内容的标识将所述业务的请求放在所述缓 存队列中。 5. 根据权利要求4所述的方法,其特征在于,根据所述业务请求访 问的内容的标识将所述业务的请求放在所述缓存队列中包括: 对所述标识进行哈希取模运算,根据所述哈希取模运算的结果将所述 业务的请求放在所述缓存队列中。 6. 根据权利要求1至5中任一项所述的方法,其特征在于,通过所 述内存计数器对访问所述业务的请求进行计数之后,所述方法还包括: 将所述内存计数器的计数值导出到日志文件或者数据库中。 7. 根据权利要求6所述的方法,其特征在于,将所述内存计数器的 计数值导出到日志文件或者数据库中包括以下至少之一: 在预定时期结束之后,将所述预定时期内的所述内存计数器的计数值 的变化值导出到所述日志文件或所述数据库; 在所述预定时期结束之后,将所述预定时期内的所述内存计数器的计 数值的总值导出到所述日志文件或所述数据库中; 接收到倒数所述内存计数器的计数值的命令,将所述内存计数器的计 数值的总值和/或相对于上一次导出时的变化值导出到所述日志文件或所 述数据库中。 8. 一种计数处理装置,其特征在于包括: 接收模块,用于接收用户的访问业务的请求; 计数模块,用于通过内存计数器对访问所述业务的请求进行计数。 9. 根据权利要求8所述的装置,其特征在于,所述计数模块包括: 建立单元,用于建立于所述业务对应的缓存队列; 处理单元,用于将所述业务的请求放在所述缓存队列中; 计数单元,用于对所述缓存队列中的请求通过所述内存计数器进行计 数。 10. 根据权利要求9所述的装置,其特征在于,所述计数单元用于使 用与所述缓存队列对应的线程对所述缓存队列中的请求通过所述内存计 数器进行计数。 11. 根据权利要求10所述的装置,其特征在于,所述处理单元用于 根据所述业务请求访问的内容的标识将所述业务的请求放在所述缓存队 列中。 12. 根据权利要求11所述的装置,其特征在于,所述处理单元用于 对所述标识进行哈希取模运算,根据所述哈希取模运算的结果将所述业务 的请求放在所述缓存队列中。 13. 根据权利要求8至12中任一项所述的装置,其特征在于,所述 装置还包括:导出模块,用于将所述内存计数器的计数值导出到日志文件 或者数据库中。 14. 根据权利要求13所述的装置,其特征在于,所述导出模块用于 执行以下至少之一: 在预定时期结束之后,将所述预定时期内的所述内存计数器的计数值 的变化值导出到所述日志文件或所述数据库; 在所述预定时期结束之后,将所述预定时期内的所述内存计数器的计 数值的总值导出到所述日志文件或所述数据库中; 接收到倒数所述内存计数器的计数值的命令,将所述内存计数器的计 数值的总值和/或相对于上一次导出时的变化值导出到所述日志文件或所 述数据库中。
说明书一种计数处理方法及装置 技术领域 本发明涉及网络领域,具体而言,涉及计数处理方法及装置。 背景技术 访问计数器是现今网页(Web)服务不可缺少的组成部分,它不仅在 一定程度上反映着业务的“活力”,更主要的还为后续的业务开发和运营 提供参考和依据:最终用户对什么样的内容更感兴趣,A/B测试网站结构 变化时访问情况有何不同,如何让最终用户更快捷的浏览内容等等,夸张 一点说,好的计数器可以让开发和运营事半功倍。 目前常用的计数器设计有如下几种: 文件方式:用户的每次请求都存储到日志文件中,每行记录一个请求, 包含更多的原始数据,如访问时间、请求类型、请求参数等;基于日期或 文件大小创建新文件,在每个日志文件完成写入后进行数据处理; 数据库方式:计数器数据一直保存在数据库中,包括各个页面的被访 问数,单个用户在session有效期内页面浏览数、浏览器版本、IP数量等 等,访问数据的创建和累加在数据库中完成; 缓存服务器方式:系统架构中引入独立的缓存服务器,专门用于中间 数据的存储,为所有的业务提供数据支撑;一般采用key-value方式存储 数据; 上述计数器均存在一些问题。下面对上述几种方式存在的问题进行说 明。 文件方式:需要等待日志文件完成写入,属于半实时操作,数据滞后; 内存中的缓存数据和数据库的半加工数据需要另行设计存储使用; 数据库方式:在用户规模/并发用户数增长时,计数器数据频繁的变 化导致磁盘IO的压力增大,以至于影响到主业务的运行,无法实现业务 的优先级管理,在计数器数据种类和用户规模进一步扩大时无法支撑;但 数据库模式的可检索性和数据安全性较好,适用于小型网站; 缓存服务器方式:由于引入独立的缓存模块/组件,增加了额外的硬 件投入和系统整体的复杂度,需要增加额外的实现代码,使得开发和定位 问题更加困难,适用于超大的业务模型和更大的开发团队。 针对相关技术中上述计数器所存在的问题,目前尚未提出有效的解决 方案。 发明内容 本发明提供了计数处理方法及装置,以至少解决相关技术中计数器所 存在的问题。 根据本发明的一个方面,提供了一种计数处理方法,包括:接收用户 的访问业务的请求;通过内存计数器对访问所述业务的请求进行计数。 优选地,通过所述内存计数器对访问所述业务的请求进行计数包括: 建立于所述业务对应的缓存队列;将所述业务的请求放在所述缓存队列 中;对所述缓存队列中的请求通过所述内存计数器进行计数。 优选地,对所述缓存队列中的请求通过所述内存计数器进行计数包 括:使用与所述缓存队列对应的线程对所述缓存队列中的请求通过所述内 存计数器进行计数。 优选地,将所述业务的请求放在所述缓存队列中包括:根据所述业务 请求访问的内容的标识将所述业务的请求放在所述缓存队列中。 优选地,根据所述业务请求访问的内容的标识将所述业务的请求放在 所述缓存队列中包括:对所述标识进行哈希取模运算,根据所述哈希取模 运算的结果将所述业务的请求放在所述缓存队列中。 优选地,通过所述内存计数器对访问所述业务的请求进行计数之后, 所述方法还包括:将所述内存计数器的计数值导出到日志文件或者数据库 中。 优选地,将所述内存计数器的计数值导出到日志文件或者数据库中包 括以下至少之一:在预定时期结束之后,将所述预定时期内的所述内存计 数器的计数值的变化值导出到所述日志文件或所述数据库;在所述预定时 期结束之后,将所述预定时期内的所述内存计数器的计数值的总值导出到 所述日志文件或所述数据库中;接收到倒数所述内存计数器的计数值的命 令,将所述内存计数器的计数值的总值和/或相对于上一次导出时的变化 值导出到所述日志文件或所述数据库中。 根据本发明的另一个方面,还提供了一种计数处理装置,包括:接收 模块,用于接收用户的访问业务的请求;计数模块,用于通过内存计数器 对访问所述业务的请求进行计数。 优选地,所述计数模块包括:建立单元,用于建立于所述业务对应的 缓存队列;处理单元,用于将所述业务的请求放在所述缓存队列中;计数 单元,用于对所述缓存队列中的请求通过所述内存计数器进行计数。 优选地,所述计数单元用于使用与所述缓存队列对应的线程对所述缓 存队列中的请求通过所述内存计数器进行计数。 优选地,所述处理单元用于根据所述业务请求访问的内容的标识将所 述业务的请求放在所述缓存队列中。 优选地,所述处理单元用于对所述标识进行哈希取模运算,根据所述 哈希取模运算的结果将所述业务的请求放在所述缓存队列中。 优选地,所述装置还包括:导出模块,用于将所述内存计数器的计数 值导出到日志文件或者数据库中。 优选地,所述导出模块用于执行以下至少之一:在预定时期结束之后, 将所述预定时期内的所述内存计数器的计数值的变化值导出到所述日志 文件或所述数据库;在所述预定时期结束之后,将所述预定时期内的所述 内存计数器的计数值的总值导出到所述日志文件或所述数据库中;接收到 倒数所述内存计数器的计数值的命令,将所述内存计数器的计数值的总值 和/或相对于上一次导出时的变化值导出到所述日志文件或所述数据库 中。 通过本发明,采用接收用户的访问业务的请求;通过内存计数器对访 问所述业务的请求进行计数。解决了相关技术中的计数器所存在的问题, 提高了计数器使用的效果。 附图说明 此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一 部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发 明的不当限定。在附图中: 图1是根据本发明实施例的计数处理方法的流程图; 图2是根据本发明实施例的计数处理方法的优选流程图; 图3是根据本发明实施例的计数处理装置的结构框图; 图4是根据本发明实施例的计数处理装置的优选结构框图; 图5是根据本发明实施例的计数处理模块的优选结构框图二; 图6是根据本发明优选实施例的内存计数器的架构设计示意图; 图7是根据本发明优选实施例的计数器的系统调用的示意图。 具体实施方式 需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的 特征可以相互组合。下面将参考附图并结合实施例来详细说明本发明。 在本实施例中提供了一种计数处理方法,图1是根据本发明实施例的 计数处理方法的流程图,如图1所示,该流程包括如下步骤: 步骤S102,接收用户的访问业务的请求; 步骤S104,通过内存计数器对访问该业务的请求进行计数。 通过上述步骤,使用了内存计数器,由于内存数据的处理速度均要优 于日志文件、数据库以及缓存服务器的处理速度,因此,相对于现有技术 中的计数器的处理方式,内存计时器具有更好的处理效率。 通常会有不同的业务的请求,在一个优选实施例中,可以为不同的业 务建立不同的缓存队列,这样对于多种业务的处理更具有优势,图2中示 出了该优选实施例的步骤。 图2是根据本发明实施例的计数处理方法的优选流程图,如图2所示, 图1中示出的步骤S104可以包括如下步骤: 步骤S202,建立于该业务对应的缓存队列; 步骤S204,将该业务的请求放在该缓存队列中; 步骤S206,对该缓存队列中的请求通过该内存计数器进行计数。 区分来自不同业务的请求的方式有很多种,例如,在一个优选实施例 中,可以根据该业务请求访问的内容的标识来区分业务,并且将该业务的 请求放在对应的缓存队列中。更优地,可以对该标识进行哈希取模运算, 根据该哈希取模运算的结果将该业务的请求放在对应的缓存队列中。 为了使缓存队列中的得到及时的处理,在另一个优选实施方式中,可 以使用与该缓存队列对应的专用的线程对该缓存队列中的请求通过该内 存计数器进行计数。 一般情况下,使用内存计数器的服务器是不重新启动,为了防止意外 重新启动可能造成的内存计数器的值的丢失,作为一个优选实施例,可以 在通过该内存计数器对访问该业务的请求进行计数之后,将该内存计数器 的计数值导出到日志文件或者数据库中。 将内存计数器的计数值导出到日志文件或者数据库中的方式有很多 种,在本实施例中提供了几种优选的方式:将该内存计数器的计数值导出 到日志文件或者数据库中可以包括以下至少之一:在预定时期结束之后, 将该预定时期内的该内存计数器的计数值的变化值导出到该日志文件或 该数据库;在该预定时期结束之后,将该预定时期内的该内存计数器的计 数值的总值导出到该日志文件或该数据库中;接收到倒数该内存计数器的 计数值的命令,将该内存计数器的计数值的总值和/或相对于上一次导出 时的变化值导出到该日志文件或该数据库中。 对应于上述的方法,在本实施例中还提供了一种计数处理装置,上述 方法中的每一个步骤均可以通过一个模块或者一个单元来实现,图3是根 据本发明实施例的计数处理装置的结构框图,如图3所示,该计数处理装 置包括: 接收模块32,用于接收用户的访问业务的请求;计数模块34,用于 通过内存计数器对访问该业务的请求进行计数。 图4是根据本发明实施例的计数处理装置的优选结构框图,如图4 所示,计数模块34可以包括:建立单元342,用于建立于该业务对应的 缓存队列;处理单元344,用于将该业务的请求放在该缓存队列中;计数 单元346,用于对该缓存队列中的请求通过该内存计数器进行计数。 优选地,计数单元346用于使用与该缓存队列对应的线程对该缓存队 列中的请求通过该内存计数器进行计数。 优选地,处理单元344用于根据该业务请求访问的内容的标识将该业 务的请求放在该缓存队列中。 优选地,处理单元344用于对该标识进行哈希取模运算,根据该哈希 取模运算的结果将该业务的请求放在该缓存队列中。 图5是根据本发明实施例的计数处理模块的优选结构框图二,如图5 所示,该装置还包括:导出模块52,用于将该内存计数器的计数值导出 到日志文件或者数据库中。 优选地,导出模块52用于执行以下至少之一:在预定时期结束之后, 将该预定时期内的该内存计数器的计数值的变化值导出到该日志文件或 该数据库;在该预定时期结束之后,将该预定时期内的该内存计数器的计 数值的总值导出到该日志文件或该数据库中;接收到倒数该内存计数器的 计数值的命令,将该内存计数器的计数值的总值和/或相对于上一次导出 时的变化值导出到该日志文件或该数据库中。 下面以Web请求为例结合一个优选实施例进行说明。 本优选实施例的目的在于提供一个随业务和用户规模增长,兼顾处理 性能和设计的通用性,通过对常规硬件环境下计数器运行参数的调整以改 变处理能力的计数器模型;在业务规模和统计数据种类增加时,由业务增 加的规模估算出新增的内存占用,适度增加CPU处理能力/内存即可满足; 提供千万用户基数/百万用户在线的业务支撑; 在本优选实施例中涉及到内存计数器,大并发访问内存计数器是一个 具备高可用性、高性能、扩展性较好的面向互联网服务的通用计数器模型, 在不引入额外组件增加系统架构复杂性的同时,通过内存数据和日志文件 的配合使用,提供高可靠的用户访问数据收集功能;可利用现有的数据结 构:线程Thread、队列Queue、HashMap、定时任务,完成模型的具体实 现。 图6是根据本发明优选实施例的内存计数器的架构设计示意图,下面 结合图6进行说明。 根据业务的实际增长情况和服务器的硬件配置,内存计数器可启用相 匹配的工作线程数以快速完成用户请求的分类计数累加操作,工作线程和 请求缓存队列一一对应,在本优选实施例中可以最大支持16线程的并发 处理;工作线程的处理能力不能低于缓存队列的请求增长速度,需要基于 实际的业务进行压力测试。 计数器数据结构:计数器数据可以使用一个HashMap存储,通过key 值的Hash取模运算(key值可以是用户id、内容id、网页的链接等等可 以做为唯一标识的字符串),最多可把整个计数器数据分成16个块,更多 的数据块意味着写操作锁定的粒度更小,在一定范围内通过增加物理线程 数来提升计数器的处理能力;计数器数据块也可使用16个HashMap存储, 每个HashMap从属于一个工作线程,如同请求缓存队列的设置,需要注 意的是在计数器数据从数据库和日志文件恢复时,需要基于相同的hash 算法处理,且遍历计数器数据时控制16个HashMap的迭代;另外,通过 读写锁的采用,HashMap可支持读操作的多次重入,在读取要求较多的 情况进一步保证计数器的性能。 请求分发:基于Web Server的实现,http接口可并发支持大量用户请 求,分发时基于与计数器数据相同的Hash函数,对key值运算后取模, 把归属于相同计数器数据块的请求放入同一个请求缓存队列,这样在工作 线程数大于1时,可以避免使用单一缓存队列时,如果缓存队列中连续的 多个请求对应着同一个计数器数据块,导致工作线程由于并发锁的存在必 须等待的情况,实际工作效率低于工作线程数;在业务请求(相当于key 值)分布足够广泛时,各请求缓存队列分配的请求数量会更加接近,工作 线程的任务随之均衡;而在业务规模较小时,可减少工作线程,合并缓存 队列;请求的分发操作是一个轻量级的hash运算,处理时间极短,因此 单个web server即可提供很大的并发支持。 工作线程:每个工作线程从所属的请求缓存队列获取数据,更新到对 应的计数器数据块,同时把本次处理的请求持久化写入当前处理周期的日 志文件内,以保证数据安全性;工作线程的配置应在当前业务的基础上留 有余量,以满足峰值的数据处理要求;缓存队列的写入和读出需要进行同 步操作控制,同计数器数据块的细粒度一样,缓存队列也基于业务规模创 建多个,队列数据的处理能力可实现线性增长。 守护线程:通过配置守护线程,计数器数据定时导出持久化写入数据 库,数据从内存导出时,工作线程会被暂时停止,直到完成计数器数据的 导出,但用户的请求会继续分发到相应的缓存队列,待工作线程恢复执行; 工作线程重新启动前,先更新当前处理周期的日志文件名,然后继续执行 新周期的计数器累加操作。通过定期导出到数据库+持久化请求日志的模 式,服务正常维护重启或系统异常崩溃都可以恢复环境,继续计数器服务; 业务数据:通过在计数器模型中存储自定义业务对象,在性能略为降 低的情况下,获得更好的可理解性,更好的进行业务开发。 数据导出策略:计数器数据导出到数据库时,可以有如下三种策略: A,常规更新,即当日日期未发生变化时,每次导出往临时表写入部 分内存数据,可根据计数器数据的总数,选择写入绝对数量、相对百分比、 本周期内计数发生变化的记录; B,完全更新,当日期发生+1变化时,执行计数器数据的完全写入, 并清理临时表当日陆续写入的记录; C,强制更新,由管理员手动停止服务时触发,把当前内存中的计数 器数据导出到数据库,服务重新启动恢复环境时,加载最后一次导出的数 据; 本优选实施实施例中,可以减小写操作的粒度,通过增加工作线程数 使处理能力得到线性提升;可以对请求数据进行预处理,相同数据块的操 作放入同一个缓存队列,最大程度使用线程并发能力;采用了内存、数据 库和日志文件相结合的模式,保证处理性能的同时,最大程度的避免数据 丢失,支持计数器数据的恢复。 下面结合彩铃门户的铃声访问计数来进行说明。图7是根据本发明优 选实施例的计数器的系统调用的示意图,下面结合图7进行说明。 基于彩铃业务情况,业务人员需要获知彩铃的试听数、订制数、退订 数三种计数,以便于了解用户对铃音的偏好情况,从而准备更符合本地用 户习惯的铃音内容,吸引更多用户以提高彩铃业务的收入,而异常的试听 /订制比例也有助于彩铃业务的更好运营。 彩铃计数器数据以彩铃id为key,以试听数、订制数、退订数构造对 象value,对一天内的彩铃访问情况进行记录;通过预处理的缓存队列, 工作线程执行计数器累加操作时不会碰到并发锁的情况,执行效率得到保 证。 定时任务线程通过配置的CRON表达式,计数器数据导出到数据库 的操作可精确到秒级运行,当日内可多次创建计数器数据的快照,配合每 次快照生成相应的请求日志文件,尽可能的保证统计数据的完整,从而为 业务提供准确的后期分析。 当服务器日期发生变化时,内存中的计数器数据在导出生成当日访问 记录后将被清空,同时基于当日访问记录生成Top5排行榜,更新对应的 周/旬/月/季/年的排行榜数据,排行榜数据缓存被清空,再下一次数据请 求到达时延时加载新的排行榜,供生成静态页面时使用。 上述优选实施例具有如下优点: 1、通过配置启用的工作线程数提供不同的处理能力。 2、利用缓存队列和Http接口原生的并发能力,充分利用CPU的多 核处理能力,避免了资源争抢的情况出现。 3、能在较长时间内满足业务的常规增长,支撑千万用户规模/百万用 户在线的业务场景。 显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤 可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者 分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执 行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来 执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模 块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特 定的硬件和软件结合。 以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于 本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精 神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明 的保护范围之内。
《一种计数处理方法及装置.pdf》由会员分享,可在线阅读,更多相关《一种计数处理方法及装置.pdf(12页珍藏版)》请在专利查询网上搜索。
本发明公开了一种计数器处理方法及装置,该方法包括:接收用户的访问业务的请求;通过内存计数器对访问所述业务的请求进行计数。通过本发明解决了相关技术中的计数器所存在的问题,提高了计数器使用的效果。。
copyright@ 2017-2020 zhuanlichaxun.net网站版权所有经营许可证编号:粤ICP备2021068784号-1