阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

9 个用于构建容错系统的开源工具

  • 2019-04-18
  • 本文字数:2659 字

    阅读完需:约 9 分钟

9个用于构建容错系统的开源工具

我一直对 Web 开发和软件架构很感兴趣,因为我希望对一个可以工作的系统有一个整体的了解。无论你正在构建移动应用程序还是 Web 应用程序,它都必须连接到互联网,以便在不同的模块之间交换数据,这意味着你需要一个 Web 服务。


如果使用云系统作为应用程序的后端,则可以利用更强大的计算能力,因为后端服务可以横向和纵向伸缩,并编排不同的服务。但是,无论你是否使用云后端,构建一个容错系统都是非常重要的——一个有弹性、稳定、快速和安全的容错系统。


为了理解容错系统,让我们以 Facebook、Amazon、谷歌和 Netflix 为例。数以百万计的用户同时访问这些平台,同时通过点对点和用户服务器(user-to-server)网络传输大量数据,而且可以肯定,其中有恶意用户,比如黑客攻击或拒绝服务攻击(DoS)。即便如此,这些平台仍然可以一天 24 小时、一年 365 天不停机地运行。


尽管机器学习和智能算法是这些系统的核心,但它们能够在没有一分钟停机的情况下实现一致的服务,这一点值得称赞。它们昂贵的硬件和庞大的数据中心当然很重要,但支持这些服务的优雅的软件设计也同样重要。而容错系统正是构建这样一个优雅系统的原则之一。

两种导致生产问题的行为

这里有另一种考虑容错系统的方式。当你在本地运行应用程序服务时,一切似乎都很好。太棒了!但是,当你将你的服务推到生产环境时,一切都乱了套。在这种情况下,容错系统有助于解决两个问题:故障停止行为(Fail-stop behavior)和拜占庭行为(Byzantine behavior)。

故障停止行为

故障停止行为是指正在运行的系统突然停止或部分系统发生故障。服务器停机和数据库不可访问属于这一类。例如,在下面的图中,Service 1 不能与 Service 2 通信,因为 Service 2 是不可访问的:



但是,如果服务之间存在网络问题,也会出现这种问题,如下所示:


拜占庭行为

拜占庭行为是指系统持续运行,但没有产生预期的行为(例如,错误的数据或无效的值)。


如果 Service 2 损坏了数据或值,拜占庭式的故障就会发生,即使服务看起来运行得很好,就像在这个例子中:



或者,可能有一个恶意的中间人在服务之间拦截并注入不需要的数据:



无论是故障停止还是拜占庭行为都不是我们想要的情况,所以我们需要有方法可以防止或修复它们。这就是容错系统发挥作用的地方。以下 9 个开源工具可以帮助你解决这些问题。

构建容错系统的工具

尽管构建一个真正实用的容错系统涉及到深入的分布式计算理论和复杂的计算机科学原理,但是有许多软件工具——其中有许多是开源工具,如下面这些——可以通过构建容错系统来减轻不良影响。

断路器模式:Hystrix 和 Resilience4j

断路器模式是一种技术,在服务失败时帮助返回一个准备好的虚拟响应或简单响应:



Netflix 开源的Hystrix是最流行的断路器模式实现。


我以前工作过的许多公司都在使用这个很棒的工具。令人惊讶的是,Netflix 宣布将不再更新 Hystrix。(是的,我知道。)相反,Netflix 建议使用另一种解决方案,如支持 Java 8 和函数式编程的Resilence4j,或另一种方案Adaptive Concurrency Limit

负载均衡:Nginx 和 HaProxy

负载均衡是分布式系统中最基本的概念之一,必须提供一个高质量的生产环境。要理解负载均衡器,首先需要理解冗余的概念。每个生产质量的 Web 服务都有多个服务器以提供冗余,以便在服务器宕机时接管和保持服务。



想想现代飞机:它们的双引擎提供了冗余,即使引擎着火也能安全着陆。(大多数商用飞机拥有最先进的自动化系统,这也提供了帮助。)但是,拥有多个引擎(或服务器)意味着必须有某种调度机制,以便在发生故障时有效地路由系统。


负载均衡器是通过平衡多个服务器节点来优化高流量事务的设备或软件。例如,当数千个请求进来时,负载均衡器充当中间层,在不同的服务器之间路由和平均分配流量。如果服务器宕机,负载均衡器就将请求转发给运行良好的其他服务器。


有许多可用的负载均衡器,但最著名的两个是 Nginx 和 HaProxy。


Nginx不仅仅是一个负载均衡器。它还是 HTTP 和反向代理服务器、邮件代理服务器和通用 TCP/UDP 代理服务器。Groupon、Capital One、Adobe 和 NASA 等公司都在使用它。


HaProxy也很受欢迎,因为它是一个免费的、非常快速和可靠的解决方案,为基于 TCP 和 HTTP 的应用程序提供高可用性、负载均衡和代理。许多大型互联网公司,包括 GitHub、Reddit、Twitter 和 Stack Overflow 都在使用 HaProxy。是的,Red Hat Enterprise Linux 也支持 HaProxy 配置。

Actor 模型:Akka

Actor模型是一种并发设计模式,当 actor(基本计算单元)接收到消息时,它将委托责任。一个 actor 可以创建更多的 actor 并将消息委托给它们。


Akka是实现了 Actor 模型的最著名的工具之一。该框架支持基于 JVM 的 Java 和 Scala。

使用消息队列实现异步、非阻塞 I/O:Kafka 和 RabbitMQ

多线程开发在过去一直很流行,但是这种实践被放弃,取而代之的是异步、非阻塞 I/O 模式。对于 Java,这在其Enterprise Java Bean(EJB)规范中有明确说明:


企业 Bean 不能使用线程同步原语来同步多个实例的执行。

企业 Bean 不能尝试管理线程。企业 Bean 不能尝试启动、停止、挂起或恢复线程,也不能更改线程的优先级或名称。企业 Bean 不能试图管理线程组。


现在,还有其他实践,如流 API 和 Actor 模型。但是,KafkaRabbitMQ等消息队列提供了对异步、非阻塞 IO 特性的开箱即用的支持,它们是功能强大的开源工具,可以通过处理并发进程替换线程。

其他选项:Eureka 和 Chaos Monkey

其他有用的容错系统工具包括监控工具,如 Netflix 的Eureka,压力测试工具,如Chaos Monkey。它们的目标是通过在较低级的环境(如集成(INT)、质量保证(QA)和用户验收测试(UAT))中进行测试,尽早发现潜在的问题,从而在转移到生产环境之前防止潜在的问题。


你使用什么开源工具来构建容错系统?请在评论中分享你的最爱。

关于作者

Bryant Son —— Bryant Jimin Son 是 Red Hat 的顾问。Red Hat 是一家以 Linux 服务器和开源贡献而闻名的技术公司。在工作中,他致力于利用 Red Hat 技术栈(如 BPM、PAM、Openshift、Ansible)为客户构建技术,并使用 Java、Spring Framework、AngularJS 和 Material Design 进行全栈开发。在加入 Red Hat 之前,Bryant 在花旗集团的花旗云团队工作,负责构建私有基础设施即服务(IaaS)云平台,为花旗各部门的 8000 多个团队提供服务。他还在美国航空公司、IBM 和家得宝奥斯汀技术中心工作过。Bryant 毕业于德克萨斯大学奥斯汀分校,获得计算机科学和航空航天工程学士学位,辅修商业。


查看英文原文:9 open source tools for building a fault-tolerant system


2019-04-18 08:005728
用户头像

发布了 689 篇内容, 共 398.7 次阅读, 收获喜欢 1498 次。

关注

评论 1 条评论

发布
用户头像
容错是很关键的,断路器是需要的,负载均衡是需要的
2019-04-22 10:31
回复
没有更多了
发现更多内容

软件测试/人工智能|Python Pip 常用命令大全

霍格沃兹测试开发学社

软件测试/人工智能|Python算术运算符:入门指南

霍格沃兹测试开发学社

每日一题:LeetCode-322. 零钱兑换

半亩房顶

面试 算法 LeetCode 动态规划 贪心算法

前端又出新轮子Nue.js,但还是低代码更香!

伤感汤姆布利柏

前端 低代码 前端框架 极简主义 nue

探索Web前端技术的变革与未来发展

EquatorCoco

前端 Web 技术开发

中企全球化:王文京与新加坡建筑企业集永成共谋数智化新发展

用友BIP

String 拼接字符串效率低?是真的吗?

红袖添香

Java 字节码 字符串拼接

走软件开发的捷径——低代码之路

树上有只程序猿

软件开发 低代码 JNPF

招聘IT人才vs IT外包,怎么选?

Ogcloud

外包 IT 外包公司 项目外包 IT 运维

低代码/无代码火热的缘由

这我可不懂

软件开发 低代码 JNPF

微信小程序 WXSS 是如何编译的?

FN0

小程序 小程序容器

还记得当初自己为什么选择计算机?

代码生成器研究

债务管理一体化领先实践,全面提升融资管理效率,有效防控风险

用友BIP

软件测试/人工智能|Python运算符:初学者指南

霍格沃兹测试开发学社

少写代码,用更便捷的方式开发程序

代码生成器研究

3D模型制作木质纹理贴图

3D建模设计

3D模型 材质贴图 纹理贴图 材质纹理

制作红木家具3d模型

3D建模设计

3D模型 材质贴图 纹理贴图 材质纹理

如何为 3D 模型制作纹理的最佳方法

3D建模设计

材质 纹理 贴图 3D模型纹理贴图

为什么说编程是新时代必学的技能?

代码生成器研究

文心一言 VS 讯飞星火 VS chatgpt (150)-- 算法导论12.2 6题

福大大架构师每日一题

福大大架构师每日一题

Java多线程系列4:线程协同

BigBang!

Java多线程

云计算与低代码:加速应用开发与创新的双核引擎

快乐非自愿限量之名

云计算 云原生 低代码

人工智能技术:一文带你了解何谓AIGC

不在线第一只蜗牛

人工智能 AI技术 AIGC 人工智能技术

供应商企业在线询价招投标管理系统

金陵老街

IPQ5018 IPQ6010 IPQ8072 Support Wallystech Latest Opensource Code Repository

wallyslilly

IPQ6010 IPQ8072 ipq5018

「X」Embedding in NLP|Token 和 N-Gram、Bag-of-Words 模型释义

Zilliz

nlp NLP 大模型 Milvus AIGC

AI大模型爆发后,智能计算的需求有多强烈?

Finovy Cloud

人工智能 AI AI模型 AI 模型编译器 ChatGPT

机器学习-ROC曲线:技术解析与实战应用

快乐非自愿限量之名

人工智能 机器学习 深度学习

王文京与厦航董事长、党委书记赵东交流座谈,共商助力智慧民航建设

用友BIP

如何理解微服务体系结构中的 CQRS

快乐非自愿限量之名

数据库 微服务

用友承建!居然之家人力资源数智化项目成功上线!

用友BIP

9个用于构建容错系统的开源工具_开源_Bryant Son_InfoQ精选文章