性能与可靠性:Java应用为何像F1汽车

再想一想。

性能和可靠性相关吗? 还是这些东西相互排斥? 我认为是后者。 如今,现实是IT部门将应用程序的性能和可靠性视为同一事物,但这离事实还差得远。

让我们看看一级方程式车队如何管理性能和可靠性。

上赛季迈凯轮本田车队既慢又不可靠。 法拉利本赛季在排位赛中表现很快,但是在比赛中并不可靠。 另一方面,梅赛德斯在过去的两年中一直超级敏捷,超级可靠,这让所有人都望而却步。

性能

F1赛车通常受以下三个因素的影响:动力单元,发动机映射和空气动力阻力/下压力。

引擎图指示了动力单元从可用资源(空气,燃料和电力)中消耗了多少资源。 空气阻力/下压力取决于如何控制汽车周围的气流。

更大的功率和更低的阻力意味着更少的阻力,更快的加速度和更高的顶端速度。

下压力越大,拐角处的抓地力/速度越大。 性能主要取决于F1赛车在赛道上的跑速。 F1车队在一个典型的周末将对赛车的设置进行数百次更改,希望每十分之一秒都能解锁一次,这样他们就可以超越排位赛并参加比赛。

同样,应用程序性能受三件事影响:JVM运行时,应用程序逻辑和事务流。

应用程序逻辑消耗了JVM运行时的资源(线程,cpu,内存等),而事务流则取决于每个事务必须跨基础结构组件或第三方Web服务进行的跃点数。

性能与计时最终用户请求(页面/事务)以及了解应用程序逻辑与事务流之间的端到端延迟有关。 像F1工程师这样的开发人员将进行数百项更改,希望优化最终用户体验,从而使业务受益。

性能的主要衡量单位是响应时间,因此,在管理此应用程序时,诸如AppDynamics,New Relic和Dynatrace之类的Application Performance Monitoring(APM)解决方案是头等大事。

可靠性

F1赛车通常受其工程组件,赛车ECU和百万传感器输入,参数和功能的质量影响。

一些意外参数,赛车将立即停止。 去年,尼科·罗斯伯格(Nico Rosberg)两次发生事故,当时他的方向盘和电子设备停滞不前,尽管拥有最快的赛车,但所有这些。

对F1汽车的性能进行故障诊断与对其可靠性进行故障诊断有很大不同,它们是有些不同的用例,需要不同的遥测,工具和观点。 可靠性是关于了解事物为何破裂以及事物运行缓慢的原因。

对应用程序的处理相同,只是当应用程序崩溃时,这是因为应用程序逻辑在某处发生故障,从而引发了错误或异常。 这与运行缓慢的应用程序逻辑有很大不同。

应用程序逻辑接受输入,对其进行处理并创建某种输出。 像F1赛车一样,应用程序具有成千上万个组件(功能)和数百万行代码,每个代码可随时处理数十万个参数(对象和变量)。 没有可靠性,性能无关紧要。 日志文件是错误和异常所在的地方。

问题:慢航班搜索比航班预订错误重要吗?

答案:它们都会杀死企业,因此您需要同时管理两者。

维珍大西洋

航班预订失败

欢迎来到废话数据世界

假设这些APM解决方案在管理性能方面做得很好。 我们的行业仍然坚信,日志文件(或某些供应商称之为大数据)是理解应用程序为何失败的答案。 我实际上将这种方法称为“废话数据”。

日志文件缺乏深度,上下文和洞察力,对于任何真正想要找到应用程序故障的真正根本原因的人来说。 当然,日志文件总比没有好,但让我们看看开发人员需要什么数据才能始终找到根本原因:

  1. 应用程序堆栈跟踪 –显示哪个应用程序组件(类/方法)是故障的一部分
  2. 应用程序源代码 –显示导致失败的代码行
  3. 应用程序状态 –显示组件/源代码处理的应用程序参数(对象,变量和值)

今天,大多数日志文件将包含数百万个重复的应用程序堆栈跟踪。 这就是Splunk之所以价值60亿美元的原因,因为每条重复的堆栈跟踪信息都会花费$$$来解析,索引,存储和搜索。

是的,开发人员可以自定义应用程序日志以将所需的任何数据放入其中。 坏消息是,由于开销,开发人员无法记录所有内容,而创建有意义的日志通常需要知道将在应用程序中破坏什么。

没有水晶球,就不可能创建有效的日志文件,这就是为什么团队仍然要花费数小时或数天来寻找大海捞针的原因。 没有应用程序源代码或状态意味着操作和开发必须猜测。 这是不好的。 不幸的是,堆栈跟踪是不够的。 在F1中,这就像梅赛德斯维修站工作人员告诉他们的工程师“我们的遥测技术刚刚确认Nico的方向盘坏了,这是我们仅有的遥测技术–您能找出原因并尽快修复它”。

您能想象工程师会怎么想吗? 不幸的是,这是大多数开发人员今天在得知应用程序出现故障时的想法。

好消息是,现在可以知道生产中何时以及为何中断应用程序代码。 欢迎来到塔基皮 。

现在不该有可能了,这就是日志文件的结尾。

翻译自: https://www.javacodegeeks.com/2016/04/performance-vs-reliability-java-apps-like-f1-cars.html

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

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

相关文章

BZOJ[1051]受欢迎的牛

Description 每一头牛的愿望就是变成一头最受欢迎的牛。现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎。 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认为牛C受欢迎。你的任务是求出有多少…

C语言文件操作函数大全

clearerr&#xff08;清除文件流的错误旗标&#xff09; 相关函数 feof 表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * stream); 函数说明 clearerr&#xff08;&#xff09;清除参数stream指定的文件流所使用的错误旗标。 返回值   fclose&#xff…

java模拟网易邮箱登录_求赐教:网易邮箱Web端模拟登录看信的加密参数_ntes_nnid、_ntes_nuid...

网易邮箱的模拟登录和收信都非常简单&#xff0c;在阅读邮件的时候需要两个参数&#xff1a;_ntes_nnid 和 _ntes_nuid_ntes_nnid21533f97b25070a31c249f59513ad20c,1492592485123_ntes_nuid21533f97b25070a31c249f59513ad20c32位的&#xff0c;看着像MD5加密。还请各位大神不吝…

18.8.20 考试总结

铁塔(tower.pas/c/cpp)题目描述Rainbow 和Freda 要在Poetic Island 市的一座山脚下盖房子定居了……盖房子需要钢材 &#xff0c;幸运的是&#xff0c;这里有排成一行的n 座废弃的铁塔&#xff0c;从左到右编号为1~n&#xff0c;其中第i 座的高度为h[i]。 Rainbow 和Freda 想盖…

va_start、va_end、va_list的使用

1:当无法列出传递函数的所有实参的类型和数目时,可用省略号指定参数表 void foo(...); void foo(parm_list,...); 2:函数参数的传递原理 函数参数是以数据结构:栈的形式存取,从右至左入栈.eg: #include <iostream> void fun(int a, ...) { int *temp &a; temp; f…

java 根据时间范围自动算间隔_Java根据开始时间结束时间计算时间间隔 x年x月x日...

最近项目中有这样的需求&#xff1a;根据租赁开始时间租赁结束时间计算租期x年x月x日&#xff0c;相同的需求还有根据出生日期计算年龄等等......例如&#xff1a;开始日期 2020年7月24日 结束日期 2021年9月3日 租期 1年1月11日&#xff1b;开始日期 2020年7月24日 结束日期…

会java的鸭子_鸭子在Java中打字? 好吧,不完全是

会java的鸭子根据维基百科&#xff0c;鸭子的打字是&#xff1a; 动态类型的类型&#xff0c;其中对象的方法和属性确定有效的语义&#xff0c;而不是其从特定类或特定接口的实现继承 用简单的话 当我看到一只鸟走路像鸭子&#xff0c;游泳像鸭子&#xff0c;嘎嘎像鸭子一样时…

数据结构(六)查找---多路查找树(2-3-4树)

一&#xff1a;2-3-4树 具体操作同2-3树 2-3-4树是2-3树的扩展&#xff0c;包括了4节点的使用&#xff0c;一个4节点包含小中大三个元素和四个孩子&#xff08;或没有孩子&#xff09;。 &#xff08;一&#xff09;插入实现 构建一个数组为{7,1,2,5,6,9,8,4,3}的2-3-4树的过程…

java web 静态_「Java Web」主页静态化的实现

一个站点的主页一般不会频繁变动&#xff0c;而大多数用户在訪问站点时不过浏览一下主页(未登陆)。然后就离开了。对于这类訪问请求。假设每次都要通过查询数据库来显示主页的话&#xff0c;显然会给server带来多余的压力。这时候我们能够将主页静态化。在减轻数据库server压力…

实现Java监视的12个步骤程序存在缺陷

Java监视的当前状态最大的问题是什么&#xff1f; 生产中的错误很像喝醉的短信。 您只有在事情已经发生之后才意识到出了点问题。 发短信日志通常比应用程序错误日志更有趣&#xff0c;但是……两者都同样难以修复。 在本文中&#xff0c;我们将执行一个12步的监视漏洞修复程…

创建django项目

1.新建django项目 打开命令行&#xff0c;进入想要安置项目的目录&#xff0c;命令行输入&#xff1a;django-admin startproject my_web 用Pycharm打开 2.开启服务器 命令行进入my_web目录。输入&#xff1a;python manage.py runserve开启服务器&#xff0c; 将服务器的地址复…

有关fwrite语句的用法

一&#xff1a;函数名: fwrite 功 能: 写内容到流中 用 法:fwrite(buffer,size,count,fp); &#xff08;1&#xff09;buffer&#xff1a;是一个指针&#xff0c;对fwrite来说&#xff0c;是要输出数据的地址。 &#xff08;2&#xff09;size&#xff1a;要写入的字节数&#…

json 全文索引 mysql_MySQL全文索引、联合索引、like查询、json查询速度大比拼

查询背景有一个表tmp_test_course大概有10万条记录&#xff0c;然后有个json字段叫outline&#xff0c;存了一对多关系(保存了多个编码&#xff0c;例如jy1577683381775)我们需要在这10万条数据中检索特定类型的数据&#xff0c;目标总数据量&#xff1a;条2931SELECT COUNT(*)…

java从端口获取数据库_Java之通过接口获取数据并用JDBC存储到数据库中

最近做数据同步功能&#xff0c;从接口获取数据然后存到数据库中以便后续对数据进行相关操作&#xff0c;下面就贴一下相关代码。1 import com.alibaba.fastjson.JSON;2 import com.alibaba.fastjson.JSONObject;34 public class Digests {5 private static final String APPKE…

支付宝H5 与网页端支付开发

在日常生活中&#xff0c;我们基本上都是进行微信与支付宝的支付方式尽心支付&#xff0c;这种方式确实大大便利了我们的生活&#xff0c;那么如何在我们的产品中进行微信与支付宝支付的植入开发呢&#xff1f; 我们先进行支付宝的H5与网页端支付开发&#xff0c;这里只进行支付…

C/C++中extern关键字详解

1 基本解释&#xff1a;extern可以置于变量或者函数前&#xff0c;以标示变量或者函数的定义在别的文件中&#xff0c;提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用&#xff0c;第一个,当它与"C"…

javaone_JavaOne 2012:NetBeans.Next –未来路线图

javaone我从Continental Ballroom 4和一个NetBeans主题&#xff08; Easel项目 &#xff09;到Continental Ballroom 5&#xff0c;走了必要的几个步骤&#xff0c;以查看另一个面向NetBeans的演示文稿&#xff1a;“ NetBeans.Next –未来路线图”。 Ashwin Rao着手介绍羽毛之…

java简单编译器源代码_25行代码实现一个简单的编译器

起因《25行JavaScript语句实现一个简单的编译器》实现的是一个简单到不能再简单的玩具的玩具&#xff0c;他的魔法是函数式编程简化了js代码。java 8提供了函数式编程的支持&#xff0c;昨晚脑子抽风突然兴趣java也可以实现一个如此简单的编译器&#xff01;java和js语言差异ja…

《python网络数据采集》读后感 第六章:读取文档

1.文档编码&#xff1a; 文档编码是一种告诉程序——无论是计算机的操作系统还是 Python 代码——读取文档的规 则。文档编码的方式通常可以根据文件的扩展名进行判断&#xff0c;虽然文件扩展名并不是由编码 确定的&#xff0c;而是由开发者确定的。例如&#xff0c;如果我把 …

如何在Gradle多项目构建中管理依赖项

从很早以前我就一直喜欢Gradle构建工具。 它的潜力甚至在1.0版本之前就已经很明显了&#xff0c;那时变化经常被打破。 如今&#xff0c;升级很少会引起意外。 该工具已经成熟并且运行良好。 Gradle包括一个功能强大的依赖项管理系统&#xff0c;该系统可以与Maven和Ivy存储库…