`
youxinrencwx
  • 浏览: 71525 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

大流量数据异步输出

 
阅读更多

在大型网站中常常会遇到大流量的数据输出问题,过于频繁的输出到DB、文件、第三方系统都会带来不稳定性和低效率。因此需要采用一定的方式来解决这个问题,其实这部分内容的简单处理框架早就用在实际项目中,不过今天正好有外部的朋友问起我,我就整理了一下作为google的开源代码放上去了,这里也简单介绍一下,有兴趣的朋友可以去看看,最好是能够给一些建议。

场景:

应用频繁访问接口服务器,需要控制每个应用在可配置时间段内(例如一分钟)对于某一服务的访问次数,同时需要记录每一次访问内容到数据库中。

几个点:

1. 高并发情况下,集群服务器需要全局计数。(需要将更新和判断作为原子操作,而非两阶段操作,保证高并发事务)

2. 异步日志批量输出。防止高频率访问第三方系统(DB,本地IO),提高性能。

3. 采用黑名单简化计数器判断。

1,3通过memcache就可以实现,如果需要使用客户端可以看看google code上的:http://code.google.com/p/memcache-client-forjava/

这里主要在说一下2,在很多场景中都会有这样的需求,一些需要输出到DB或者文件的内容需要缓存起来异步批量操作,提高性能也降低对于第三方系统的压力。大致设计结构图如下:

自上而下来看,ThreadA,B,C都是程序中其他模块的线程,他们需要输出记录到数据库或者DB中。当有数据到达需要输出时,仅仅只是将数据放入阻塞队列中,而有一个消费者线程池中的线程发现队列中有数据就将数据写入其中某一个线程的数据分页中(每一个线程维护一个自己的内存分页,当页满或者到达了配置的输出间隔时间以后就将页内数据交给输出线程池中的输出线程完成批量数据输出)。


下面是三个类图,囊括了这个小工具框架的所有类:

 

上图是对外提供的异步输出模板,其他模块可以直接使用模板来输出数据。

上图是异步输出器包,是异步输出模板的内置逻辑实现,其他线程直接使用异步输出模板来输出记录。

上图是消费者和输出线程的接口和默认实现类,可以替换及扩展。

整个框架基本都可以通过配置文件扩展每一个角色(异步输出类,消费者,写出者),扩展方式就是通过在classpath下增加目录META-INF/services/然后将需要扩展的接口作为文件名称,内容就是接口的实现类,这样既可扩展和替换任何一个角色的具体实现。

具体的代码和测试用例可以去http://code.google.com/p/asynwriter/ 下载。

分享到:
评论

相关推荐

    java源码:异步输出框架 AsynWriter.rar

    Java源码:异步输出框架AsynWriter是一个用于高效、非阻塞地处理大量输出数据的框架。在处理高并发和大数据量的场景下,传统的同步输出方式可能会导致线程阻塞,降低系统性能。AsynWriter通过异步化处理,避免了这种...

    ASP.NET treeView异步加载节点

    在一些场景下,由于数据量大或者为了提高用户体验,我们可能会选择异步加载(Ajax)的方式来加载TreeView的节点。这种方式可以在用户滚动或展开节点时动态获取并显示数据,而不是一次性加载所有数据,从而减少页面...

    高速异步串口收发器

    高速异步RS232串口数据收发器(以下简称“收发器”),是一种高性能的串行通信设备,支持高达2Mbps的数据传输速率。该收发器采用了四路独立的端口设计,并配备有独立的FIFO缓冲区,旨在提高数据处理能力和通信效率。...

    fpga串口接收发送数据,通过ram存储数据。

    波特率发生器负责生成与通信协议匹配的时钟信号,发送器用于将并行数据转化为串行数据输出,而接收器则接收串行数据并转换为并行数据供内部使用。 PC上位机通常通过标准的串口(如RS-232或USB转串口)与FPGA进行...

    基于UVM的异步fifo验证平台设计

    设计可变位宽和深度的FIFO存储单元是为了适应不同的数据流量和系统需求,提供更大的灵活性。 接下来,我们来讨论UVM验证平台的构建。UVM是一种基于SystemVerilog的业界标准验证方法学,它提供了丰富的组件库和框架...

    android异步加载网络图片实例

    在Android开发中,异步加载网络图片是一项常见的需求,特别是在构建UI丰富、数据动态更新的应用时。本实例将深入探讨如何实现这一功能,确保用户体验流畅,避免因网络延迟导致的界面卡顿。以下是对这个话题的详细...

    行业文档-设计装置-一种基于持续数据多输入输出流并发写入性能优化方法.zip

    持续数据通常指那些源源不断地产生的数据,例如传感器数据、网络流量数据或者用户行为日志等。这些数据需要实时或近实时地进行处理,以支持快速决策或分析。 接着,多输入输出流并发写入是指系统能够同时接收并处理...

    手机端辅助测试工具WeTest-Assistant.zip

    应用特性Android(2.3 - 5.1):手游性能数据采集记录(CPU,内存,流量,FPS)支持异步和实时数据同步支持场景标签和分场景统计自动输出测试报告 iOS(iOS7以上,需要越狱)手游性能数据采集记录(CPU,内存,流量)...

    基于大数据的景区客流量预测系统设计.docx

    - 预测输出:采用adapative LASSO回归的自适应算法,结合XMLHttpRequest对象实现异步输出预测结果。 4. 预测有效性验证: - 通过比较系统预测数据与实际客流量,使用平均绝对误差、均方根误差和平均绝对百分误差...

    基于ram的简易串口数据收发系统

    4. **数据缓冲和流控**:当数据速率超过RAM读写速度时,可能需要数据缓冲或流量控制机制。 5. **仿真和验证**:在实际硬件实现前,通过软件仿真验证设计的正确性至关重要。 6. **综合和实现**:将Verilog代码转换...

    vb统计网络流量 瞬间流量源码

    通过查询WMI对象,可以获取到网络接口的输入和输出字节数,从而计算网络流量。 以下是一个简单的VB代码示例,使用WMI查询网络流量: ```vb Imports System.Management Sub GetNetworkStats() Dim query As New ...

    异步TTS语音播报技术在高校教务咨询呼叫中心系统的应用.docx

    人工服务子系统保障了用户在面对复杂问题或大流量访问时,仍能获得及时的人工响应。而教务通知自动播报子系统和教务信息自助查询子系统则基于TTS技术,实现了信息的快速准确播报。 为了应对教务信息数据量庞大的...

    一个简单的网络流量监控软件源码

    5. **日志记录**:为了追踪历史流量和故障排查,软件会将流量数据记录到日志文件中。日志管理应考虑存储限制和日志清理策略。 6. **性能优化**:由于监控软件需要频繁地读取和处理数据,因此代码需要高效且轻量级,...

    低延迟实时数据处理算法.pptx

    这意味着整个处理过程(从数据采集到最终输出)的时间间隔非常短,通常在毫秒或微秒级别。 - **高吞吐量**:系统需要处理的数据量巨大,每秒可能产生数百万乃至数十亿条记录。为了应对如此庞大的数据量,需要采用...

    C#本地网卡检测流量程序

    5. **实时更新与界面展示**:为了实时展示流量信息,程序需要在一个循环中不断获取新的流量数据并更新界面。这可能涉及到多线程或异步编程,以避免阻塞用户界面。可以使用控件如Label或ProgressBar来显示流量数据。 ...

    广嵌开发板S3C2440中文数据手册第十一章

    S3C2440A的UART0和UART1支持基于nRTS和nCTS的自动流控制,使得UART在与外部设备通信时能自动调节数据流量。在自动流控制中,nRTS的状态取决于接收器的条件,而nCTS则控制发送器的操作,确保数据传输的顺畅。 #### ...

    汞:Go的异步冲洗缓冲写入器

    这种设计使得写入操作更加高效,特别是在处理大流量数据时,可以避免频繁的同步操作,降低了系统开销。 在实际使用中,开发者可以像使用`bufio.Writer`一样使用汞库,创建一个`Mercury`实例,然后调用其`Write`方法...

    vc编写网络流量控制程序

    6. **事件驱动编程**:使用`select`、`WSAAsyncSelect`或`WSAEventSelect`等函数可以实现异步网络I/O,这样程序可以在等待数据到达时执行其他任务,提高效率。 7. **错误处理**:网络编程中错误处理至关重要,如...

    格兰富流量传感器数字接口说明

    - **RAM**:动态存储传感器的运行数据,包括但不限于当前的流量、温度、压力等测量值,以及系统运行状态和故障日志等,为实时监控和数据分析提供了基础。 #### 结论 通过对格兰富流量传感器数字接口的深度解析,...

    利用GridView+AJAX实现的子报表输出Sub report 控件源码及例子

    这个功能不仅可以提升数据展示的直观性和用户交互性,还能减少网络流量,提高页面响应速度。在实际项目中,可以根据需求进行调整和扩展,例如增加分页、过滤等高级功能,以满足更复杂的应用场景。

Global site tag (gtag.js) - Google Analytics