大型高并发数据写入

简介: 引用:http://blog.csdn.net/lk519186921/article/details/7057492 目前在网站的架构构成中普遍使用到缓存来提供WEB应用的性能,由于网站规模的不同,分别存在如下几种类型的缓存架构。

引用:http://blog.csdn.net/lk519186921/article/details/7057492

目前在网站的架构构成中普遍使用到缓存来提供WEB应用的性能,由于网站规模的不同,分别存在如下几种类型的缓存架构。

(1)单机缓存

(2)简单分布式缓存

(3)使用复制方式的缓存集群

(4)使用散列方式的缓存集群

(5)高性能高、可靠的缓存集群

下面对于上述几种缓存策略的实际应用的适用情况以及优缺点进行详细分析,当然并没有一个缓存的教条存在,有的只是参考案例,对于具体的应用来讲要具体分析。

(1)单机缓存

      单机缓存也就是WEB应用和缓存是同一个应用,也就是最简单的缓存策略,大家在程序中使用的static的HashMap、List这些都可以算作缓存的范畴。比较有代表性的单机缓存有OSCache、Ehcache。

      OSCache是个一个广泛采用的高性能的J2EE缓存框架,OSCache能用于任何Java应用程序的普通的缓存解决方案。OSCache有以下特点:缓存任何对象,你可以不受限制的缓存部分jsp页面或HTTP请求,任何java对象都可以缓存。

      Ehcache来源于Hibernate,是一个纯java的在进程中的缓存,它具有以下特性:快速,简单,为Hibernate2.1充当可插入的缓存,最小的依赖性,全面的文档和测试。

      对于WEB应用程序采用单机缓存策略可以大大提高系统的吞吐量。笔者曾经在一个电信的WEB应用程序中使用OSCache来缓存数据,将主页面以及菜单对应的页面级别的数据缓存起来,以及在不是通过“more”方式查询出来的数据也就是说在页面中可以直接访问的数据都缓存起来,定时进行更新,对于系统的性能大大提升,对于数据库的访问量大大的减少了,主页面可以达到1000个并发。

      单机缓存的读写访问在所有的缓存策略中的性能最高,代价最小,在数据量不大并且在并发性能要求不是很高的情况下是非常合适的。单机缓存存在的问题是,可以缓存的数据量受到限制,并且它和应用部署到同一个服务器上彼此竞争消耗系统资源,无法扩展,并且在WEB访问量上涨,WEB需要集群部署的时候在所有的集群中都需要保存同样规模的缓存数据,不能彼此共享。

(2)简单分布式缓存

     简单的分布式缓存有两种代表性的部署方式。

     1、单实例的memcached部署方式 

     在讲到缓存的时候,memcached可能就无人不知啦,可以考虑单独部署一台memcached服务器,作为中央缓存服务器,多个应用以都分别以客户端的方式通过memcached服务器存取缓存数据,这样就避免了单机缓存方案中同样的数据需要在多个应用服务器中重复缓存的弊端。

      2、OSCache和Enhence的分布式缓存

      OSCache和Enhence可以使用JGroups进行缓存数据的广播,实现自动同步多个应用的缓存数据,在一个应用更新缓存之后该应用自动广播该缓存信息到其它应用的缓存,其它应用不需要再次访问数据库来再次加载数据更型缓存。

      上述两种简单的分布式缓存策略相对于单机缓存来讲存在较大进行,尤其是使用memcached的方式,由于memcached缓存的性能非常高,分离了应用和缓存服务器,可以在集群部署WEB应用的时候大大提高系统的吞吐量。至于OSCache和Enhence方式实现的分布式缓存则还是基于单机缓存的方式,只不过是优化了缓存数据的存放性能,基本限制没有得到改变。

(3)使用复制方式的缓存集群

  在满足如下几个条件的时候可以使用复制方式的缓存集群策略:

  1、需要缓存的数据量不是特别大,没有超过单机的限制

  2、需要极高的读取缓存的性能

  3、缓存中的数据变更的频率不是特别大

  对于满足上述3点要求的WEB应用,我们可以采用复制方式的缓存集群来提高系统的性能。通常的方式为使用虚拟IP的方式将多个缓存实例作为一个集群,该集群对于客户端应用来说是透明的,在一个缓存服务器宕机的时候,对于客户端来说没有影响。当一个应用更新了缓存的时候,该缓存实例通知集群中的其他缓存服务器,由缓存集群自动完成各个缓存服务器中缓存数据的同步。

(4)使用散列方式的缓存集群

  在满足如下几个条件的时候可以使用散列方式的缓存集群策略:

  1、需要缓存的数据量特别巨大

  2、需要极高的读取缓存的性能

  3、允许单点故障

相关文章
|
18天前
|
缓存 NoSQL Java
Java高并发实战:利用线程池和Redis实现高效数据入库
Java高并发实战:利用线程池和Redis实现高效数据入库
39 0
|
2月前
|
SQL 资源调度 关系型数据库
实时计算 Flink版产品使用合集之可以使用高并发大内存的方式读取存量数据吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
SQL 安全 算法
在高并发情况下,如何做到安全的修改同一行数据?
在高并发情况下,如何做到安全的修改同一行数据?
|
2月前
|
存储 消息中间件 Java
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的高可靠消息服务设计实现
在深入研究了 **“【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的API网关设计实现”** 设计实现后,我们意识到,尽管API网关为服务商提供了高效的数据获取手段,但实时数据的获取仍然是一个亟待解决的问题。
58 1
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的高可靠消息服务设计实现
|
2月前
|
缓存 安全 API
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的API网关设计实现
公司对外开放的OpenAPI-Server服务,作为核心内部系统与外部系统之间的重要通讯枢纽,每天处理数百万次的API调用、亿级别的消息推送以及TB/PB级别的数据同步。经过多年流量的持续增长,该服务体系依然稳固可靠,展现出强大的负载能力。
107 9
【亿级数据专题】「高并发架构」盘点本年度探索对外服务的百万请求量的API网关设计实现
|
11月前
|
缓存 NoSQL 关系型数据库
Spring Boot实战解决高并发数据入库: Redis 缓存+MySQL 批量入库
Spring Boot实战解决高并发数据入库: Redis 缓存+MySQL 批量入库
588 0
|
12月前
|
存储 Java 数据安全/隐私保护
项目实战典型案例15——高并发环境下由于使用全局变量导致数据混乱 高并发环境下对象被大量创建,导致GC并是CPU飙升
项目实战典型案例15——高并发环境下由于使用全局变量导致数据混乱 高并发环境下对象被大量创建,导致GC并是CPU飙升
114 0
项目实战典型案例15——高并发环境下由于使用全局变量导致数据混乱 高并发环境下对象被大量创建,导致GC并是CPU飙升
|
12月前
|
API 开发工具
Http实现API调用,高并发获取商品详情数据(Taobao/JD/1688/PDD数据)
Http实现API调用,高并发获取商品详情数据(Taobao/JD/1688/PDD数据)
105 0
|
XML JSON 缓存
lazada获得lazada商品详情 API接口调用成功案例分享 返回数据解析(实时数据,支持高并发请求)
lazada获得lazada商品详情 API接口调用成功案例分享 返回数据解析(实时数据,支持高并发请求)
2023最全电商API接口 高并发请求 实时数据 支持定制 电商数据 买家卖家数据
2023最全电商API接口 高并发请求 实时数据 支持定制 电商数据 买家卖家数据