上帝模式代码_生产代码中的上帝模式

上帝模式代码

调试就像税收一样-每个人都喜欢编写代码,很少有人愿意为此付出代价。 如果您在开发过程中发现错误-情况还不错。 您的IDE带有断点,监视,工具提示和大量的重现时间。 更重要的是,您可以先解决问题,然后再进行任何实际的伤害。

当代码在生产中失败时,所有这些都不在窗口之内。

使用调试器不再是一个选择,这取决于您使用日志文件和堆栈跟踪来尝试确定导致错误的源代码和变量状态组合。

Takipi试图通过使在生产环境中修复Java和Scala代码与在桌面上一样容易来修复公平竞争环境。

它检测服务器代码中的错误和异常,提供分析以帮助确定它们的优先级,并捕获源代码和导致它们的变量值。

Takipi成立于2012年,去年已经有200多家公司进行Beta测试。

它将于本月发布其首个GA产品。 (如果您想知道的话,Takipi是以公司的命名的。)

(点击图片放大)

上帝模式代码_生产代码中的上帝模式

您将如何使用Takipi?

如今,开发人员使用了许多调试工具 ,从命令行调试器到动态跟踪器和日志分析器。 Takipi专注于生产调试,将该过程分为三个步骤-

  1. 检测 -知道在登台或生产时何时将新错误引入您的环境中,或者何时增加了现有错误的发生频率。
  2. 优先级排序 -获取确定是否以及何时修复它所需的度量。
  3. 分析 -获取实际的源代码和引起它的变量值的组合。 可以将其视为调试器,它会在发生错误时自动打开,收集变量和源代码以供以后查看,然后让代码继续执行。

1.检测错误

Takipi在本机JVM级别上运行,这使其可以检测并向您显示代码中的任何形式的异常或错误,无论它是由应用程序代码,JVM,第三方库抛出的还是如何被捕获的。 记录错误和Http错误也是如此。

您可以通过Takipi的仪表板查看和分类所有错误,该仪表板可以像电子表格一样处理应用程序中的所有错误。 您可以按照最新的,最近增加的数量或特定类型(例如,未捕获的NullPointer异常)对它们进行排序和过滤。

当代码中的新位置开始触发错误时,Takipi将通过电子邮件通知您。 它还会每天发送摘要,以总结哪些新错误已引入到您的代码中,以及整个群集中的主要错误。

2.优先处理错误

通过仪表板或电子邮件看到错误后,下一步就是确定您是现在,明天还是下个季度是否要对其进行处理。 为此,您需要了解其实际影响。 这就需要关联多个指标,包括它发生的频率,它何时开始以及它是否与代码中的最近更改有关。

为了帮助完成此过程,Takipi为每个错误提供了一组指标-

  • 当它开始的时候 第一次和最后一次在代码中的该位置触发了这种类型的异常。
  • 代码更改。 对于错误的调用堆栈中的每个方法,Takipi都会显示错误发生前一天或一周内在该计算机上修改其代码的位置。 Takipi通过为加载到JVM中的每个.jar,.war或.class分配唯一的二进制签名来检测部署。 因此,当代码中断时,它通常可以告知何时将其部署到该计算机和应用程序中。
  • 频率。 优先处理错误最重要的方面之一是频率-绝对频率和相对于代码调用的频率。 如果今天将异常触发了1000次,那么将代码调用5000次可能就很重要了。 但是,如果它被调用一百万次,那么实际上可能还可以。 为此,Takipi会显示错误发生的次数以及对该代码代表的总调用次数的百分比。
  • 趋势 一些异常代表正常的应用程序逻辑,例如高速缓存未命中,登录失败或有条件的更新失败。 这可能是正常的,但是如果自上次部署以来错误增加了40%,该怎么办? 您可能想知道这一点。 因此,Takipi会跟踪每个错误的趋势,以显示其在过去一小时,一天或一周内是否有所增加。

(点击图片放大)

上帝模式代码_生产代码中的上帝模式

*仪表板屏幕充当“电子表格”,以对应用程序中的所有错误进行排序和过滤。

3.分析错误

一旦确定要修复错误,作为开发人员,您很可能需要两件事-在该计算机上执行的源代码以及发生错误时的变量状态。 Takipi捕获该信息以显示在该计算机上运行的源代码的重构,以及整个堆栈中的变量和对象值。 这使您能够快速发现两者之间的任何不匹配,从而确定错误的根本原因。

为了显示源代码,Takipi将根据需要在云中反编译字节码,或者使用.jar源文件和scala源目录(如果计算机上存在)。

(点击图片放大)

上帝模式代码_生产代码中的上帝模式

*错误分析视图,显示导致服务器异常的源代码和变量

分布式调试 Takipi还将显示跨计算机的源代码和变量值。 因此,如果机器A对机器B进行HTTP调用并引发错误,那么Takipi不仅会显示机器B上的代码(可能已经来不及做任何事情了),还会显示任意数量的机器上的代码和变量的值。机器调用。

这是通过“反向信令”过程完成的,在该过程中,引发错误的计算机将信号发回调用它的计算机,表明已发生错误,并且它们需要为该呼叫收集错误数据。 然后,Takipi将这些快照关联到一个呈现给您的“故事”中。

从开发人员的角度来看,这与从日志文件进行堆栈跟踪相比特别有效,在这种情况下,识别和访问发起该调用的计算机,然后尝试查找该调用的相关变量数据(假设它是困难的)在日志中)。

团队之间沟通错误

Java错误的通用语言是堆栈跟踪。 它们是描述错误并在开发,质量保证和运营团队之间传递的货币。 Takipi做的一件事是使堆栈跟踪更智能,不仅包含对发生情况的描述,而且还包含对发生情况和原因的描述。

每当记录错误时,Takipi都会在堆栈跟踪中添加少量内容,称为power link 该超链接使开发人员可以直接从堆栈跟踪跳转到错误的源代码,变量状态和分析。 即使通过电子邮件共享或粘贴到Bug缺陷系统(例如Jira或BugZilla)中,该数据也将作为堆栈跟踪的一部分保持不变。 这使开发人员可以使用当今使用的相同方法从Ops或QA获取更好的数据,而不必进行检测,重新部署和重现错误以导致引起错误的可变状态。

(点击图片放大)

上帝模式代码_生产代码中的上帝模式

*您可以使用嵌入式超链接从日志堆栈跟踪跳转到导致它的源代码和变量。

性能

开发过程中的调试与生产过程中的调试有本质的不同。 当您使用JWDP或JVMTI在调试模式下运行JVM时,您正在启用JVM中的挂钩,这些挂钩使调试器可以在发生低级事件(例如异常)或在特定字节码位置暂停执行时接收通知。跨步和断点之类的东西。

不利之处在于,启用这些挂钩会阻止JIT编译器执行其通常会执行的某些优化,这会影响代码的执行速度。 这样的一个例子是异常回调。 当由调试器启用时,它们会阻止JIT编译器完全优化try / catch子句,并且在引发异常时可能导致代码恢复为解释模式,以使调用返回到调试器。 随之而来的是速度的显着下降-特别是在规模上。

Takipi通过将云中的静态字节码分析(类似于Coverity之类的工具)与本机JVM级别的动态数据收集相结合来应对这一挑战。

Takipi将计算机上的计算密集型操作(例如字节码分析和数据缩减)卸载到服务器上。 在机器级别,它会检测加载到JVM中进行编译的字节码,还可以检测由此产生的X86机器代码。 这使它能够收集低级数据并拦截信号,而不会产生普通调试器所具有的连续性能开销。 这样,一旦代码分析完成,它的平均性能将低于3%。

在机器上安装

Takipi可在Windows 7/8 / Server,OS X和主要的Linux版本上运行。 您可以使用标准的Linux wGet / cURL命令安装,也可以通过DEB,RPM和Chef之类的安装包进行安装。 一旦您安装了Takipi,下一步就是添加代理参数 到您的JVM。 应用启动后,Takipi将首次分析您的代码。 您的代码遇到的任何异常或错误都将被检测并跟踪。 由于Takipi在JVM级别上运行,因此与使用哪个框架(例如Guava)或Web容器(例如Tomcat,Play)无关。 无需运行任何代码或其他配置更改。

数据如何存储

直接从应用程序收集数据时面临的一大挑战是存储和保护数据。 如果收集的数据包含个人身份信息(PII),例如用户名或信用卡号,则尤其如此。

Takipi提供了两种存储数据的模式:托管模式和本地模式。 托管模式下,在将源数据和变量数据发送到Takipi之前,会使用256位私有AES加***在计算机上对其进行加密。 您的数据只能由您使用私有加***解密。 这类似于您使用私钥保护对AWS实例的访问的方式。

本地模式下,数据不会发送到Takipi的服务器,而是会发送到本地存储的指定服务器,并在其中存储数据。 当您在Takipi内部打开错误时,没有使用RESTful API调用将数据从Takipi的服务器中拉入浏览器,而是从本地服务器中将其拉出。 您可以自定义数据的存储方式(例如文件系统,关系数据库,键/值存储),以及用户根据其进行身份验证的方法。 这使您能够根据自己组织的内部策略来管理数据访问和保留。

上帝模式代码_生产代码中的上帝模式

*在本地模式下,数据不保留在Takipi的服务器上,而是在用户域内存储和检索。

摘要

Takipi试图改进开发人员每天执行的最基本的操作-在代码中断时修复其代码。 您可以开设一个试用帐户并在您的应用程序上测试Takipi。 在下面的评论部分中与我们分享您的笔记,想法和问题-我们很想听听他们的意见!

关于作者

上帝模式代码_生产代码中的上帝模式 Tal WeissTakipi的首席执行官。 在过去的15年中,Tal一直在设计可扩展的实时Java和C ++应用程序。 不过,他仍然喜欢分析一个好的bug,并检测Java代码。 Tal在业余时间弹奏爵士鼓。

翻译自: https://www.infoq.com/articles/Takipi-Production-Debugger/?topicPageSponsorship=c1246725-b0a7-43a6-9ef9-68102c8d48e1

上帝模式代码