客户端容错,服务端容错机制_9个用于构建容错系统的开源工具

客户端容错,服务端容错机制

我一直对Web开发和软件体系结构感兴趣,因为我喜欢看到一个工作系统的更广阔的前景。 无论是构建移动应用程序还是Web应用程序,都必须将其连接到Internet才能在不同模块之间交换数据,这意味着您需要Web服务。

如果将云系统用作应用程序的后端,则可以利用更大的计算能力,因为后端服务将在水平和垂直方向上进行扩展并编排不同的服务。 但是,无论您是否使用云后端,构建容错系统都是很重要的,该系统必须具有弹性,稳定,快速和安全。

要了解容错系统,我们以Facebook,Amazon,Google和Netflix为例。 数以亿计的用户同时访问这些平台,同时通过对等网络和用户对服务器网络传输大量数据,并且您可以确保还存在恶意恶意用户,例如黑客攻击或拒绝访问。服务(DoS)攻击。 即使这样,这些平台也可以一年365天,一天24小时不停机地运行。

尽管机器学习和智能算法是这些系统的基础,但它们无需停机一分钟即可实现一致的服务这一事实值得称赞。 它们昂贵的硬件和巨大的数据中心当然很重要,但是支持服务的优雅软件设计也同样重要。 容错系统是构建这种优雅系统的原则之一。

导致生产中出现问题的两种行为

这是考虑容错系统的另一种方法。 当您在本地运行应用程序服务时,一切似乎都很好。 大! 但是,当您将服务提升到生产环境时,一切都会变得一团糟。 在这种情况下,容错系统可以通过解决两个问题来提供帮助:故障停止行为和拜占庭行为。

故障停止行为

故障停止行为是指正在运行的系统突然停止或系统的某些部分发生故障时。 服务器停机时间和数据库不可访问性属于此类别。 例如,在下图中,由于无法访问服务2,因此服务1无法与服务2通信:

Fail-stop behavior due to Service 2 downtime

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

Fail-stop behavior due to network failure

拜占庭行为

拜占庭式行为是系统连续运行但未产生预期行为(例如,错误的数据或无效的值)时。

如果服务2的数据或值损坏,即使该服务看起来运行良好,也可能发生拜占庭式故障,例如以下示例:

Byzantine failure due to corrupted service

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

Byzantine failure due to malicious middleman

故障停止和拜占庭行为都不是理想的情况,因此我们需要防止或修复它们的方法。 那就是容错系统起作用的地方。 以下是八个可以帮助您解决这些问题的开源工具。

用于构建容错系统的工具

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

断路器模式:Hystrix和Resilience4j

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

Circuit breaker pattern

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

我以前工作过的许多公司都在利用这个出色的工具。 令人惊讶的是,Netflix宣布将不再更新Hystrix。 (是的,我知道。)相反,Netflix建议使用诸如支持Java 8和功能编程的Resilence4j之类的替代解决方案,或诸如Adaptive Concurrency Limit之类的替代实践。

负载平衡:Nginx和HaProxy

负载平衡是分布式系统中最基本的概念之一,必须存在以具有生产质量的环境。 要了解负载均衡器,我们首先需要了解冗余的概念。 每个生产质量的Web服务都具有多个服务器,这些服务器提供冗余以在服务器停机时接管并维护服务。

Load balancer

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

负载平衡器是通过平衡多个服务器节点来优化繁忙通信量的设备或软件。 例如,当成千上万的请求进入时,负载均衡器充当中间层,以路由并在不同服务器之间平均分配流量。 如果服务器出现故障,负载平衡器会将请求转发到运行良好的其他服务器。

有许多负载均衡器可用,但是两个最著名的负载均衡器是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配置。

演员模型:Akka

角色模型是一种并发设计模式代表责任当演员 ,这是计算的原始单元,接收消息。 演员可以创建更多的演员,并将消息委派给他们。

Akka是演员模型实现的最著名工具之一。 该框架支持Java和Scala,它们均基于JVM。

使用消息队列的异步,非阻塞I / O:Kafka和RabbitMQ

过去,多线程开发很流行,但是不鼓励使用这种做法,并用异步,无阻塞的I / O模式代替了这种做法。 对于Java,这在其Enterprise Java Bean(EJB)规范中有明确规定:

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

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

现在,还有其他实践,例如流API和参与者模型。 但是像KafkaRabbitMQ这样的消息传递队列为异步和非阻塞IO功能提供了开箱即用的支持,它们是强大的开源工具,可以通过处理并发进程来替代线程。

其他选项:尤里卡和混沌猴子

其他用于容错系统的有用工具包括监视工具(例如Netflix的Eureka )和压力测试工具(例如Chaos Monkey) 。 他们旨在通过在较低环境中进行测试(如集成(INT),质量保证(QA)和用户验收测试(UAT)),尽早发现潜在问题,以防止在移至生产环境之前出现潜在问题。


您正在使用哪些开源工具来构建容错系统? 请在评论中分享您的收藏夹。

翻译自: https://opensource.com/article/19/3/tools-fault-tolerant-system

客户端容错,服务端容错机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值