如何设计一个优秀的分布式系统?重要因素、工具、策略都在这里
在本世纪初,运行Windows或Linux虚拟机往往是首选。虽然它们为方法提供了重要的隔离,并且在必要时很容易重启或移动他们,但是他们的处理、内存以及存储要求相当高。容器是处理虚拟化的另一种方式,它提供了类似的隔离级别,能够重新启动和迁移方法,而且消耗的处理能力、内存或存储都要小得多。 性能 性能是另一个重要的考虑因素。在定义组成解决方案的功能或服务时,开发人员应该注意它们是否有重要处理、内存或存储需求。仔细研究这些问题非常重要,这样才能知道是否可以进一步细分或分解这些功能。 进一步的分割会允许并行处理的增加,这样能很大可能地提供性能上的改进。当然,这样做的代价是,它也增加了复杂性,可能会更加难以管理和保证安全。 可靠性 在高风险的企业环境中,解决方案的可靠性至关重要。开发人员必须考虑何时可以要求人们重新输入数据、重新运行功能,或者何时功能将不可用。 数据库开发人员在20世纪60年代就遇到了这个问题,并开发了原子功能的概念。也就是说,功能必须完成或者部分的更新必须回滚,以使得数据处于功能开始前的状态。分布式系统也需要这种思维方式,确保即使在出现服务故障和事物中断的情况下也能保证数据完整性。 例如,在关键消息传递系统中,在确认消息已经被接收方收到之前,消息必须被一直存储好。如果消息没能成功收到,则必须重新发送原始消息,并向系统管理报告故障。 可管理性 尽管没有核心应用程序功能那么有趣,但可管理性仍然是保证应用程序正常运转的关键因素。所有分布式功能都必须得到充分的检测,让管理员了解每个功能的当前状态,并在需要时更改功能的参数。毕竟,分布式系统是由比它们所替代的单片系统更多的活动部件组成的。开发人员必须时刻注意让这个分布式计算环境易于使用和维护。 这给我们带来了一个绝对的要求,即必须对所有分布式功能进行充分的工具化,让管理员了解到它们的当前状态。毕竟,分布式系统本质上比它们所替代的单片系统更加复杂,并且有更多的活动部件。 安全性 确保分布式系统安全性,比单片环境中安全问题的难度高了一个数量级。每个功能都必须单独保密,功能之间的通信连接也必须保密。随着网络规模和复杂性的增长,开发人员必须考虑如何控制对功能的访问,如何确保只有授权用户才能访问这些功能,以及如何将服务与其他服务隔离开来。 安全性是一个关键元素,必须添加到每个功能中而不是之后才加入。必须避免和汇报对功能和数据的未经授权访问。 隐私性 关于隐私性的话题有越来越多的规范。对与每个面向客户系统的开发人员来说,欧盟的GDPR以及美国的HIPPA法规都是重要的考虑因素。 掌控复杂性 开发人员必须花时间考虑如何将复杂计算环境中全部的内容组合在一起。服务应该被封装成一个单一的功能 ,或者少量紧密相关的功能,想要维护这样的规则非常困难。如果一个功能在多个地方实现,那么想要维护和更新就会很困难。当一个功能的实例没有更新会怎样?这个问题非常具有挑战性。 这就意味着,对于复杂应用程序的开发人员来说,维护一个用于显示每个功能所在位置的可视化模型就非常有用了,这样,如果规则或业务需求发生变化,就可以对其进行更新。 通常情况下,开发人员就必须花时间记录他们做了什么,什么时候做了更改,以及这些更改的目的是什么,这样其他人员就不必为了了解一个功能在哪里或者它是如何工作的而费心思去理解成堆的代码。 要成为分布式系统的架构师,开发人员就必须要掌握复杂性。 开发人员必须掌握的方法 开发人员必须掌握分解和重构应用程序体系结构,从团队的角度思考问题,并提高他们在快速应用程序开发和部署(DevOps)方法方面的技能。毕竟,他们必须能够系统地思考哪些功能彼此独立,哪些功能依赖于其他功能的输出来工作。依赖于其他功能的这部分功能最好作为单个服务来实现。将它们作为独立的功能实现,可能会产生不必要的复杂性,导致应用程序性能低下,并且给网络带来不必要的负担。 虚拟化技术涵盖了许多基础 虚拟化是一个比虚拟机软件或容器更大的类别。这两个功能都被认为是虚拟化技术。在目前的应用程序中,至少有7种不同类型的虚拟化技术在使用。虚拟化技术可用于增强用户访问应用程序的方式、应用程序在何处以及如何执行、处理在何处以及如何执行、网络功能怎么样、数据在哪里以及如何存储、安全性如何实现以及管理功能如何实现。下面的虚拟化技术模型可能有助于开发人员理解虚拟化的概念。 图3:虚拟化系统的架构 来源:7层虚拟化模型,VirtualizationReview.com 从软件定义的解决方案角度考虑 对于开发人员来说,从“软件定义的”解决方案的角度来考虑也是非常重要的。这也就是说,将控制从实际的处理中分割出来,这样功能就可以被自动化以及编排了。 有哪些工具和策略可供使用 当开发人员步入这个复杂的世界时,他们不应该觉得自己是独立的。供应商和开源社区提供了许多强大的工具。各种形式的虚拟化技术都可以成为开发人员最好的朋友。 虚拟化技术是你最好的朋友
从服务的角度考虑 这意味着开发人员必须考虑服务以及服务之间如何通信。 定义良好的API (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |