引入故意缓存

几周前,我参加了ThoughtWorks 技术雷达研讨会。 我在ThoughtWorks工作了多年,想想是否有人知道这些人在软件开发方面的发展趋势。 在技​​巧上带有上升箭头的数字中,第17位被称为“周到缓存”。 和斯科特·肖一起喝酒时,我问他是什么意思。

趋势是从响应缓存到新样式的转变。 所谓反应式,是指您发现系统在构建后无法运行或无法扩展,并且已经投入生产。 许多Ehcache用户都采用这种方式。 我很高兴看到这一趋势。

故意缓存

新技术是:

  • 主动的
  • 计划
  • 在系统上线之前实施
  • 商榷
  • 不仅仅是在您的框架中打开缓存并希望达到最佳效果–这是考虑周到的部分
  • 了解负载特征和数据访问模式
我们为此添加了一些名称,并提出了“ 故意缓存”来总结所有这些内容。
我们正在进行的标准化基于Java和JVM的语言JSR107的缓存的工作将仅有助于此过渡。 它会被包含在Java EE 7中,即使对于那些对遵循EE失去兴趣的人来说,它仍然会发出信号,表明这是一个体系结构决策,应慎重做出。

为什么花了这么长时间?

那么,为什么要等到Ehcache和Memcache以及其他许多人相继出现10年后,这种“新”趋势才出现? 我认为有几个原因。

有人认为缓存很脏

我遇到了很多认为缓存很脏的开发人员。 缓存是作弊。 他们认为这表明某些架构设计失败,最好以其他方式解决。
造成这种情况的原因之一是,许多早期的开源缓存(包括Ehcache)限制了可以实现的数据安全性。 因此,通常的情况是缓存中的数据可能但不确定是正确的。 需要与业务分析师进行复杂的讨论,以确定这是否可以接受以及如何允许过时的数据。 诸如Enterprise Ehcache之类的企业缓存的出现已经克服了这一问题,之所以如此命名是因为它们具有丰富的功能并包含广泛的数据安全性选项,包括在Ehcache的情况下:弱一致性,最终一致性,强一致性,显式锁定,本地和XA交易和原子操作。 因此,即使数据必须正确,您也可以使用缓存。

跟随巨型互联网公司的领导

发生的另一件事是,作为巨型互联网公司,它无法逃脱任何人都使用大量缓存的注意。 而且如果缓存层出现故障,它们将无法工作。 如此之多,以至于如果您要构建大型的.com应用程序,那么显然需要在其中构建缓存层。

早期性能优化被视为一种反模式

在“敏捷”下,我们专注于可能可行的最简单的事物。 要求会不断变化。 您对将来的要求采取的任何批评都会被证明是错误的,并且您的工作被浪费了。 仅在明确需要时才添加它们。 性能和可伸缩性也倾向于通过这种方式完成。 按照此模型,在将应用程序投入生产后,您会发现有关要求的信息,但该要求失败了。 这种相同的思维方式导致构建具有单个数据存储的整体式系统,后来证明需要进行昂贵的重新架构。

我认为我们需要将其视为能力计划。 如果我们在项目开始时获得了有关用户数量,所需响应时间,数据量,访问模式等的估计数量,那么我们就可以对架构以及硬件进行容量规划。 在该体系结构规划中,我们可以计划使用缓存。 由于缓存会影响系统的架构方式和硬件要求,因此这样做很有意义。

参考:在Greg Luck的Blog上 ,我们的JCG合作伙伴 Greg Luck 介绍了故意缓存 。

相关文章 :

  • 新的Java缓存标准(javax.cache)
  • 具有GlassFish和一致性的高性能JPA –第1部分
  • Spring 3.1缓存抽象教程
  • Spring 3.1和JPA的持久层
  • JBoss 4.2.x Spring 3 JPA Hibernate教程
  • GWT Spring和Hibernate进入数据网格世界

翻译自: https://www.javacodegeeks.com/2012/01/introducing-deliberate-caching.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(小议)面向对象

什么是面向对象?如果让我理解,只有一句话:它是一个与面向过程相对的概念,是一种进化或者升级。人们所设计的程序几乎都是线性思维,即一步一步往下执行。对于一个没有人机交互的简单程序来说,这是简单易行的…

int类型究竟占几个字节

最近在看深入理解计算机系统这本书,上面提到了在32位机器和64机器中int类型都占用4个字节。后来,查了The C Programming language这本书,里面有一句话是这样的:Each compiler is free to choose appropriate sizes for its own ha…

python fieldnames_csvreader.fieldnames在python中未被识别为csv reader对象的属性

我试图使用CSV模块在Python中提取CSV文件的标题.CSV文件非常扁平,看起来像:This, That, The Other1, 2, 3我正在做以下事情:>读入CSV文件并制作阅读器对象>将读者的迭代器推到下一行,强制它至少访问第一行一次(来自csv模块文档:“如果在…

Spring Insight – Web应用程序分析

您是否正在使用Spring Framework编写Web应用程序? 您是否曾经想过引擎盖下发生了什么? 为什么您的应用程序响应如此缓慢? 在您仍然等待应用程序响应的同时,为什么窗外的蜗牛如此之快地消失在远处? 您应该:)&#xff0c…

创建动态链接库时设置导出函数的方法

有两种方法1.使用模块定义文件, 2.在要导出的函数前加上 __declspec(dllexport) 我们用VS2008新建个DLL工程,工程名为“TestDLL” 把默认的源文件后缀 .CPP改为.C(C文件) int _stdcall MyFunction(int iVariant){return 0; } 1. 使用传统的模…

javascript的浏览器Bom详解,window、location、history对象

BOM(BrowserObjectModel)也叫浏览器对象模型,描述与浏览器进行交互的方法和接口。BOM由多个对象组成, 其中代表浏览器窗口的Window对象是BOM的顶层对象,其他对象都是该对象的子对象。 JavaScript由三部分组成:ECMAScript,BOM&…

python右斜杠_Python中的左斜杠、右斜杠(正斜杠和反斜杠)

首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在Windows(一)目录中的斜杠们python读文件需要输入的目录参…

重用生成的JAXB类

在本文中,我将演示如何利用– XJC扩展来重用以前从XML模式生成的类。 当其他XML架构导入XML架构并且您不想每次都生成相同的类时,这很有用。 导入的架构(Product.xsd) 以下XML模式代表有关产品的基本信息。 产品是此示例域中的常…

MySQL的Master/Slave群集安装和配置

本文介绍MySQL的Master/Slave群集安装和配置,版本号安装最新的稳定版GA 5.6.19。 为了支持有限HA。我们用Master/Slave读写简单孤立的集群。有限HA这是当Master不可用,数据不会丢失。但在Master写的,必须手工处理故障。假设要支持更高的可用性…

动态申请二维数组

以下是动态申请a[m][n]的源代码 代码一&#xff1a; /* 编译器&#xff1a;DEV C */ #include<stdio.h> #include<stdlib.h> int main() {int **a;int i,j,m,n;scanf("%d%d",&m,&n); a (int **)malloc(sizeof(int *)*m);for (i0;i<m; i){a[i…

判断线段和直线相交 POJ 3304

1 // 判断线段和直线相交 POJ 33042 // 思路&#xff1a;3 // 如果存在一条直线和所有线段相交&#xff0c;那么平移该直线一定可以经过线段上任意两个点&#xff0c;并且和所有线段相交。4 5 #include <cstdio>6 #include <cstring>7 #include <iostream>8 …

JavaOne正在重建动力

在JavaOne上度过了一个非常忙碌的一周&#xff0c;今年的活动有很多让人喜欢的地方。 有很多惊喜的公告&#xff0c;很多很好的内容/会议&#xff0c;并且在场地和组织上都有很多改进。 对于一直耐心等待我发表我所有演讲的人们&#xff0c;我为您的延迟表示歉意……给4个演讲一…

tensorflow http调用_《TensorFlow 内核剖析》笔记——系统架构

3 系统架构系统整体组成&#xff1a;Tensorflow的系统结构以C API为界&#xff0c;将整个系统分为前端和后端两个子系统&#xff1a;前端构造计算图后端执行计算图&#xff0c;可再细分为&#xff1a;运行时&#xff1a;提供本地模式和分布式模式计算层&#xff1a;由kernal函数…

SGU 187.Twist and whirl - want to cheat( splay )

维护一个支持翻转次数M的长度N的序列..最后输出序列.1<N<130000, 1<M<2000splay裸题...-------------------------------------------------------------#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int ma…

练习一万小时成天才

随着畅销书《异类》的流行&#xff0c;“练习一万小时成天才”这个口号现在是尽人皆知。也许仍然有不少人相信那些不世出的天才必有天生的神秘能力&#xff0c;但科学家通过大量的调查研究已经达成共识&#xff0c;那就是所有顶级高手都是练出来的。不但如此&#xff0c;最近几…

(转)数据流图

转自:http://jingyan.baidu.com/article/4f34706eefdb04e387b56deb.html 数据流图4种图元 数据流图的实例 转载于:https://www.cnblogs.com/wrencai/p/5852389.html

从CLI监视OpenJDK

目前&#xff0c;我大部分时间在Java虚拟机 &#xff08;JVM&#xff09;内或周围进行大量工作&#xff0c;大部分时间是在Linux上。 当事情变得不对劲并且我试图确定原因时&#xff0c;我接触了Java性能分析工具。 这些工具有两种形式&#xff0c;一种是精美的GUI&#xff08;…

python数据库优化_python | Mysql性能优化一

对mysql优化是一个综合性的技术&#xff0c;主要包括表的设计合理化(符合3NF)添加适当索引(index) [四种: 普通索引、主键索引、唯一索引unique、全文索引]分表技术(水平分割、垂直分割)读写[写: update/delete/add]分离存储过程 [模块化编程&#xff0c;可以提高速度]对mysql配…

MySQL中文乱码问题

项目中用到MySQL数据库时中文出现乱码问题&#xff08;中文字符都变成了&#xff1f;&#xff09;解决&#xff1a; 1、统一项目与数据库的编码&#xff0c;项目中用的是UTF-8因此我的把数据库的编码统一成UTF-8 修改方式&#xff1a;修改 MySQL根目录中的 my.ini 文件替换d…

json与字符串互转

1 字符串转JSON var objeval((str"))var objJSON.parse(str)var objstr.parseJSON()2 JSON转字符串 var strobj.toJSONString()var strJSON.stringify(obj)转载于:https://www.cnblogs.com/liu-xia/p/5050878.html