我一直对 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 模型。但是,Kafka和RabbitMQ等消息队列提供了对异步、非阻塞 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

9个用于构建容错系统的开源工具相关推荐

  1. h5海报设计开源工具_5个用于教幼儿阅读的开源工具

    h5海报设计开源工具 任何看到儿童使用平板电脑或智能手机的人都会观察到他们看似天生的能力,即可以滚动应用程序并在屏幕上滑动,从而弯曲"数字原生"肌肉. 根据常识媒体 ( Commo ...

  2. Windows系统使用开源工具scrcpy投屏

    简单地来说,scrcpy就是通过adb调试的方式来将手机屏幕投到电脑上,并可以通过电脑控制您的Android设备.它可以通过USB连接,也可以通过Wifi连接(类似于隔空投屏),而且不需要任何root ...

  3. 构建嵌入式linux系统_用于构建嵌入式Linux系统的4种工具

    构建嵌入式linux系统 Linux正在被部署到比Linus Torvalds在他的宿舍里工作的设备更多的设备中. 受支持的各种芯片架构令人震惊,并导致各种大小的设备都使用Linux. 从庞大的IBM ...

  4. python免费开源工具推荐_年薪200万的程序员,推荐这10大Python免费开源工具!

    原标题:年薪200万的程序员,推荐这10大Python免费开源工具! 毫无疑问,Python是最流行的语言之一,其成功的原因之一是它为科学计算提供了广泛的报道. 在这里,我们仔细研究用于机器学习和数据 ...

  5. 日志自动分析和解析开源工具

    论文原文 https://arxiv.org/pdf/1811.03509.pdf 翻译原文 https://blog.csdn.net/arpospf/article/details/9879580 ...

  6. python免费开源工具推荐_年薪200万的程序员,推荐的10大Python开源免费工具!

    原标题:年薪200万的程序员,推荐的10大Python开源免费工具! 毫无疑问,Python是最流行的语言之一,其成功的原因之一是它为科学计算提供了广泛的报道. 在这里,我们仔细研究用于机器学习和数据 ...

  7. 借助开源工具高效完成Java应用的运行分析

    不止一次,我们都萌发过想对运行中程序的底层状况一探究竟的念头.产生这种需求的原因可能是运行缓慢的服务.Java虚拟机(JVM)崩溃.挂起.死锁.频繁的JVM暂停.突然或持续的高CPU使用率.甚至于可怕 ...

  8. IBM推出开源工具帮AI抵御对抗性样本攻击:DNN开发者的福音

    策划编辑 | Natalie 译者 | Liu Zhiyong,马卓奇 编辑 | Debra Chen,Emily AI 前线导读:深度神经网络在认知任务上已经取得了突破性进展,但是它们很容易受到&q ...

  9. Druid:一个用于大数据实时处理的开源分布式系统——大数据实时查询和分析的高容错、高性能开源分布式系统...

    转自:http://www.36dsj.com/archives/28590 Druid 是一个用于大数据实时查询和分析的高容错.高性能开源分布式系统,旨在快速处理大规模的数据,并能够实现快速查询和分 ...

最新文章

  1. china-pub赠书啦,超值畅销书5本
  2. AndroidStudio设置背景颜色,字体大小,默认显示行号
  3. 阿尔法狗要逆天!韩专家称其故意输李世石一局
  4. style 放入css文件失效_React中使用CSS的7种方式
  5. vue-cli3全面配置详解
  6. 开箱一个docker
  7. Java并发编程实战~ThreadLocal
  8. C语言 __FILE__ - C语言零基础入门教程
  9. C/C++获取高精度时间
  10. 四款机型全面开售 海蓝色iPhone 12 Pro最受欢迎
  11. 自考的那些事儿(三):软件开发工具(总述篇)
  12. python book.save_Python之操作excel
  13. h5项目打包为app
  14. 人工智能系统的形式化验证技术研究进展与趋势
  15. android webview 设置下载文件,如何使用Android webview下载文本文件
  16. 什么是教养?不给人制造麻烦,就是最好的教养。
  17. 凌恩生物文献分享|颠覆性的宏基因组新思路,速来get!
  18. C语言实现http服务器(Linux)
  19. NETWORK笔记7:思科命令实验
  20. python安装launcher要选吗_python launcher是什么

热门文章

  1. LeetCode每日一题:N叉树的层序遍历(No.429)
  2. Linux iscsi磁盘共享挂载
  3. HTML meta标签总结与属性使用介绍
  4. Linux下巧妙使用邮件服务器之postfix(认证+web)
  5. 上拉加载你这个坑货~
  6. timestamp类型设置默认时间
  7. 4.mysql数据库创建,表中创建模具模板脚本,mysql_SQL99标准连接查询(恩,外部连接,全外连接,交叉连接)...
  8. 巧妙设置yum软件库轻松解决软件包安装问题
  9. flex 动态显示时间
  10. 利用 SIFT 实现图像拼接