背景
分布式系统我们都知道,内存网格系统是什么鬼,我们也是第一次见到,^_^初恋般的感觉真好。不知道找度娘哈!
内存网格
嗯,我大概了解。到这里我们需要提一提内存缓存(IMC)了,我们在Java分布式应用中,引起性能问题大部分是延迟搞的鬼,所谓的延迟就是你的请求和服务端的响应的时间差。那么在分布式系统中引起延迟的原因都有哪些的呢?
我们来罗列一下啊,不足的地方请看官评论区补充,大家一起学习。
从磁盘上加装数据的IO延迟
跨网络加装数据的IO延迟
在分布式锁上的资源争夺
垃圾回收引起的暂停
我们就拿ping时间为列,本地机器是57μs ;局域网是300 μs ;从伦敦到纽约是100ms 。那么对于1G的网络,网络传输速率是每秒25MB-30MB,那么对于10G的网络,网络传输速率是每秒250MB-350MB。
如果你有1G以上数据需要处理,磁盘延迟会严重影响应用性能。硬件上最低延迟是内存,典型的内存缓存是每秒3-5 GB,能够随着CPU扩展。如果你有两个处理器,你就能每秒10GB ,如果有4CPU就能获得20GB。有一个内存基准测试称STREAM是测试许多计算机的内存吞吐量,-些在大量CPU帮助下能够实现每秒TB级别的吞吐量。
因此可以总结如下:
内存是快的:为了高性能,你需要在内存中处理数据。
网络是慢得:通过网络传输数据会严重影响性能,包括数据车连接池。
内存缓存原来作用是提高数据库访问性能。但是缓存不是数据库遮羞布,架构 上缓存引入有着重要意义:状态对象:数据库的替代者。
缓存实际是内存,将状态置于内存而不是数据库,不但性能提升, 还提高软件的可伸缩性和扩展性,直至轻松发展为分布式系统或云计算,这种缓存称为内存缓存(in-memory cache)或称数据网格In-Memory-Data-Grid (IMDG) ;
Java EE 7引入分布式弹性缓存ElasticCaching , 作为其云核心战略的一部分。云计算是一 种计算和存储分离的模型 ,云计算本质是分布式可伸缩的内存计算,可见Amazon弹性缓存介绍。
当我们将DDD领域模型加载到内存中以后,我们就不再面向关系数据库中数据表编程,而是真正直接面向模型对象编程。Java内存模型优点:基于内存的并发模型,多线程机制,大量线程安全型库包支持基于内存的并发机制,粒度灵活控制,灵活度高于数据库锁。多核并行计算模型基于线程的异步模型(Domain Events)。Twitter从Ruby转向JAVA的实践证明:Cache缓存+ JVM微调是Java/JVM的核心竞争力,这也是最容易被我们忽视的,因为很多使用Java系统(包括Spring + Hibernate)只是当作SQL语句的包装器来使用,负载主要集中在数据库上,根本不会使用In-memory Cache.
让我们探索实现这些策略所需的内存计算技术。
处理云中的数据需要全新的思维。InfoWorld向您展示一种方法:Cosmos DB如何确保全球云中的数据一致性。|使用InfoWorld的云计算报告时事通讯,随时了解云计算。
内存数据网格
内存数据网格(IMDG)将基于磁盘的数据从RDBMS、NoSQL或Hadoop数据库复制到RAM中,在RAM中进行处理, 从而不会因为持续的磁盘读写导致延迟。内存数据网格插入到应用程序和数据层之间,部署在服务器节点的集群上,共享集群的可用内存和CPU。无论是部署在公共云还是私有云环境中、内部部署还是在混杂环境中,都可以通过向集群添加新节点来简化内存数据网格。一些内存数据网格可以支持ANSI-99 SQL和ACID处理,高级安全、机器学习以及Spark,Cassandra和Hadoop本机集成。
对于现有的应用程序而言,内存数据网格是一种简单而又经济的解决方案。然而,许多内存数据网格要求底层基于磁盘数据库中的所有数据都能装入内存,所以这就要求企业购买足够的内存来保存数据。由于内存仍然比磁盘贵,许多公司可能更倾向于只在磁盘上保留一些数据。新的以内存为中心的体系结构通过对整个数据集进行处理来解决这个问题,即使某些数据存储在磁盘上也是如此。很多新起的以内存为中心的体系结构通过处理完整的数据集来解决这个问题,即使有些数据存储在磁盘上。这种“持久存储”功能允许数据量超过内存量。这意味着可以通过优化数据的方式,使所有数据都保留在磁盘上,但是更频繁的使用数据同样会使数据保存在内存上,从而使不常用的数据保留在磁盘。另一个关键优势是,重新启动后,具有持久存储的系统可以立即针对磁盘上的数据集进行处理,而无需等待数据集加载到内存中。
Workday是一家为财富50强公司提供服务的财务和人力资源SaaS解决方案提供商,它介绍了如何使用内存数据网格每天处理约1.89亿笔交易,峰值约为2.89亿笔/天。相比之下,Twitter每天处理大约5亿条推文。
内存数据库
内存数据库(IMDB)最适合重新架构的应用程序。它是一个在内存中运行的功能齐全型独立数据库,可以支持数据处理API,如ANSI-99SQL、键值、计算和机器学习。内存中数据库相对于内存数据网格的优势在于,体系结构从三层(应用程序、内存和数据)减少到两层。缺点是,如果不从现有数据库中提取和转移数据集,就不能将其应用于现有应用程序。此外,由于内存中的数据库用作记录系统,因此解决方案必须有在停机时保护数据的策略。该策略有些类似于内存数据网格中阐述的持久存储能力,或者也可能涉及到非易失RAM的使用,这是一种未来可能会发挥越来越重要作用的新技术。
现今,一家拥有1.35亿客户的大型银行正在使用一个具有持久存储能力的内存数据库来开发一个Web级架构,该架构可以处理高达1.5PB的数据以及所需的事务量。此解决方案用作记录系统,而没有应用于现有数据存储之上。
内存计算平台
组织开发一个包含加速现有应用程序及推出新应用程序的长期发展策略可以选用内存计算平台,该平台可以将IMDG的可扩展性与IMDB关系型数据库性能相互结合在一起。因此,内存计算平台可用于加速现有应用程序,或作为创建新应用程序、重新架构应用程序的基础,这些应用程序可以利用分布式计算和持久存储。
除了需要考虑哪种技术最能满足他们的需求外,组织还应考虑是否需要额外的内存技术支持,例如:
一个流式分析引擎,用来管理数据流和事件处理的所有难题。
一个以深度学习为动力的持续学习框架,用来作为Gartner所提出的进程内HTAP(混合事务/分析处理)的组成部分,也就是说,能够将机器学习或深度学习分析实时应用于运营数据。
内存计算技术现已被领先的数字企业所使用,并将在未来得到更广泛的应用。您越早了解内存计算的部署策略和功能,您就能越快地帮助您的组织获得所需的竞争优势。
举报/反馈

浅源深科

16获赞 14粉丝
天天实习,轻松动手学好Java,顺利进入职场
关注
0
0
收藏
分享