对于云原生数据系统的思考

c++服务器开发 c++服务器开发     2023-03-31     405

关键词:

在设计云原生数据系统时,并没有特定的托管基础设施、编程语言或者设计模式。构建云原生系统有多种多样的方式。让我们来看一看云原生架构应该牢记的设计原则,以及一个优秀的云原生平台具备哪些特征。

一、云原生架构

云原生架构本质上是使用云构建应用程序的设计模式。虽然没有具体的方法来实现这种架构或预定义的云原生设计,但最常见的方法是将应用程序分解为几个微服务,让每个微服务处理不同类型的功能。然后,每个微服务都由一个小团队维护,通常作为容器部署。

让我们来进一步看看云原生架构。

二、拥抱微服务

云原生设计和开发依赖于松耦合的架构,应用程序的不同部分独立开发,独立操作,独立部署,通常使用微服务实现。

可以肯定地说,微服务是云原生系统的基础。通过使用容器,可以将运行时环境及其库、二进制文件和依赖项压缩为有逻辑且易于管理的单元,从而从中受益。因此,应用程序服务可以根据需要存储、复制、传输和使用。

与单体程序不同,微服务由一个个小而独立的服务组成

微服务(或者说松耦合架构)对云计算非常重要。原因有几个,例如它提升了服务的简单性、可扩展性和弹性。让我们来进一步看看这是如何实现的。

使用这种架构,你可以将复杂的应用程序分解为独立的小的模块,使应用程序的开发周期变得简单且易于管理。分离应用程序配置和基本代码也使开发和维护应用程序更加容易。同样,保持核心应用程序与支持服务的分离允许代码库按照自己的速度发展和扩展。

此外,伸缩一个应用程序的各个部分比伸缩整个整体应用程序更容易(也更快)。同样,更新应用程序更容易,因为你只需要更新需要更改的部分(或微服务),而不是再次部署整个应用程序的新更新版本。

拥抱微服务也增加了弹性,使应用程序更加可靠。例如,如果微服务架构中的一个组件发生故障,整个应用程序不会崩溃。它还促进了IaC(代码即基础设施),这反过来为自动化部署铺平了道路(我们稍后将介绍)。最后,微服务架构涉及通过API使用无状态进程和组件,将每个微服务与其他服务隔离,从而提高安全性和效率。

为了确保应用程序遵循松耦合的体系结构,必须避免在不同部分之间形成紧耦合的依赖关系。例如,两个微服务不应该依赖于同一个数据库。如果他们这样做了,你将无法独立更新和操作它们。

三、代码即一切

虽然使用微服务从现代应用程序中受益很重要,但采用自动化实践也很重要。这旨在优化应用程序开发过程,使开发人员和用户都受益。为此,最终目标是实现EaC — 代码即一切。因此,将EaC视为IaC的领先一步,这里说的IaC包括应用程序代码库、基础设施和平台。

这种方法在硬件和软件方面都有许多好处。例如,它有助于在各个级别实施版本控制,并改善部门间的协作。它还促进了不同组件的模块化,并通过及时更新帮助防止漏洞来增强安全性。

云原生数据系统的一个关键方面是使用CI/CD工具在不同级别实现自动化的能力。通过采用DevOps和敏捷原则,你可以得到一些好处,例如更低的运营成本、更好的安全性、更灵活、可扩展性和快速的开发周期。

安全尤其重要。手动处理通常会导致对云原生平台的攻击,但通过自动化实现最佳安全实践可以提高安全性。此外,CI/CD中的SecDevOps允许你在SDLC的早期阶段执行安全测试,以便可以在开发阶段早期处理漏洞。

四、API优先的思考方式

开发人员通常专注于代码优先的开发方式,而不是API优先,但问题是这种方法不是开发现代应用程序的最佳方法。对于云原生数据系统,我们应该鼓励开发人员采用API优先的思考和开发方式,并在此基础上构建软件。这样做有助于在为现代分布式应用奠定基础时节省大量时间和精力。

正如我们前面提到的,云原生数据系统应该遵循微服务架构,其中应用程序的服务是分开的,每个服务都作为一个自主应用程序执行。因此,微服务依赖于API来相互通信和交互。

请记住微服务架构和现代应用程序的流行,API的重要性是显而易见的。此外,API优先的原则也让开发人员获得了微服务模式的所有好处。遵循API优先方法的应用程序可以被视为紧密联系的服务的生态系统,其中来自应用程序的调用和用户界面的调用,它们被视为API消费者。

这种方法有许多优点。例如,它使系统具有高度的可扩展性,并减少了失败几率。它还降低了开发成本,改善了开发体验,并通过加快开发过程加快了上市速度。除了通过API促进用户和应用程序之间的通信之外,它还促进了内部流程的自动化和通信。

五、云原生设计原则

云原生应用通常遵循12要素应用框架中定义的原则,并围绕安全性、弹性(和可用性)、弹性和性能(包括可扩展性)构建。让我们进一步了解这些云原生设计原则。

1.可扩展性
可伸缩性背后的理念是,可以为应用程序和相关服务添加额外的容量,以应对需求和负载的增加。特别是,在设计可扩展性时,应考虑每个应用程序层、如何扩展以及如何避免瓶颈。

在这种情况下,需要考虑三个关键领域:容量、负载和数据。

关于容量,请考虑是否需要扩展各个层,以及是否可以在不影响应用程序可用性的情况下进行扩展。你还需要考虑扩展服务的速度,以及是否可以在不影响运营的情况下在业务服务外的时间缩减应用程序的部署规模。

当涉及到数据时,请考虑是否可以扩展,同时要记住服务的限制,如事务吞吐量和数据库大小。然后,找出如何在保持平台约束的同时对数据进行分区以进一步提高可伸缩性。同样,你需要弄清楚如何高效地使用平台资源。

在负载方面,你需要确定如何改进设计以避免瓶颈,以及如何在流量高峰时使用异步操作来帮助负载平衡。你还需要探索如何使用所选平台的不同速率均衡和负载平衡功能。

确保可扩展性的一种方法是创建自动化流程,以便在需要时扩展、修复和部署系统。您可以设置系统以生成有意义的日志(以及事件),然后将其用作不同自动化活动的挂钩。生成的系统应该能够自动调配基础设施,如机器实例,构建、测试和部署CI/CD管道中的不同阶段,并处理动态可扩展性和运行状况监视和备份。

许多人认为云原生系统应该是无状态的,但这在现实应用中很难实现。由于在分布式应用程序中很难管理状态,所以最好尽可能使用无状态组件。这是因为无状态组件使负载平衡、扩展、修复和回滚更加容易。

2.可用性
可用性是指如果底层操作系统、硬件、网络依赖性或应用程序本身出现了故障,系统仍能对消费者可用的能力。重要原则包括性能、正常运行时间、灾难恢复和备份。

当涉及到性能时,你需要定义可接受的性能级别、如何衡量它们,以及当性能低于可接受级别时应触发的操作或事件。你还需要确定应用程序中最可能导致问题的部分,以及以队列为中心的设计或自动缩放是否有助于解决问题。此外,你需要弄清楚使云原生系统的某些部分异步是否有助于提高性能。

正常运行时间保证也很重要。特别是,你需要定义产品应满足的SLA,以及你选择的云服务是否可能满足这些SLA。同时,在灾难恢复方面,你需要确定在发生故障时如何重建云原生系统,以及在这种情况下可以承受多少数据损失。最后,还需要确定在发生故障时如何处理备份、运行中队列和消息,并确定要将镜像存储在何处以及是否有备份。

最后,在复制方面,你需要确定系统中存在高故障风险的部分以及受故障影响最大的部分。此外,确定是否需要数据副本以及如何防止不可靠数据的副本带来的影响。

3.安全性
云原生数据系统中的安全性是一个非常广泛的话题,涉及很多方面。首先,但也最重要的是,你需要了解以下内容:

保存数据的所在地的当地法管辖区和法律,包括保存度量和故障切换数据的国家/地区

如果是混合云应用程序,如何保护云和企业网络之间的链接

是否能够满足联邦安全的要求

如何控制对云提供商管理门户的访问、处理密码更改以及限制对数据库的访问。

如何处理云供应商和操作系统安全更新和修补程序

4.可管理性
可管理性是指了解系统性能和运行状况以及管理操作的能力。关于云,我们必须考虑两个原则 — 部署和监测。

当涉及到部署时,需要问自己一些问题。例如,考虑如何实现部署的自动化,以及如何在不中断实时系统的情况下修补或重新部署。此外,考虑如何检查部署是否成功,以及在部署失败时如何回滚。同样,部署还包括确定需要的环境数量以及它们需要多少存储和可用性。

同时,对于监控方面,你需要计划如何监控应用程序(打算使用现成的服务还是从头开始开发?)以及将监控数据物理存储在何处。你还需要确定监控计划将产生的数据量,以及如何访问度量日志。类似地,问问自己是否能够承受丢失一些日志数据,以及是否需要在运行时更改监控级别。

5.可行性
最后,可行性包括在时间和预算限制的情况下维护和交付系统。这一原则需要考虑的一些事项是:

是否可以满足SLA?例如,是否有云提供商可以保证需要向客户提供的正常运行时间?
是否拥有构建云应用程序所需的内部经验和技能,或者需要将其交给第三方?
要在收益和成本之间权衡,维持云提供商复杂定价的同时能接受的花费

云原生环境下对“多活”架构的思考

...0事故之后,多活也会出现在casestudy的列表之内。在云原生比较流行的今天,很多公司都会选择某云服务厂商来部署公司的相关服务。当公司规模较小时,一般情况下公司的架构会像 查看详情

微博云原生技术的思考与实践

...在越来越多的企业开始全面拥抱云计算,开始关注云原生技术。从管理物理数据中心到使用云主机,我们不用再关心基础运维。从云主机到 Kubernetes容器,我们不用再关心机器的管理。云上抽象层级越高,就越少... 查看详情

微博云原生技术的思考与实践

...在越来越多的企业开始全面拥抱云计算,开始关注云原生技术。从管理物理数据中心到使用云主机,我们不用再关心基础运维。从云主机到 Kubernetes容器,我们不用再关心机器的管理。云上抽象层级越高,就越少... 查看详情

如何设计一个复杂的业务系统?从对领域设计云原生微服务中台的理解开始

大年初一,看完中国队1:3越南队的比赛,在思考中国足球每况愈下的深层次原因之外,不禁回想起这几年做过的一些大型企业数字化转型项目,有得有失,最终回归到本源“如何设计和实施一个复杂软件工程”这个问题上,趁着... 查看详情

对于云原生时代的后端业务开发和项目系统学习,选goorjava?(代码片段)

对于Go的一些思考沉淀前言开山之词:简洁度比较大不相同:Go的独特之处Go的并发Go的指针Go的性能分析器Go的类型Go的CGoGo的将函数作为参数瑕疵劣势:Go的不足没有泛型没有注解依赖管理百家争鸣:主流语言对比C... 查看详情

基于云原生的集群自愈系统flinkclusterinspector

...并且在晚上业务高峰期,整个热点持续时间会超过60min,对于业务以及对于平台影响是比较大的。这里的影响是 查看详情

揭秘传统数据库转型云原生的迅猛趋势

...3.庞大的技术生态4.使用案例六、总结七、文末福利前言对于企业来讲,保护敏感信息和数据资产尤为重要。企业使用数据库保存金融数据、交易记录、商业事务和账号 查看详情

云原生中间件--redisoperator篇

...进程在全球范围内,进行得如火如荼。以应用为中心,云原生的相关技术和方案,已经覆盖了非常多的领域。除了应用的运行时以外,最靠近应用,也是应用依赖性最大的范围,就是周边的中间件、数据库、大数据等技术。在云... 查看详情

解密云原生---看企业云的未来

...的架构平台重建下一代应用,是我们必须要思考的课题。对于大部分的企业来说,IT是有历史包袱的。因为原来的IT应用部署模式,都是竖井式的,不同的应用都由不同的软件开发商提 查看详情

云原生演进趋势下传统数据库升级实践

...。数据库跟以前那有什么不一样呢?什么是所谓的云原生数据库呢?作为使用数据库的开发者,对数据库的需求有什么变化?如今使用数据库我们一般会提什么样的诉求?本文将一一为大家解答。一、概述云... 查看详情

云原生演进趋势下传统数据库升级实践

...。数据库跟以前那有什么不一样呢?什么是所谓的云原生数据库呢?作为使用数据库的开发者,对数据库的需求有什么变化?如今使用数据库我们一般会提什么样的诉求?本文将一一为大家解答。一、概述云... 查看详情

云原生的定义(代码片段)

...以标准化云服务的提供方式衔接云厂商和客户。这种方式对于客户而言降低了上云和跨云迁移的成本,让客户始终保有和云厂商议价的能力;对云厂商而言,因为客户跨云迁移的成本低,所以只要能提供性价比更高的云服务,就... 查看详情

云原生转型:规模化演进与文化思考

所谓转型,是指事物的结构形态、运转模型和人们观念的根本性转变过程。PS:源于所见所闻所习所思总结而成,所代表的场景比较有限,可能不会适用于多数场景。上周末,我在思考『大型组织如何进行DevOps... 查看详情

云原生转型:规模化演进与文化思考

所谓转型,是指事物的结构形态、运转模型和人们观念的根本性转变过程。PS:源于所见所闻所习所思总结而成,所代表的场景比较有限,可能不会适用于多数场景。上周末,我在思考『大型组织如何进行DevOps... 查看详情

自动化离线交付在云原生的应用和思考

本文不谈论具体的技术和方案,在对于每一个产品都有其特殊性存在。单一的产品解决方法并不适合所有的产品。但是我们可以提供一种思路甚至我们曾经在某个技术点走的弯路,旨在为各位在离线设计提供更多案例。作者:京... 查看详情

自动化离线交付在云原生的应用和思考

...:京东科技王晓飞前言本文不谈论具体的技术和方案,在对于每一个产品来讲,都有其特殊性存在。单一的产品解决方法并不适合所有的产品。但是我们可以提供一种思路,一种通用方法,甚至我们曾经在某个技术点走的弯路,... 查看详情

kubernetes学习总结(10)——何为云原生,与kubernetes是什么关系

...的模式下,我们更多的是创建一个较大的应用,对于它的创建、运行、升级、维护都是比较痛苦的事情,而当下云计算或是云的概念大家都已经不再陌生(谁还没一台云主机服务器呀,用于创建自己的博客或... 查看详情

kubernetes学习总结(10)——何为云原生,与kubernetes是什么关系

...的模式下,我们更多的是创建一个较大的应用,对于它的创建、运行、升级、维护都是比较痛苦的事情,而当下云计算或是云的概念大家都已经不再陌生(谁还没一台云主机服务器呀,用于创建自己的博客或... 查看详情