赞
踩
翻译: 白石(https://github.com/wjw465150/Vert.x-Core-Manual)
构建反应式系统的第一步是采用异步编程。基于阻塞I/O的传统编程模型的可伸缩性不如使用非阻塞I/O的模型。用更少的资源服务更多的请求是非常有吸引力的,那么问题在哪里呢?这里确实存在一个小问题:如果您从未接触过异步编程,那么它是一种重要的范式转换!
本书这部分的章节将通过使用Vert.x工具包教你异步编程的基本概念。使用Vert.x思考异步操作绝对是可行的(而且很有趣!),我们将探讨Vert.x应用程序的主要构建块。
本章涵盖了
我们开发人员生活在一个充满流行语、技术和实践炒作周期的行业。 我长期教大学生设计、编程、集成和部署应用程序的要素,我亲眼目睹了新手在当前技术的狂野海洋中航行是多么复杂。
Asynchronous 和 reactive 是现代应用程序中的重要主题,我编写本书的目标是帮助开发人员理解这些术语背后的核心概念,获得实践经验,并认识到这些方法何时有好处。 我们将使用 Eclipse Vert.x,这是一个用于编写异步应用程序的工具包,它具有为“reactive(反应式)”含义的不同定义提供解决方案的额外好处。
在本书中,确保你理解这些概念是我的首要任务。 虽然我想让您深入了解如何编写 Vert.x 应用程序,但我还想确保您可以将在这里学到的技能转化为现在或五年后的其他类似和可能竞争的技术。
20 年前,部署可以在单台机器上独立运行的同时执行所有操作的业务应用程序很常见。 此类应用程序通常展示图形用户界面,并且它们具有用于存储数据的本地数据库或自定义文件管理。 当然,这有点夸张,因为网络已经在使用中,并且业务应用程序可以利用网络上的数据库服务器、网络文件存储和各种远程代码操作。
如今,应用程序更自然地通过 Web 和移动界面向最终用户公开。 这自然会使网络发挥作用,从而使分布式系统发挥作用。 此外,面向服务的架构允许通过向其他服务发出请求来重用某些功能,这些服务可能由第三方提供商控制。 例如,将消费者应用程序中的身份验证委托给流行的帐户提供商,如 Google、Facebook 或 Twitter,或者将支付处理委托给 Stripe 或 PayPal。
图 1.1 是对现代应用程序的虚构描述:一组相互交互的网络服务。 以下是其中一些网络服务:
使用 Micrometer 等库进行监控会公开健康状态、指标和日志,以便外部编排工具可以保持适当的服务质量,可能通过启动新服务实例或在失败时终止现有服务实例。
在本书的后面部分,您将看到典型服务的示例,例如 API 端点、流处理器和边缘服务。 当然,前面的列表并不详尽,但关键是服务很少独立存在,因为它们需要通过网络与其他服务通信才能运行。
网络正是计算中可能出现许多问题的地方:
带宽波动很大,因此服务之间的数据密集型交互可能会受到影响。 并非所有服务都可以在同一数据中心内享受快速带宽,即便如此,它仍然比同一台机器上的进程之间的通信慢。
延迟波动很大,并且由于服务需要与其他服务对话以处理给定请求的服务,所有网络引起的延迟都会增加整体请求处理时间。
可用性不应被视为理所当然:网络失败。 路由器出现故障。 代理失败。 有时有人碰到网线并断开它。 当网络发生故障时,向另一个服务发送请求的服务可能无法确定是其他服务还是网络故障。
从本质上讲,现代应用程序是由分布式和网络化服务组成的。 它们是通过本身引入问题的网络访问的,并且每个服务都需要维护多个传入和传出连接。
服务需要管理与其他服务和请求者的连接。 管理并发网络连接的传统且广泛使用的模型是为每个连接分配一个线程。 这是许多技术中的模型,例如 Jakarta EE 中的 Servlet(在版本 3 中添加之前)、Spring Framework(在版本 5 中添加之前)、Ruby on Rails、Python Flask 等等。 该模型具有简单的优点,因为它是同步的。
让我们看一个例子,TCP 服务器将输入文本回显给客户端,直到它看到 /quit
终端输入(如清单 1.3 所示)。
服务器可以使用本书完整示例项目中的 Gradle 运行任务(终端中的./gradlew run -PmainClass=chapter1.snippets.SynchronousEcho
)运行。 通过使用 netcat
命令行工具,我们可以发送和接收文本。
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。