zoukankan      html  css  js  c++  java
  • 为何选择云原生?

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


    01 何为云原生

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

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

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

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


     

    02 云原生应用的优势

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

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

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

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

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

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

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


     

    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

  • 相关阅读:
    iOS 打电话 发邮件
    iOS
    varchar(50)能存50个汉字
    CSS 内联元素
    mysql修改用户密码的方法
    PHP error_reporting(0)
    索引数组和关联数组
    ubuntu文件夹右键没有共享选项
    Ubuntu安装samba的问题
    安卓.开发规范(高级)
  • 原文地址:https://www.cnblogs.com/datastax/p/14059322.html
Copyright © 2011-2022 走看看