文档章节

为什么响应式编程并非一时之势?

OneAPM蓝海讯通
 OneAPM蓝海讯通
发布于 2016/06/08 11:34
字数 1684
阅读 22
收藏 0

【编者按】本文作者为 David Buschman,文章从程序架构与系统的发展历程出发,逐步论证了为什么响应式编程并非一时之势,而是能带来更快处理速度,更高硬件利用率的未来选择。文章系国内 ITOM 管理平台 OneAPM 编译呈现。

这些年来,程序架构和系统发生了不少变化。大部分情况下,这些变化都跟它们依托的硬件密切相关。软件架构到底是从何处起源,众说纷纭,而且对构架的实际构成部分也有各种定义。本文将从整体化应用的兴起来展开讨论。

##摩尔定律 当你的所有资源都在单机上时,把所有的代码存在一个地方很合理,而且是软件设计的黄金标准。这种模式一直持续到 J2EE 时代,整体化应用容器的出现。J2EE 的设计初衷就是为了能充分利用摩尔定律,因为这是变得越来越庞大的单核 CPU 系统的最佳设计方法。

摩尔定律指的是一个观察发现:在计算机硬件发展史上,密集的集成电路上的晶体管数量大概每两年就会翻一倍。

这种构架作为黄金标准持续了几十年,因为如果我们要衡量一个系统,就会往它身上“堆”更多硬件。添加更快的 CPU 和更多内存来提高应用程序的速度。这就是摩尔定律所说的应用程序。

##多核处理器的兴起 就在几年前,CPU 制造商开始在 CPU 设计和速度方面遭遇瓶颈。他们怎么都没办法给单核 CPU 提速了。为了解决这个问题,芯片制造商开始“尽情发挥”,在一个芯片上加了好几个核,以便获得更多加速的能力。这意味着过去那种给 J2EE 应用程序添加一个时钟速度更高的 CPU 来提速的老方法行不通了。如果 CPU 无法再提速,应用程序如何通过新一代的多核处理器来扩大规模呢?必须改变现有的应用程序设计和运行方式,才能保持竞争力。

而且,事实证明,Java 企业级应用程序的同步和阻塞 IO 构架并不能充分利用这些新处理器的所有核。主要原因是它们的线程模型是“一个请求一个线程”,由于阻塞 I/O 命令,无法工作,这些线程要耗费大量时间来“等待 IO”。

##阿姆达尔定律 这时候,阿姆达尔定律就开始发挥作用了。在目前的处理器中,该定律是现代新构架的驱动力。现在有了更多核,就需要找到办法来充分利用我们购置的这些 CPU。要实现这一点,需要减少应用程序使用非阻塞 I/O 命令带来的“IO 等待”时间。这对过去几十年的运行模式而言是一个彻底的改变。

##Java 企业级应用程序和一个请求一个线程模型 显然,Java 企业构架是在单核 CPU 盛行时设计的。它对发送到服务器的请求采用“一个请求一个线程”思维方式。一旦你的请求获得一个线程,这个线程就会持续该请求的整个处理过程。在这种空间常用的函数库甚至依赖这种模型才能使用,例如 Hibernate 和 Spring Security。两个库都使用“Thread-local”参数来保持“session”状态,因为它们知道同一个线程会持续一个请求的整个周期。这样做的重大不利影响就是“behavior”不能更改,否则就会破坏现在使用的大部分 JEE 程序的数据持久性和应用安全代码。

##Lightbend 和响应式宣言 Lightbend 公司(前身是 Typesafe)发布了响应式宣言,以记录未来软件设计时需求的变化,以及当代多核 CPU 在未来世界的扩展性。这种范式转变太过巨大,因此很难简单说清两种构架风格之间的真正不同,就如同拿苹果跟橙子做对比一样。这种转变在行业内带来了一些混乱,而且还会持续下去,直到完成过渡,找到让多核 CPU 充分发挥潜力的方法。

该宣言列出了构架系统时应该着重考虑的四条原则,以便新系统能够满足所需的处理水平。其中有两个概念直接适用于解决 Java 企业应用程序的问题,就是非阻塞 I/O 和非同步处理。如果两项都做好了,应用程序可以占用更少的 CPU 和内存需求,完成更多任务,从而在任何一个系统、同样的硬件基础上,获得比 Java 企业应用程序更好的处理效果。下图展示了这种并行处理的好处。

为什么响应式编程并非一时之势?

##更快,更好,成本更低 这种新的软件架构新方法带来了更短的处理时间和更高的硬件利用率,从而降低了运营成本。现在运行的很多大型系统都是基于响应式宣言及其原则打造的。LinkedIn、Twitter、Facebook 等很多企业使用的系统都是基于非同步和非堵塞 I/O 技术架构,因此他们的应用程序得以优化,能够最大化地利用硬件资源。这是打造可扩展型应用程序的新方法,而且正在迅速发展。“响应式方法”并非一时之势——它是编写软件的未来趋势。

OneAPM能为您提供端到端的 Java 应用性能解决方案,我们支持所有常见的 Java 框架及应用服务器,助您快速发现系统瓶颈,定位异常根本原因。分钟级部署,即刻体验,Java 监控从来没有如此简单。想阅读更多技术文章,请访问 OneAPM 官方技术博客

本文转自 OneAPM 官方博客

原文地址: https://dzone.com/articles/why-reactive-programming-is-not-a-fad

© 著作权归作者所有

OneAPM蓝海讯通
粉丝 94
博文 631
码字总数 1266889
作品 0
海淀
私信 提问
送给@吴迪 的话,也是送给大家的话!

一时的爱好,是冲动,一直的爱好,是品味。。。 坚持自己的品味,那就是自慰。 学习计算机编程,没有自慰的精神,那你只是在欣赏别人的自慰。。。不过这比动不动因为别人而冲动的要好。 没魄...

中山野鬼
2012/04/26
135
4
Javascript诞生记

1. 二周前,我谈了一点Javascript的历史。 今天把这部分补全,从历史的角度,说明Javascript到底是如何设计出来的。 只有了解这段历史,才能明白Javascript为什么是现在的样子。我依据的资料...

阮一峰
2011/06/24
0
0
进来讨论下未来5年或者10后编程语言的发展趋势——刚起步,未来在哪里?

快去实习了,现在在一心搞php,但是看了大家的讨论之后,很多人说android开发、移动通讯等是未来的趋势,java越来越受宠,确实是这样吗?那么,有经验的前辈,是怎么看待未来的趋势的呢?求权...

易筱寒
2012/04/21
1K
6
正常辞职了,老板当时不给你结工资,非得等到月底怎么办?

其实,月底结算甚至下月初结算,是比较正常的情况。 工资的发放,在绝大多数公司,都是这个月的工资,下个月发。因为人资要统计考勤,是否存在如休假等情况,再者有的职位,涉及绩效或提成的...

明哥聊求职
2018/06/03
0
0
开发自己的前端工具库(二):函数式编程

前言 本系列文章将通过自己的一个开发工具库的实战经验(踩过的坑)教大家如何开发属于自己的一个工具库,在这里你可以学到Git的使用规范,基础项目的搭建,代码编写的规范,函数式编程思想,T...

后排的过儿
2018/08/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
昨天
5
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
昨天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
昨天
6
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
昨天
7
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
昨天
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部