当前位置: 首页 > 科技观察

云原生数据系统的设计思路

时间:2023-03-14 19:06:10 科技观察

译者|鲁新旺审稿人|孙书娟在设计云原生数据系统时,没有特定的托管基础??设施、编程语言或设计模式。构建云原生系统的方法有很多种。下面我们就来看看云原生架构应该牢记的设计原则,一个好的云原生平台有哪些特点。1.云原生架构云原生架构本质上是一种使用云构建应用程序的设计模式。虽然没有特定的方法来实现此架构或预定义的云原生设计,但最常见的方法是将应用程序分解为多个微服务,并让每个微服务处理不同类型的功能。然后每个微服务都由一个小团队维护,通常部署为容器。让我们仔细看看云原生架构。2.拥抱微服务云原生设计和开发依赖于松散耦合的架构。应用程序的不同部分是独立开发、运行和部署的,通常使用微服务来实现。可以肯定地说,微服务是云原生系统的基础。通过使用容器,您可以受益于将运行时环境及其库、二进制文件和依赖项压缩为逻辑和可管理的单元。因此,应用服务可以按需存储、复制、传输和使用。与单体程序不同,微服务由小型独立服务组成。微服务(或松耦合架构)对于云计算非常重要。有几个原因,例如它提高了服务的简单性、可扩展性和弹性。让我们仔细看看这是如何完成的。使用此架构,您可以将复杂的应用程序分解为小的独立模块,使应用程序开发周期变得简单且易于管理。分离应用程序配置和基本代码也使开发和维护应用程序更加容易。同样,将核心应用程序与支持服务分开可以让代码库按照自己的节奏发展和扩展。此外,扩展应用程序的各个部分比扩展整个单体应用程序更容易(也更快)。此外,更新应用程序更容易,因为您只需要更新需要更改的部分(或微服务),而不是再次部署整个应用程序的新更新版本。采用微服务还可以提高弹性,使应用程序更加可靠。例如,如果微服务架构中的一个组件发生故障,则整个应用程序不会崩溃。它还促进了IaC(代码作为基础设施),这反过来为自动化部署铺平了道路(我们稍后会谈到)。最后,微服务架构涉及通过API使用无状态流程和组件,将每个微服务与其他服务隔离,提高安全性和效率。为了确保应用程序遵循松散耦合的体系结构,有必要避免在不同部分之间形成紧密耦合的依赖关系。例如,两个微服务不应该依赖同一个数据库。如果他们这样做,您将无法独立更新和操作它们。3.代码就是一切虽然使用微服务从现代应用程序中获益很重要,但采用自动化实践也很重要。这旨在优化应用程序开发过程,使开发人员和用户都受益。为此,最终目标是实现EaC——CodeisEverything。因此,将EaC视为领先于IaC的一步,它包括应用程序代码库、基础设施和平台。这种方法在硬件和软件方面都有很多好处。例如,它有助于在每个级别实施版本控制并改善部门之间的协作。它还促进了不同组件的模块化,并通过及时更新帮助防止漏洞来增强安全性。云原生数据系统的一个关键方面是能够使用CI/CD工具在不同级别进行自动化。通过采用DevOps和敏捷原则,您可以获得更低的运营成本、更高的安全性、更高的灵活性、可扩展性和更快的开发周期等优势。安全尤为重要。手动处理通常会导致对云原生平台的攻击,但通过自动化实施最佳安全实践可以提高安全性。此外,CI/CD中的SecDevOps允许您在SDLC的早期执行安全测试,以便可以在开发阶段的早期解决漏洞。4.API优先的思维方式开发人员通常专注于代码优先开发而不是API优先,但问题是这种方法并不是开发现代应用程序的最佳方式。对于云原生数据系统,我们应该鼓励开发者采用API优先的思维方式和开发方式,并以此为基础构建软件。这样做可以在为现代分布式应用程序奠定基础时节省大量时间和精力。正如我们前面提到的,云原生数据系统应该遵循微服务架构,其中应用程序的服务是分离的,每个服务作为一个自治应用程序执行。因此,微服务依赖于API来相互通信和交互。考虑到微服务架构和现代应用程序的流行,API的重要性是显而易见的。此外,API优先原则允许开发人员获得微服务模型的所有好处。遵循API优先方法的应用程序可以被视为紧密耦合服务的生态系统,其中来自应用程序的调用和来自用户界面的调用被视为API消费者。这种方法有很多优点。例如,它使系统具有高度可扩展性并减少失败的机会。它还可以降低开发成本,改善开发体验,并通过加快开发过程来加快上市时间。除了通过API促进用户和应用程序之间的通信之外,它还促进了内部流程的自动化和通信。5.云原生设计原则云原生应用程序通常遵循12因素应用程序框架中定义的原则,并围绕安全性、弹性(和可用性)、弹性和性能(包括可扩展性)构建。让我们仔细看看这些云原生设计原则。1.可扩展性可扩展性背后的理念是可以向应用程序和相关服务添加额外的容量,以应对需求和负载的增加。特别是,在设计可扩展性时,要考虑每个应用程序层,如何扩展以及如何避免瓶颈。在这种情况下,需要考虑三个关键领域:容量、负载和数据。关于容量,考虑是否需要扩展各个层,以及这是否可以在不影响应用程序可用性的情况下完成。您还需要考虑可以多快地扩展服务,以及是否可以在不影响运营的情况下缩减业务服务之外的应用程序部署。谈到数据时,请考虑是否可以扩展,同时牢记服务的限制,例如事务吞吐量和数据库大小。然后,了解如何对数据进行分区以进一步提高可扩展性,同时保持平台限制。同样,您需要弄清楚如何有效地使用平台资源。在负载端,您需要确定如何改进设计以避免瓶颈,以及如何在流量高峰期间使用异步操作来帮助负载平衡。您还需要探索如何使用所选平台的不同速率平衡和负载平衡功能。确保可扩展性的一种方法是创建自动化流程以根据需要扩展、修复和部署系统。您可以设置系统以生成有意义的日志(以及事件),然后可以将其用作不同自动化活动的挂钩。生成的系统应该能够自动配置机器实例等基础设施,构建、测试和部署CI/CD管道中的不同阶段,并处理动态可扩展性和健康监控和备份。许多人认为云原生系统应该是无状态的,但这在实际应用中很难实现。由于在分布式应用程序中很难管理状态,因此最好尽可能使用无状态组件。这是因为无状态组件使负载平衡、缩放、修复和回滚更加容易。2.可用性可用性是在底层操作系统、硬件、网络依赖性或应用程序本身出现故障时,系统保持对消费者可用的能力。重要的原则包括性能、正常运行时间、灾难恢复和备份。在性能方面,您需要定义可接受的性能水平、如何衡量它们,以及当性能低于可接受水平时应触发的操作或事件。您还需要确定应用程序中最有可能导致问题的部分,以及以队列为中心的设计或自动缩放是否有帮助。此外,您需要弄清楚使云原生系统的某些部分异步是否有助于提高性能。正常运行时间保证也很重要。特别是,您需要定义产品应满足的SLA,以及您选择的云服务是否可能满足这些SLA。同时,在容灾方面,你需要确定在发生故障时如何重建云原生系统,以及这种情况下可以容忍多少数据丢失。最后,您需要决定在发生故障时如何处理备份、飞行队列和消息,并决定将镜像存储在何处以及是否有备份。最后,在复制方面,您需要确定系统中故障风险高的部分以及受故障影响最大的部分。此外,确定是否需要数据副本以及如何防止不可靠数据的副本。3.安全云原生数据系统的安全是一个非常广泛的话题,涉及到很多方面。首先,但最重要的是,您需要了解以下内容:保存数据的地方司法管辖区和法律,包括保存指标和故障转移数据的国家如何在混合云应用程序的情况下保护云和企业网络之间的链接可以满足联邦安全要求如何控制对云提供商管理门户的访问、处理密码更改以及限制对数据库的访问。如何处理云提供商和操作系统的安全更新和补丁4.可管理性可管理性是指了解系统性能和健康状况以及管理操作的能力。对于云,我们要考虑两个原则——部署和监控。谈到部署时,有一些问题要问自己。例如,考虑如何实现部署自动化以及如何在不中断实时系统的情况下对其进行修补或重新部署。此外,还要考虑如何检查部署是否成功,以及如果失败如何回滚。同样,部署包括确定需要多少环境以及它们需要多少存储和可用性。同时,对于监控,您需要计划如何监控您的应用程序(您是要使用现成的服务还是从头开发它?)以及您将物理存储监控数据的位置。您还需要确定您的监控计划将生成多少数据以及如何访问指标日志。同样,问问自己是否可以承受丢失一些日志数据,以及是否需要在运行时更改监控级别。5.可行性最后,可行性包括在时间和预算限制内维护和交付系统。这个原则需要考虑的一些事情是:能否满足SLA?例如,是否有云提供商可以保证需要提供给客户的正常运行时间?您是否具备在内部构建云应用程序所需的经验和技能,或者您是否需要将它们移交给第三方?平衡收益和成本,在接受成本的同时保持云提供商的复杂定价六、优秀的云原生数据平台的特征你已经知道创建云原生平台因素时应该考虑的原则和架构考虑因素.现在让我们看看一个好的平台应该提供哪些更多的功能。1.成本效益完全托管的云服务和本地/自管理服务的成本确实存在很大差异。但是,前者的弹性和大多数云平台遵循的按使用量付费的模式使得可以在不浪费资源(以及成本)的情况下以合适的规模运行。这也意味着您无需担心为未使用的资源支付额外费用,甚至无需处理容量规划。此外,由于云平台的多租户,服务提供商可以以比自我管理服务低得多的成本为其服务定价。2.按使用量付费如上所述,大多数云平台遵循按使用量付费的模式,这意味着您只需为使用的内容付费,而不是为提供的内容付费。这些资源既可以是高级资源(例如API请求),也可以是低级资源(例如内存或CPU使用率)。因此,与本地数据的情况不同,您无需为可能根本不会使用的许可内核付费。2.弹性和可扩展性一个好的云原生平台还包括通过简单的API调用或点击来扩展或缩减服务的能力。如果该平台能够根据定义的策略自动扩展服务,那就更好了。此外,由于预先管理的容量规划和弹性扩展,可扩展性限制仅在最极端的情况下才会暴露。4.可用性一个高效的云原生平台也是由其高可用性定义的,旨在处理大多数故障。例如,大多数平台提供至少99.95%的服务水平协议,这意味着每年最多只有4.5小时的停机时间。但实际上,您可以要求更高的可用性。5.多租户多租户有两个好处——可管理性和规模经济——大多数云原生服务都从中受益。首先,您可以使用像S3这样的服务为您的客户提供最佳用户体验,它以查询或请求而不是CPU的形式提供服务。所有租户都隔离得很好,以至于用户不知道同一个物理系统也在为其他租户服务。是的,在某些情况下,用户必须购买内存和CPU等专用计算资源(AWSAurora就是这种情况)。但是,存储和网络等底层基础设施仍然是共享的。6.性能优化最后,为了能够服务于不同类型的客户工作负载,您的系统应该在多个维度上具有可扩展性。应在整个基础架构(包括硬件、操作系统和应用程序)中调整和优化约束。此外,在管理系统的情况下,应该有一个严格的生产反馈机制。该系统还应该能够分析和学习不同的可伸缩性和性能相关事件,并推出改进以优化性能。原文链接:https://dzone.com/articles/design-considerations-for-cloud-native-data-system译者介绍:卢新望,社区编辑,编程语言爱好者,对数据库、架构、云有浓厚兴趣本国的。