加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 服务器 > 搭建环境 > Windows > 正文

如何设计一个优秀的分布式系统?重要因素、工具、策略都在这里

发布时间:2019-06-21 17:36:48 所属栏目:Windows 来源:Dan Kusnetzky
导读:介 绍 今天的应用程序可以说是分布式系统开发中的一项奇迹。基于不同的系统架构,构成应用程序的每个功能或服务可能在不同的系统上执行,而系统位于不同的地理位置,使用不同的计算机语言编写。应用程序的组件可能托管在一个功能强大的系统上,该系统由用

Opensource.com为开源软件提供了以下定义:“开源软件是带有源代码的软件,任何人都可以检查、修改和增强代码。”“而有些软件的源代码只有创建它的个人、团队或组织才能修改——并且保有对它的独占控制。人们称这种软件为‘专有’或‘闭源’软件。”

只有专有软件的原始作者才能合法地复制、检查和修改该软件。为了使用专有软件,计算机用户必须同意(通常通过接受首次运行该软件时显示的许可证),如果软件作者没有明确允许的话,他们不会对软件做任何的修改。微软Office和Adobe Photoshop都是专有软件的例子。

虽然开源软件在计算机早期就已经存在,但直到20世纪90年代,当完整的开源操作系统、虚拟化技术、开发工具、数据库引擎和其他重要功能出现时,它才走到了前台。开源技术通常是基于web和分布式计算的关键组件。其中,以下类别的开源软件很受欢迎:

  • 开发工具
  • 应用支持
  • 数据库(flat文件,SQL,No-SQL,以及内存)
  • 分布式文件系统
  • 消息传输/队列
  • 操作系统
  • 聚类

分布式计算

强大的系统、快速的网络以及复杂软件可用性的结合,已经将主要的应用程序开发从单一转向了更加分布式的形式。然而企业已经意识到,有时候从头开始比尝试重构或分解旧的应用程序要更好。

当企业进行创建分布式应用程序的工作时,常常会发现一些有趣的副产品。一个设计得当的应用程序,它已经分解成单独的功能或服务,可以由单独的团队并行开发。

快速应用程序开发和部署(也称为DevOps)就是一种利用新环境的方法。

面向服务的架构

随着行业从客户端/服务器的计算模式,发展到更加分布式的方法,“面向服务的架构”一词出现了。这种方法基于分布式系统的概念、消息队列和交付中的标准,以及将XML消息传递作为共享数据和数据定义的标准方法。

各个应用程序的功能被打包成面向网络的服务,这些服务接收一条消息,请求它们执行特定的服务,在它们执行服务之后,将响应发送回请求该服务的函数。

这种方法还提供了另一个好处,即可以将给定的服务托管在网络的多个位置。这既提高了整体性能,又增强了可靠性。

除此之外,现在还有很多工作负载管理工具,它用于接收服务请求、检查可用容量、将请求转发给具有最大可用容量的服务,然后将响应发送回请求者。如果特定的服务器没有及时响应,工作负载管理器会简单地向服务转发另一个实例。它还会将没有响应的服务标记为失败,并且在它收到一条表明服务仍在运行的消息之前,不会向它发送额外的请求。

设计分布式系统的重要考虑因素

现在我们已经走过了50多年的计算机历史,下面让我们来看看分布式系统开发人员的一些经验法则。需要考虑的东西很多,因为分布式解决方案可能有组件和服务在许多地方、不同类型的系统中运行,而且必须来回传递消息才能执行工作。要想成功创建这些解决方案,谨慎思考是必须的。除此之外还必须为所使用的每种主机系统、开发工具和消息传递系统提供专门的知识。

确定需要做什么

我们首先要考虑的事情,是我们究竟需要完成什么。虽然这听起来很简单,但却非常重要。

令人惊讶的是,许多开发人员在知道具体需要什么之前就开始构建东西。通常情况下,这意味着他们构建了不必要的功能,浪费了时间。引用Yogi Berra的话就是:“如果你不知道自己要去哪里,你最终会去往别的地方”。

首先需要知道要做什么,已经有哪些工具和服务可用,以及使用最终解决方案的人应该看到什么。

交互和批处理

快速响应和低延迟常常是我们的需求,因此比较明智的做法是考虑在用户等待时应该做什么,以及可以将什么放入批处理过程中,而这些批处理执行在事件驱动或时间驱动的计划中。

在考虑了功能的初始分割之后,比较好的做法是计划何时需要执行后台、批处理进程、这些功能操作哪些数据、以及如何确保这些功能是可靠的、何时可用以及如何防止数据丢失。

功能应该托管在哪里

只有在详细计划了“完成什么”之后,才应该考虑“在哪里”以及“如何做”。开发人员有各自最喜欢的工具和方法,并且经常会调用它们,即使可能不是最佳的选择。Bernard Baruch说过:“如果你只有一把锤子,那么所有东西看起来都像钉子”。

了解企业开发的企业标准也很重要。仅仅因为工具目前很流行就选择它是不明智的。这个工具可以完成这些工作,但是需要记住的是,它构建的所有东西都需要维护。如果你构建了一些只有自己才能理解或者维护的东西,那么在你职业生涯的剩下时间中,你可能已经把自己束缚在这一功能上了。我自己也有过这种经历,自认为自己创建的功能工作正常、轻量而且可靠。但在我离开那家公司后的十年里,我不断地收到关于这些功能的电话,因为后来的开发人员无法理解这些功能是如何实现的,而我写的文件又早就被丢掉了。

在分布式解决方案中,每个功能或服务都应该分别考虑。该功能应该在企业数据中心?还是使用云服务提供商?还是两者兼有?另外还要考虑到在某些行业中存在法规要求,这些要求指导我们选择需要在何处以及如何维护和存储数据。

其他需要考虑的东西还包括:

  • 该功能的主机应该是什么类型的系统。有没有系统架构更合适该功能?系统应该基于ARM、x86、SPARC、Precision、Power,还是大型机?
  • 会有某种特定的操作系统为该功能提供了更好的计算环境吗?Linux、Windows、UNIX、System I,或是System Z会是更好的平台吗?
  • 某特定的开发语言是否更适合该功能?它是一种特定类型的数据管理工具吗?该用Flat文件、SQL数据库还是No-SQL数据库?还是说非结构化的存储机制更好?
  • 功能应该托管在虚拟机中还是容器中,方便迁移、自动化以及编排吗?

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读