第一章: Vert.x 异步编程的基础知识

翻译: 白石(https://github.com/wjw465150/Vert.x-Core-Manual)

构建反应式系统的第一步是采用异步编程。基于阻塞I/O的传统编程模型的可伸缩性不如使用非阻塞I/O的模型。用更少的资源服务更多的请求是非常有吸引力的,那么问题在哪里呢?这里确实存在一个小问题:如果您从未接触过异步编程,那么它是一种重要的范式转换!

本书这部分的章节将通过使用Vert.x工具包教你异步编程的基本概念。使用Vert.x思考异步操作绝对是可行的(而且很有趣!),我们将探讨Vert.x应用程序的主要构建块。

本章涵盖了

  • Vert.x 是什么
  • 为什么不能避免分布式系统
  • 编程资源高效的网络应用程序的挑战
  • 什么是异步和非阻塞编程
  • 什么是响应式应用程序,以及为什么异步编程还不够
  • Vert.x 的替代品

我们开发人员生活在一个充满流行语、技术和实践炒作周期的行业。 我长期教大学生设计、编程、集成和部署应用程序的要素,我亲眼目睹了新手在当前技术的狂野海洋中航行是多么复杂。

Asynchronousreactive 是现代应用程序中的重要主题,我编写本书的目标是帮助开发人员理解这些术语背后的核心概念,获得实践经验,并认识到这些方法何时有好处。 我们将使用 Eclipse Vert.x,这是一个用于编写异步应用程序的工具包,它具有为“reactive(反应式)”含义的不同定义提供解决方案的额外好处。

在本书中,确保你理解这些概念是我的首要任务。 虽然我想让您深入了解如何编写 Vert.x 应用程序,但我还想确保您可以将在这里学到的技能转化为现在或五年后的其他类似和可能竞争的技术。

1.1 分布式和网络化是常态

20 年前,部署可以在单台机器上独立运行的同时执行所有操作的业务应用程序很常见。 此类应用程序通常展示图形用户界面,并且它们具有用于存储数据的本地数据库或自定义文件管理。 当然,这有点夸张,因为网络已经在使用中,并且业务应用程序可以利用网络上的数据库服务器、网络文件存储和各种远程代码操作。

如今,应用程序更自然地通过 Web 和移动界面向最终用户公开。 这自然会使网络发挥作用,从而使分布式系统发挥作用。 此外,面向服务的架构允许通过向其他服务发出请求来重用某些功能,这些服务可能由第三方提供商控制。 例如,将消费者应用程序中的身份验证委托给流行的帐户提供商,如 Google、Facebook 或 Twitter,或者将支付处理委托给 Stripe 或 PayPal。

1.2 不是住在孤岛上

图 1.1 是对现代应用程序的虚构描述:一组相互交互的网络服务。 以下是其中一些网络服务:

  • 像 PostgreSQL 或 MongoDB 这样的数据库存储数据。
  • 像 Elasticsearch 这样的搜索引擎允许查找以前编入索引的信息,例如目录中的产品。
  • 像 Amazon S3 这样的持久存储服务提供文档的持久和复制数据存储。
  • 消息服务可以是
    • 以编程方式发送电子邮件的 SMTP 服务器。
    • 用于通过消息平台(例如 Slack、Telegram 或 Facebook Messenger)与用户交互的机器人。
    • 用于应用程序到应用程序集成的集成消息传递协议,如 AMQP。
  • 像 Keycloak 这样的身份管理服务为用户和服务交互提供身份验证和角色管理。

使用 Micrometer 等库进行监控会公开健康状态、指标和日志,以便外部编排工具可以保持适当的服务质量,可能通过启动新服务实例或在失败时终止现有服务实例。

在本书的后面部分,您将看到典型服务的示例,例如 API 端点、流处理器和边缘服务。 当然,前面的列表并不详尽,但关键是服务很少独立存在,因为它们需要通过网络与其他服务通信才能运行。

1.3 网络上没有免费的午餐

网络正是计算中可能出现许多问题的地方:

  • 带宽波动很大,因此服务之间的数据密集型交互可能会受到影响。 并非所有服务都可以在同一数据中心内享受快速带宽,即便如此,它仍然比同一台机器上的进程之间的通信慢。

  • 延迟波动很大,并且由于服务需要与其他服务对话以处理给定请求的服务,所有网络引起的延迟都会增加整体请求处理时间。

  • 可用性不应被视为理所当然:网络失败。 路由器出现故障。 代理失败。 有时有人碰到网线并断开它。 当网络发生故障时,向另一个服务发送请求的服务可能无法确定是其他服务还是网络故障。

从本质上讲,现代应用程序是由分布式和网络化服务组成的。 它们是通过本身引入问题的网络访问的,并且每个服务都需要维护多个传入和传出连接。

1.4 阻塞 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 命令行工具,我们可以发送和接收文本。

第一章: Vert.x 异步编程的基础知识相关推荐

  1. java多线程编程—高级主题_Java day20 高级编程【第一章】Java多线程编程

    [第一章]Java多线程编程 一.进程与线程 多个时间段会有多个程序依次执行,但是同一时间点只有一个进程执行 线程是在进程基础之上划分的更小的程序单元 ,线程是在进程基础上创建并且使用的,所以线程依赖 ...

  2. 第一章 matlab 学习入门之matlab基础

    matlab系列文章目录 第一章 matlab 学习入门之matlab基础 在这一章会学习到: 数据类型(数值,字符串,结构,单元数组,函数句柄,映射容器) 运算符与运算(算术运算符,关系运算符,逻辑 ...

  3. python数据符号函数等一切皆对象_第一章:Python高级编程-Python一切皆对象

    第一章:Python高级编程-Python一切皆对象 Python3高级核心技术97讲 笔记 1. Python一切皆对象 1.1 函数和类也是对象,属于Python的一等公民 "" ...

  4. 计算机与信息技术基础第一章总结,第一章信息与计算机《计算机应用基础》.ppt...

    <第一章信息与计算机<计算机应用基础>.ppt>由会员分享,可在线阅读,更多相关<第一章信息与计算机<计算机应用基础>.ppt(20页珍藏版)>请在人人 ...

  5. [PBRT翻译] PBRT阅读:第一章 1.1文学编程(Literate Programming)

    转载自PBRT阅读:第一章 1.1文学编程(Literate Programming) http://www.opengpu.org/bbs/forum.php?mod=viewthread& ...

  6. PBRT阅读:第一章 1.1文学编程(Literate Programming)

    转载自PBRT阅读:第一章 1.1文学编程(Literate Programming)http://www.opengpu.org/bbs/forum.php?mod=viewthread&t ...

  7. 学习笔记:Java 并发编程①_基础知识入门

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 视频下载: ...

  8. 【STM32H7教程】第65章 STM32H7的低功耗串口LPUART基础知识和HAL库API

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第65章       STM32H7的低功耗串口LPUART基 ...

  9. 网络游戏《丛林战争》开发与学习之(一):网络编程的基础知识

    <丛林战争>是一款完整的网络游戏案例,运用U3D开发客户端,Socket开发服务端,其中涉及到了网络编程.数据库和Unity的功能实现,之前通过U3D开发了一个单机游戏<黑暗之光&g ...

最新文章

  1. Python - selenium_WebDriver 鼠标键盘事件
  2. C++设计模式:Template Method
  3. centos6下时间同步(ntp)操作
  4. 【SSL】SSL工作原理
  5. 数据库-优化-通过执行计划查询分析SQL执行计划-每个字段的说明
  6. js aes加密_nodejs中使用Crypto-JS对图片进行加解密
  7. 『原创』+『参考』亲手实验:使用C#在PPC中播放声音
  8. Xcode7 添加PCH文件
  9. mysql大数据表无主键_oracle转mysql 表没有主键
  10. 动态口令 java_java动态口令登录实现过程详解
  11. 大规模数据运行时,可以考虑使用多线程处理!
  12. wince6.0升级7.0系统_一个WINCC项目升级的案例分享
  13. mysql 正则排序_MySQL-排序、GROUP BY、连接、NULL值处理、正则表达式、事务
  14. App专项测试测试有哪些?
  15. java 类型通配符_通配符类型
  16. 小猫钓鱼(纸牌游戏)-c语言
  17. 【BZOJ4453】cys就是要拿英魂! 后缀数组+单调栈+set
  18. Python画好看的星空图
  19. tomcat去掉项目名称直接访问项目
  20. 解决msvcr120.dll文件丢失问题(搞了半天,简直奔溃,最后完美解决)

热门文章

  1. FPGA黑金开发板 CYCLONE IV核心板全新上市!!!!
  2. 天涯已有5天访问不了,有可能再也打不开了吗?转篇报道
  3. 注册后 域名服务器,域名和服务器有什么区别?注册域名后需要购买服务器吗?...
  4. ContOS 安装jdk
  5. python下划线怎么输入_python下划线怎么打出来
  6. 大学考试分数越高学分越多吗_千万别到了大四才知道,绩点和学分的用处,那可就真的为时已晚!...
  7. heroku php安装,heroku之php扩展
  8. mfc mysql clistctrl_MFC控件使用总结——CListCtrl - mlidify的专栏 - CSDN博客
  9. MFC::CListCtrl常用操作
  10. Redundancy and Recovery Window的区别