当前位置:首页 > 区块链新闻 > 正文

分布式系统的建立与体系结构规划

来源: 互联网时间:2019-02-23 11:01:41

Cermati的工程团队由来自不同大学和不同专业的人员,组成的团队是非常多样化的。由于这种多样性,并不是团队中的每个人在加入时都获得了所需的计算机科学和软件工程技能以外的共同知识。因此这推动了我们之间关于各种主题的讨论,从中我们互相帮助理解新的概念,并填补了我们知识上的空白。

这篇文章的灵感来自我和其他Cermati工程师的讨论,当时我们正在谈论现代数字基础设施是如何工作的,以及在引擎盖下发生的事情。

为了了解现代数字基础设施是如何工作的,以及我们在建设数字基础设施时需要规划什么,我们首先需要了解硬件和网络的物理概念,以及如何管理它们。计算机科学喜欢接近纯数学,但它实际上生活在电气工程和数学之间,在这个过程中还涉及到物理学。

在本文中,我们将讨论分布式系统及其背后的一些原理-有些是物理的,但这篇文章不是物理讲座,所以我们物理专业的细节。

分布式基础设施

想象一下,我们有这么多机器,每台机器都可以在地图上的任何地方找到。

我们的基础设施分布在几个云服务提供商和一些物理基础设施中。Cermati基础设施团队的工作之一是确保我们的分布式基础设施能够可靠地协同工作,以支持我们的组织需求。

尽管Cermati的系统目前还没有达到我们实际管理的足够的机器,这些机器放置在上面地图上的许多点(在撰写本文的时候,它只是在新加坡和雅加达的几个位置),但是了解一些基本原则可以帮助我们设计我们的系统架构,以最大限度地利用我们手头的资源。

管理我们拥有的所有东西需要了解系统的每个部分是如何工作的,以及如何最好地利用它们。计算系统的每一部分都是由物理上的电路和部件组成的,也是由虚拟基础设施和软件上的代码组成的。

在分布式系统中,组件可以通过很大的距离进行物理分离。类似于计算机的体系结构-不同的电路和组件可以同步工作,而分布式系统由跨网络系统的多台机器组成。联网系统可以是同一数据中心的不同主机,甚至可以是海洋和大陆之间的物理分离。

主机容量规划

软件需要运行在其他层之上。我们在软件下到底有多少层取决于我们拥有什么样的软件,稍后我们将对此进行解释。

我们的商用计算硬件包括电气和机械部件,通常是CPU、内存和存储器。这些组件被组装成一个完全能够满足我们的计算需求的计算设备。

在具有实际组件的硬件之上,我们可能拥有具有虚拟CPU、内存、存储和一切的虚拟机。这些虚拟机的工作方式与硬件类似,但其核心是软件逻辑,而不是硬连线电路。该软件作为系统的另一层,与物理主机的操作系统进行交互,而物理主机的操作系统具有对裸金属硬件的实际访问权限。

主机提供了我们可以根据预算获得的资源。选择哪种资源来最大化哪个主机应该取决于我们期望主机执行最多的是哪种操作。了解一些计算机架构将帮助我们确定我们的系统需要什么样的机器。

基于Von Neumann模型的通用计算机体系结构

对于执行大量计算操作的机器来说,为机器上运行的代码获得最优的CPU功率是一件好事。每当在主机上执行指令时,就使用CPU。指令本身在等待内存、磁盘或网络I/O访问时可以有空闲时间。在空闲期间,CPU通常不会被大量使用。

CPU功率通常由时钟速率来测量,时钟速率以赫兹为单位。1Hz是时钟状态每秒变化的一个周期,5Hz是时钟状态每秒变化的5个周期。

正弦波的动画插图,频率从1Hz到5Hz(图片来自维基百科)。

时钟速率越高,CPU的状态变化频率越高,这意味着指令的执行速度越快。

我们在选择主机时考虑的另一个常见组件是内存。物理存储器是包含电容器的电路,用于保存数据。从CPU到内存的访问通常是相当快的——即使我们需要运行的指令也存储在内存中。因此内存容量通常是最大化的,以保持需要以最小的磁盘或网络I/O延迟访问的东西,例如内存中的缓存服务器。

要考虑的另一个组件是磁盘。磁盘访问通常比较慢,因为我们使用的大多数磁盘类型都是旋转磁盘的类型。这种类型的磁盘是利用旋转磁盘来保存数据,当系统使用旋转的手来修改磁盘中的状态时,就证明磁盘正在旋转。

旋转磁盘 扇区查找的轮转需要一段时间,因此与内存访问相比,对存储的访问要慢得多。SSD存储速度更快,因为它不需要为查找和磁盘写入执行磁盘旋转,但目前它相对昂贵。

存储的类型和容量取决于存储将如何使用。我们还可以在内存上设置交换分区,以便在物理内存耗尽时将其用作内存,但由于上述原因,内存访问速度会较慢。

由于我们的应用软件体系结构通常设计为不包含存储中的本地状态,因此应用服务器通常需要体面的CPU(根据应用程序执行的进程而定,多个核将是很好的),以及大量的内存(取决于在应用程序的峰值时间内需要将多少数据加载到内存中)。对于应用程序服务器,我们通常不需要太多的存储容量,只需保存最近的日志文件和一些额外的内核映像就可以了。

数据库机器需要更大的存储容量才能存储大量数据,还需要相当大的内存和CPU来保持连接和执行数据操作。

网络设计

在决定了我们的机器需要什么规格之后,我们需要考虑机器的位置。在决定机器的位置时,最明显的考虑因素是访问我们机器的客户端在哪里。

机器之间的物理距离是一件需要考虑的事情。由于Cermati目前只为印尼客户提供服务,因此将应用服务器放在美国的数据中心是没有意义的,而我们可以选择在新加坡,甚至更好的是,在印度尼西亚,在传输介质因素不变的前提下,把这些机器放在那里。

物理距离越远,通过网络传送的数据包的旅行时间就越长,这意味着我们期望更多的网络延迟,因为以一定速度传输的数据包需要更多的时间来覆盖更远的距离-t=d/v,假设速度(v)是常数,那么距离越远(d)被覆盖的时间越长(t)数据包需要到达预定的目的地。

加权图模型可以用来表示网络中的距离(图像来自卡尔加里大学)。 实际的路由,或者足够大到有自己的大规模广域网网络基础设施是由运行中间网络的ISP公司管理的,所以我们通常不需要在我们的专用网范围之外对网络路由进行太多的规划。我们只需要关注明显的部分:数据中心的位置和用户与机器之间的物理距离。

由于网络传输速率转化为具有网络I/O进程的性能,因此我们将通过网络进行密集通信的主机物理和逻辑上更紧密地连接在一起,以减少通信主机之间的网络延迟。此外,我们需要确保我们有足够的网络带宽。

理想情况下,所有主机都应该团结在一起,这样它们就可以有效地进行通信,并且所有的东西都可以很容易地集成起来。但在某些情况下,我们需要在多个云提供商的数据中心拥有多个主机,同时自己维护一些物理机器。然而,系统必须彼此通信才能同步,才能让我们的公司正常工作。我们通过设计物理分离的系统来管理这一点,只以一种相对较少的方式相互通信,并在故障时与额外的处理程序进行通信,以确保通信的可靠性。

通过网络中的某些主机相互同步的不同物理站点。 需要彼此快速可靠通信的任何一组主机都应放在同一个位置,由一些主机在不同的位置扮演同步系统和其他系统的角色。

对于静态文件和资产,我们可以将它们放在CDN上,通过让CDN缓存它们来减轻来自我们机器和网络的一些负载,并让CDN服务器(而不是我们的机器)来服务内容。

CDN将内容分发到POP(出现点)站点供用户访问(图像来自KeyCDN)。

系统安全性

安全问题讨论起来有点复杂,因为它不仅涉及如何构建系统,还包括如何管理系统。安全的基本概念可以用下面的中情局三合会来概括。

机密性-完整性-信息安全的可用性三位一体。

·机密性意味着资源只能被授权访问的人访问。

·完整性意味着当资源被访问时,我们可以验证它没有被篡改,并且我们可以信任我们正在访问的资源是正确的。

·可用性意味着无论何时需要,资源都是可访问的。

上面解释的点是可以应用于任何上下文的一般概念,因为点中提到的资源是于上前后无关的。并不是每个前后都需要所有这三个,因为一些前后发展概要,例如加密算法强度,只需要考虑机密性和完整性。

如果应用于我们的基础设施,我们可以设置如下所列的前后系统。

·机密性意味着任何关于我们系统内部工作的信息都不会因为基础结构系统的错误配置而泄露。在我们的系统中违反机密性的例子是,我们的系统监视仪表板图表由于配置错误的访问控制规则而变得公开可访问。

·完整性意味着我们在基础结构系统上的信息必须是正确的,不能在进程之间被篡改以操纵系统或用户。违反完整性的例子是让我们的一个独立系统同步一个集合。

·可用性意味着无论何时需要,系统都应该是可访问的。违反可用性的例子是系统中断。

至于我们正在做的事情,我们将更多地关注机密性,因为我们基础设施的某些部分需要从公共互联网上访问,而系统存储和传输的数据的机密性是我们配置它们时的基本要求。完整性通常内置在同步过程中,而可用性通常是在我们规划系统容量和可靠性时考虑的。

为了确保基础设施访问的安全性,我们可以为每个主机在云基础设施提供商上设置安全访问规则。AWS和阿里巴巴都有安全组-每个主机都可以配置虚拟防火墙规则。

AWS提供的网络安全功能。(Amazon图像) 由于我们的系统由分布在多个位置的较小系统和第三方服务(如SMS网关服务和合作伙伴API)组成,因此我们需要考虑系统如何安全地相互通信。

一种方法是设置VPN网关,允许来自其他位置的主机访问目标网络的机器,而不向公共Internet公开。但是,在系统的每个部分设置VPN网关将是昂贵的,因为我们也需要维护它们。

使用VPN连接的两个独立的网络基础设施(Microsoft的图像)。 另一种方法是在网络边界上使用防火墙和身份验证方法,只允许外部访问来自白色源IP地址的经过验证的请求。当然,它只适用于具有静态公共IP地址的系统,否则每次ISP为我们分离的系统发出新的公共IP地址时,我们都需要更新白名单。

防火墙被配置为允许或拒绝从公共网络访问系统的某些部分。

维护系统安全的一个重要部分是设计适当的授权-规范谁访问谁,花在谁身上的时间主要用于确定访问是如何执行的,并决定是否应该授予访问权限。

除了管理IAM(用于AWS)、RAM(针对阿里巴巴云)、VPN和SSH帐户之外,我们还没有深入到用户帐户管理领域。这种方法在我们目前的规模上仍然很好,但是我们需要一种方法来管理更多的帐户,以便随着团队的发展而更好地扩展。

在构建基础设施时,安全性是一个很重要的考虑因素,因为能够访问系统允许任何用户访问我们生产系统的各个部分。不安全的基础设施的影响可以是从我们的系统偶尔发生奇怪的行为到大规模的信息泄漏和数据窃取。保持我们的攻击面小,同时有效地管理我们的基础设施和工作流,这本身就是一个挑战。

结语

基础设施系统管理和规划是Cermati早期工程的一个重要组成部分,因为我们需要运营我们自己的物理呼叫中心基础设施,而且我们的业务性质要求我们遵守政府的规定。这些需求促使我们选择云和物理基础设施系统的混合体,我们的基础设施托管在不同的数据中心和云系统提供商上。

在构建和管理IT基础设施时,有很多事情要考虑,我们已经讨论了在建立和管理机器和计算机网络时需要考虑的一些基本问题。然而,它们只是对一些基础知识的快速介绍,以及我们在基础设施方面遇到的一些例子。

在实践中,我们使用了很多预先制作的组件和工具.使用现成的工具可以大大加快我们的进程,但是进行一些研究,看看它们将如何适应我们的系统架构,这可以很好地理解IT基础设施是如何工作的。

免责声明:

1.本文内容综合整理自互联网,观点仅代表作者本人,不代表本站立场。

2.资讯内容不构成投资建议,投资者应独立决策并自行承担风险。