分布式缓存与javaee

上传人:ldj****22 文档编号:39966527 上传时间:2018-05-21 格式:PDF 页数:56 大小:1.95MB
返回 下载 相关 举报
分布式缓存与javaee_第1页
第1页 / 共56页
分布式缓存与javaee_第2页
第2页 / 共56页
分布式缓存与javaee_第3页
第3页 / 共56页
分布式缓存与javaee_第4页
第4页 / 共56页
分布式缓存与javaee_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《分布式缓存与javaee》由会员分享,可在线阅读,更多相关《分布式缓存与javaee(56页珍藏版)》请在金锄头文库上搜索。

1、分布式缓存与JavaEE -介绍Oracle Coherence日程安排 什么是缓存什么是缓存 为什么要用分布式缓存为什么要用分布式缓存 分布式缓存的特性分布式缓存的特性 Oracle CoherenceOracle Coherence的介绍的介绍 其他的分布式缓存介绍其他的分布式缓存介绍 Terracotta, ,Memecached, ,MySQL Cluster, ,Dynamo (Cassandra) , ,JBoss Cache什么是缓存缓存的定义(在缓存的定义(在BIOSBIOS系统工程师眼里)系统工程师眼里)缓存的定义(文件系统工程师)缓存的定义(文件系统工程师)缓存的定义(磁盘

2、驱动开发工程师)缓存的定义(磁盘驱动开发工程师)缓存的定义(缓存的定义(WebWeb工程师)工程师)JavaEE中的缓存中的缓存 JSR107 JCACHE-Java Temporary Caching API Jakarta Jakarta 的标准项目的标准项目: Cache Taglib: Cache Taglib 缓存页面 缓存对象 ORM ORM (HibernateHibernate,ToplinkToplink) 缓存缓存 数据库层的缓存数据库层的缓存 业务对象的缓存业务对象的缓存缓存的原则缓存的原则以提高性能为目的以提高性能为目的维护缓存的代价要小于创建原始维护缓存的代价要小于创

3、建原始 对象的代价对象的代价如何提高系统的性能如何提高性能如何提高性能-各个层面的应用优化各个层面的应用优化Java EE 应用编程Java EE应用服务器Java 虚拟机操作系统硬件(网卡,CPU,内存)(c) Copyright 2010. Oracle Corporation如何提高性能如何提高性能横向扩展 (Scaling Out)如何获得可扩展性如何获得可扩展性 纵向扩展(Scaling Up) 增加CPU,内存,升级到更强大昂贵的系统 但是受单台服务器的限制 横向扩展 (Scaling Out) 增加节点,使用便宜的服务器 应用系统的复杂性 (有状态的应用-无状态的应用) 无状态的

4、应用几乎不存在 大多数的无状态的应用将状态放在数据库中 其实数据库更加难以扩展其实数据库更加难以扩展 ACID (很多Lock,读写一致性,写的持久性) 分布式数据库(集群数据库)机制复杂,价格昂贵数据库横向扩展方案数据库横向扩展方案-复制复制 Master用于写操作 Slave用于读操作 缓解Master的读操作 有不一致的时间窗口 不能解决大量写的操 作数据库横向扩展方案数据库横向扩展方案-集群集群 Oracle RAC 共享存储 负载均衡读和写 数据库写需要同步 到所有节点的内存 中,大大增加了写 的时间延迟 增加了资源竞争 节点数量有限制 读和写都不能理想 的扩展数据库横向扩展方案数据

5、库横向扩展方案-ShardingSharding Share nothing 数据垂直分区 不同的节点放置 不同的数据库 单个节点的处理 能力有限制数据库横向扩展方案数据库横向扩展方案-ShardingSharding Share nothing (Google, FaceBook, Flickr) 数据水平分区(MySQL Cluster) 分区的逻辑和数据一致性保证放到数据访问层 数据迁移代价大 查询和统计变得复杂,join操作是噩梦(数据冗余) 一个数据库操作可能转化为多个XA操作NOSQL NOSQL 方案方案 高并发读写,海量存储的需求增加 对数据一致性要求减少(最终一致性) GFS

6、,BigTable,MapReduce Hadoop开源实现 Redis,Tokyo, Cassandra(SimpleDB),MongoDB, Hbase,CouchDB,Dynamo满足企业应用的需求满足企业应用的需求 数据的严格一致性和事务性 传统的数据库开发模式 复杂的关联查询条件 高性能和高扩展性 大量的读写操作都是基于(Primary Key)的。 简单可行的解决方案-缓存为什么使用分布式缓存?未使用缓存的应用未使用缓存的应用使用非分布式缓存使用非分布式缓存什么是分布式缓存什么是分布式缓存未使用缓存的数据库开销未使用缓存的数据库开销使用分布式缓存的数据库开销使用分布式缓存的数据库开

7、销Cache分布式缓存的特性?分布式系统的特性分布式系统的特性 数据分区技术 Consistent Hash 数据的一致性保证 集群的成员维护和失败检测 集中式管理还是分布式管理 错误恢复技术 临时故障和永久故障什么是 Coherence?Oracle Coherence 在内存中的数据网格(在内存中的数据网格(Data GridData Grid) 水平扩展(水平扩展(Scale outScale out)的解决方案)的解决方案 消除数据库的性能瓶颈消除数据库的性能瓶颈 (Key ValueKey Value对)的存储方案对)的存储方案 开发工具包开发工具包 纯纯Java 1.4.2+ Ja

8、va 1.4.2+ 的类库的类库 纯纯 .Net 1.1 .Net 1.1 和和 2.02.0的客户端类库的客户端类库 无第三方包的依赖关系无第三方包的依赖关系 不依赖于任何开源产品和项目不依赖于任何开源产品和项目 用于其它用途的库文件用于其它用途的库文件 数据库和文件系统的集成数据库和文件系统的集成 与与Top LinkTop Link和和HibernateHibernate的集成的集成 与与Http SessionHttp Session管理管理, Spring, Spring之间的集成之间的集成, , Coherence是为了解决性能问题是为了解决性能问题 在一个分布式系统中,性能由很多

9、因素决定: CPU的快慢,算法的好坏,IO. 应用层的Cache 网络延迟 Cache,NearCache 网络带宽限制 获取大量数据,经过计算,存储到数据库 获取大量数据,经过计算,只显示一小部分 可扩展性 数据库的扩展性 并行计算 海量数据分析Coherence是为了解决性能问题是为了解决性能问题 许多典型应用的数据库查询是基于主键的查询,将这 些查询放到Coherence缓存中,会大大降低数据库的负 载 Coherence分布式Cache本身具有扩展性和高可用性, 解放数据库,让它做擅长的事情:存储和复杂查询 有了Coherence,不需要数据库复制的方案。只读的 Slave完全可以被分

10、布式Cache所替代 所有的写操作,一致性有Coherence来保证。数据被异 步的持久化到数据库,将数据库的负担降到最低 分布式的查询和统计函数可以弥补一些Sharding带来 的问题 特有的功能降低数据的延迟时间和减少带宽( NearCache,EntryProcessors)Oracle Coherence的典型用途 应用层面的状态数据缓存应用层面的状态数据缓存 减轻底层系统的负载减轻底层系统的负载 数据库,主机系统,数据库,主机系统,WebWeb服务器服务器, Web Services, Web Services Http SessionHttp Session内存复制内存复制 横向扩

11、展应用的状态横向扩展应用的状态 应用集群以及可靠的数据共享应用集群以及可靠的数据共享 弹性计算引擎弹性计算引擎 基于事件的处理引擎基于事件的处理引擎 并行处理引擎(类相于并行处理引擎(类相于MapReduceMapReduce) 极限事物处理引擎极限事物处理引擎 存储临时的系统数据,获得极限事物处理能力存储临时的系统数据,获得极限事物处理能力Coherence的基本概念CacheCache的拓扑的拓扑1 1:ReplicatedReplicatedCacheCache的拓扑的拓扑1 1:ReplicatedReplicatedReplicated 数据管理 成员对所有节点都有逻辑的访问成员对所

12、有节点都有逻辑的访问 对读访问非常快,始终在本地对读访问非常快,始终在本地 对写(更新)操作,性能跟节点数量相关对写(更新)操作,性能跟节点数量相关 容错性非常好容错性非常好 可以确定的访问和不可预测的更新行为可以确定的访问和不可预测的更新行为 不可以预测的扩展性不可以预测的扩展性 Cache Cache 的容量跟最小节点相同的容量跟最小节点相同 适用于小数据尺寸适用于小数据尺寸 适用于大部分只读的数据适用于大部分只读的数据(c) Copyright 2010. Oracle Corporation(c) Copyright 2010. Oracle Corporation(c) Copyri

13、ght 2010. Oracle CorporationDistributed 数据管理 成员对所有节点都有逻辑的访问成员对所有节点都有逻辑的访问 对读访问,最多两个网络操作对读访问,最多两个网络操作 对写(更新)操作,最多对写(更新)操作,最多4 4个网络操作个网络操作 与节点多少没有关系与节点多少没有关系 可以确定的访问和更新的行为可以确定的访问和更新的行为 可以预测的扩展性可以预测的扩展性 Cache Cache 的容量随着节点增加变大的容量随着节点增加变大 CoherenceCoherence对自动对数据的分片进行负载均衡对自动对数据的分片进行负载均衡 点对点的通讯点对点的通讯 并不要

14、求并不要求multicastmulticast对数据变化进行监控并行查询(c) Copyright 2010. Oracle Corporation(c) Copyright 2010. Oracle Corporation(c) Copyright 2010. Oracle Corporation(c) Copyright 2010. Oracle CorporationCoherence 代码示例Cluster cluster = CacheFactory.ensureCluster();加入和离开CacheFactory.shutdown();使用缓存 get, put, size Ob

15、ject previous = nc.put(“key”, “hello world”);Object current = nc.get(“key”);int size = nc.size();Object value = nc.remove(“key”);使用缓存 keySet, entrySet, containsKeyNamedCache nc = CacheFactory.getCache(“mine”);Set keys = nc.keySet();Set entries = nc.entrySet();boolean exists = nc.containsKey(“key”);监听缓存事件 ObservableMapNamedCache nc = CacheFactory.getCache(“stocks”); nc.addMapListener(new MapListener() public void onInsert(MapEvent mapEvent) public void onUpdate(MapEvent mapEvent) public void onDelete(MapEvent ma

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号