NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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:005731
用户头像

发布了 693 篇内容, 共 401.4 次阅读, 收获喜欢 1502 次。

关注

评论 1 条评论

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

吐血整理:常用的大数据采集工具,你不可不知

小术晓术

大数据 数据采集

IM开发基础知识补课(十):大型IM系统有多难?万字长文,搞懂异地多活!

JackJiang

架构设计 即时通讯 灾备 IM 异地多活

HTTP与HTTPS,HTTPS更加安全。

喀拉峻

网络安全 安全 信息安全 HTTP

今日谈:数字信号常用编码、香农公式、信道复用技术

Regan Yue

计算机网络 网络工程师 11月日更

网络篇夺命连环12问

冇先生

腾讯安全推出御界NDR「横移检测版」,全面检测域渗透攻击

腾讯安全

绝绝子!美团大牛吐血整理总结“消息队列核心知识笔记”是真的吊

编程 程序员 MQ 队列

无锡农商行王宗:敏态转型,实现科技引领业务的华丽转身

BoCloud博云

微服务 云原生

腾讯Q3财报:腾讯企点服务超100万家企业,显著降低客服成本

科技热闻

架构实战营-模块三作业

无名

架构实战营 「架构实战营」

安全漏洞之经典上传漏洞

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

视频通信关键技术探索及实践

网易云信

音视频 通信云

电脑数据恢复用哪款软件比较好

淋雨

EasyRecovery

第三阶段总结

张靖

#架构实战营

专题|防宕机,Pulsar 跨机房复制了解一下?

Apache Pulsar

云原生 中间件 Apache Pulsar 消息系统 防宕机 跨地域复制

外包学生管理系统架构文档

Steven

架构实战营

FlyFish 1.0发布,新增4个可视化组件

云智慧AIOps社区

大前端 低代码 数据可视化

智能的统一哲学

木铎

人工智能 机器学习 智能

堪称神级的阿里巴巴“高并发”教程《基础+实战+源码+面试+架构》

Java 编程 程序员 高并发

今天面了个腾讯拿38K出来的大佬,让我见识到了基础的天花板

收到请回复

Java 程序员 后端

腾讯云开源百万级服务发现和治理中心“北极星”,打造可持续微服务生态

科技热闻

Apache Pulsar 在能源互联网领域的落地实践

Apache Pulsar

架构 云原生 Apache Pulsar 消息系统 用户案例 能源互联网

ShowMeBug 中如何科学的识别用户浏览器?

ShowMeBug

大前端 浏览器 WebRTC

腾讯云数据库TDSQL首次登上财报!TDSQL在不同金融机构核心系统中的渗透率明显提升

科技热闻

基于SVDD算法的半监督风控模型

索信达控股

算法 风控模型 半督导算法

❤️这应该是Postman最详细的中文使用教程了❤️(新手使用,简单明了)

六十七点五

软件测试 性能测试 Postman 自动化测试 接口测试

ShowMeBug 黑科技丨一招快速实现架构绘图之鼠标同步

ShowMeBug

思维导图 实时同步 绘图库

如何在 MySQL / MariaDB 中导入导出数据,导入导出数据库文件、Excel、CSV

蒋川

MySQL 数据库 MariaDB 卡拉云

速看!从源码到实战,腾讯大牛纯手码48W字SpringCloud实战笔记

Java 编程 程序员 面试 SpringCloud

千万不要小瞧复杂度分析,代码详解复杂度的重要性

小Q

Java Python 学习 数据结构 算法

Aeron是如何实现的?—— Conductor

BUG侦探

Aeron Conductor

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