为什么选择云原生?

在本文中,咱们将介绍何为云原生、云原生应用的优点、云原生应用的基本要素以及在云原生应用中如何管理数据。前端


 

01 何为云原生

数据在爆炸增加,客户们的需求日益增长,而做为开发者的你必须尽快知足他们。数据库

经过云原生程序,你能够完全利用微服务、容器、编排及自动化。在存储、stream及APIs之间灵活自如的数据访问,能够帮助你得到弹性、扩展性和云计算的适应力。编程

云原生应用是为云环境而设计的,以便可以利用其独特的伸缩能力。云原生应用一般由几个松散耦合的服务组成。安全

云原生应用充分利用了前文提到的云计算技术,从而提高了开发周期的速度、灵活性和创新能力。有了这些,软件开发过程当中的迭代次数变得更容易预期和掌控。服务器


 

02 云原生应用的优点

根据云原生计算基金会(Cloud Native Computing Foundation, aka, CNCF):“在像是公有云、私有云和混合云这样的现代且快速变化的环境中,云原生技术使得企业具备开发和运行可扩展应用的能力。网络

容器(container)、服务网格(service meshes)、微服务(microservices)、不可变基础设施(immutable infrastructure)以及声明式API(declarative APIs)都简化了这一过程。”架构

其优点包括“松散耦合的系统具备良好的从故障中恢复的能力,而且易于管理和观测。当这些系统与可信赖的自动化技术结合,工程师们能够最大限度地减小重复劳动,常常性地、可预见性地创造重大改变。”app

  • 从故障中恢复:应用能够在硬件、网络和软件出现瑕疵时继续工做。
  • 易于管理:应用很是容易配置,并能快速适应不断变化的运维条件和环境。
  • 易于观测:应用埋点来收集指标数据(metrics)和日志(logs),从而提供可指导行动的重要信息。
  • 常常性的改变:模块化的应用可让开发者对单独模块快速作出增量改变。
  • 可预见性的改变:应用和配置都支持源代码管理,从而保证部署和配置改变的可审计性及可重复性。
  • 最少的重复劳动:应用的部署和管理是自动化的,这不只减小了运维人员的工做量,也使得运维人员能够更全面地管理系统。

开发云原生应用,开发者须要从企业文化和工做流程、系统总体架构、全栈的技术选择这三方面有一个思惟的转变。框架

不管你是正要为你的初创公司推出第一款app,仍是正要改造一个传统的单体应用使之适应现代需求,云原生应用所能提供的量身定作的、个性化的体验都会助你一臂之力。less

采用云原生应用可使你的终端客户和企业客户感到愉悦,而且他们可以以他们可能历来没想到过的方式充分利用他们所拥有的数据。


 

03 云原生应用的基本要素

微服务

这些小的、松散耦合的服务有助于提高开发生命周期中的敏捷性(agility)和独立性。多种无状态应用的实例提供从故障中恢复的能力、具备弹性的伸缩能力以及低风险的系统演进。

编程语言和架构

开发团队能够自由选择最适用于他们应用的功能的工具。当访问数据源时,多种选项可供选择,包括从底层drivers、抽象驱动和访问语言的框架,直至更高层的多种数据API。

函数

业务逻辑能够经过简单的函数来表达。借助于无服务器架构(Serverless)的框架或者云服务商的Serverless平台,这样的函数不要求完整的操做系统,能够比微服务的部署和伸缩容易得多。

APIs

像是REST、GraphQL和gRPC这些定义良好的接口,是由微服务以及第三方“做为服务(as a services)”的相关产品提供的。这些接口提高了开发速度,并促进了开发团队的合做。

数据

数据库、数据服务、流(streaming)以及消息平台使得数据能够在不一样的微服务和持久层间流动。

容器

微服务常常被打包和部署成Docker images,从而实现可迁移性,并优化资源的开销。

编排

容器由像是Kubernetes这样的编排框架进行管理,从而实现自动化的部署、运维、伸缩以及大规模应用的从故障中恢复的能力。

监控

分布式应用会暴露出新的故障域(fault domains),因此团队每每会使用相似Prometheus的中心监测系统,从而能够在一个视图监控整个系统。

安全

安全层传输协议(TLS)、OAuth、OIDC、JWTs、网络身份提供者(identity providers)、API网关以及自动的容器修补提供了新机制来应对攻击面(attack surface)的安全风险。

持续集成/持续交付工具

应用的代码和所需的基础架构(称为“基础架构即代码”)会由像是Git这样的源代码管理系统托管,从而经过自动化的开发、测试、生产的流程,实现快速迭代。


 

04 在云原生应用中如何管理数据

考虑到可用的设计选择和数据存储方案的多样性,其实有多种方法能够用来管理数据。咱们观察到,这其中包括了几种最多见的模式。

  • 无状态微服务与外包的数据持久化机制

微服务一般将存储状态的责任外包给一个持久化的机制,好比一个专门的块存储卷(block storage volume)、一个分布式的数据库集群,或是一个数据服务。不论使用哪一种存储策略,微服务中的每个服务都应该控制其自身数据的访问权。

  • 经过APIs、驱动以及架构来访问数据

当与Cassandra这样的分布式数据库交互时,最简单的访问数据的办法就是经过GraphQL、REST、或gRPC中描述的API。这种交互模式适用于前端应用、无服务器架构(serverless functions)或是微服务。

须要更多控制与后台数据库交互的微服务能够直接用驱动,或是像Spring、Quarkus、Django、Vue.js这样的框架来辅助数据交互。

  • 经过streaming和变更数据捕获来管理数据流

云原生架构也须要解决数据在服务和APIs之间的流动问题。数据有可能来自streaming以及像Kafka这样的消息系统,流向为微服务提供数据的权威来源的Cassandra系统。

变更数据捕获(Change Data Capture, aka, CDC)能够实现数据从Cassandra向其它服务或用于进一步分析处理的数据湖流出。

 

References:

    https://www.datastax.com/cloud-native