都要知道的-云原生景观图和最佳实践

云原生,使组织能够基于云计算中PAYG(pay-as-you-go ,按需付费)定价模型来构建现代应用程序。云原生应用程序,被设计为松耦合且可扩展,可在容器化平台上运行,它们托管在动态环境中,例如公共云,私有云和混合云。

云原生具有以下优点:

  • 加快项目部署
  • 更好的服务/产品
  • 灵活采用行业最佳实践
  • 具有弹性,可观察性,可靠性,和可维护性
  • 软件开发生命周期 (SDLC)自动化
  • 与环境无关, 解决了运行环境不一致所带来的问题

云原生景观图

Cloud-Native Computing Foundation(CNCF)是一个开源软件基金会,旨在鼓励技术社区采用Cloud Native计算来构建和支持可用于云的生态系统。

CNCF与Redpoint Ventures和Amplify Partners的合作开发了云原生景观。它标准化了技术,服务和工具,例如容器化,编排,CI/CD等。组织可以利用此云原生景观,来设计和开发云原生应用。

云原生景观图由四个主要层和两个支持层组成。每一层进一步细分为,由工具和服务组成的云原生应用程序。

应用程序定义和开发层(Application Definition & Development)

该层重点介绍应用程序开发下的技术和工具,其中包括构建/部署自动化,镜像构建,数据发布和存储。它使团队能够开发响应式,弹性和可扩展的应用程序。

首先,让我们简化一些满足特定要求的通用应用程序。

基于服务的应用程序( Service-based Application ):

这些应用程序,使用微服务架构通过API公开业务功能,这是一种常见方法。每个服务都包含特有的持久性存储,例如数据库,缓存等。

批量处理的应用程序( Batch Application):

这些是短暂的可执行文件,可使用最少的输入来处理数据。这些可以由事件触发或从其他应用程序运行。任务可以是数据处理,基于时间的通知/更新等。

基于消息的应用程序( Messaging-based Application ):

这些应用程序使用异步通信模式,可以在其中发布和订阅数据。事件驱动的体系结构是此类应用程序使用的通用方法。

多层应用程序( Multi-Tier Application ):

此类应用程序分布在多个物理/虚拟层中。一个应用程序可以具有多个逻辑层,具体取决于应用程序体系结构。该应用程序可以利用基础架构即服务(IaaS),平台即服务(Paas),CI/CD等优势。

CNCF在每个领域提供广泛的技术,产品和服务,例如:

  • 持续集成(CI)和持续交付(CD) 使构建,打包,测试和部署过程自动化。它使开发团队更加敏捷,更频繁,更可靠地交付。工具包括Jenkins,Bamboo,AWS代码流水线等。
  • 流和消息传递(Streaming & messaging) 是基于pub/sub模型的中间件服务,可在不同节点之间进行异步通信。一些广泛使用的产品是RabbitMQ,Kafka,Beam,Amazon Kinesis等。
  • 应用程序定义和镜像构建(Application definition &image build ) 是一个核心构建块,在自动部署中起着重要作用。它涉及应用程序的打包, docker说明,环境信息等。一些流行的工具包括Helm,Packer,Chef等。
  • 数据库(Databases) 中提供了广泛的开源和商业数据库产品,例如Cassandra,Couchbase,Redis,MongoDB等。

编排和管理层(Orchestration & Management )

编排通过使用正确的工具和服务集自动触发和管理工作流,有助于实现可伸缩性和弹性。该层涵盖与通信和容器编排相关的技术,服务和工具。

  • 编排和调度( Orchestration & scheduling ): 当管理容器成为繁琐的任务时,调度和编排便成为了问题。Orchestrated平台和工具可提供自动扩展,回滚,负载均衡,监视等功能,从而实现操作敏捷性,帮助管理容器集群。Kubernetes,Docker Swarm,Amazon ECS是一些流行的Orchestrated平台和服务。
  • 服务发现( Coordination and service discovery ): 云原生应用程序可以具有多个微服务,因此动态配置和发现它们至关重要。有一些工具(例如Eureka,ZooKeeper,Nacos等)可以帮助动态配置和发现微服务。
  • 远程过程调用(RPC): 使应用程序可以远程调用客户端/服务器应用程序中使用的过程/功能。有一些工具(例如Apache Thrift,gRPC和TARS等)可帮助实现此技术。
  • 服务代理( Service proxy ): 是处理服务间通信。有一些工具(例如NGINX,envoy,NOVA等)可帮助实现服务代理。
  • API网关: 为API调用提供了一个入口点,将请求重定向到相应的服务,并返回适当的结果。它使身份验证,负载均衡,安全性和监视易于处理。MuleSoft,Kong,3SSCALE是流行的API网关。
  • 服务网格( Service mesh ): 管理服务代理(sidecar)之间的网络。它有助于保护和监视微服务。Istio,Consul和Linkerd是一些常用的Service mesh工具。

运行时层(Runtime)

在云原生中,可以动态配置运行时资源,例如计算,存储和网络。CNCF推荐了一组工具,平台和服务,他们可以满足云原生需求,并提供诸如可伸缩性,高性能和容错性之类的属性。

  • 云原生存储(Cloud native storage) 提供分布式,虚拟化,弹性存储。提供了各种开源和商业产品,例如Minio,Rook,Rind,NetApp,Amazon S3等。
  • 容器运行时(Container runtime) 运行容器并管理容器镜像。有多个可用的容器运行时软件,例如Docker,Contained,Firecracker,lxd等
  • 云网络(Cloud native networking) 可实现网络资源的编排和管理。它包括网络资源的扩展,分配和释放。例如 CNI, Network Service Mess, ,Kube-OVN,Ligato等。

供应层(Provisioning)

基础架构即代码,可实现自动扩展和按需资源配置。这有助于更快地进行配置,开发,部署和测试。有一些配置工具可帮助维护整个应用程序环境中的标准,合规性,策略和安全性。

  • 自动化和配置管理 (Automation &configuration ) 有助于自动化基础结构和部署。Terraform之类的工具,使用配置文件来自动进行多个云环境中的基础架构配置。Ansible之类的工具,能够提供应用程序部署和服务内编排。
  • 容器仓库(Container Registry) 是Docker镜像的集中存储库,应用程序可以在其中存储和检索镜像。组织可以使用公共(Docker Hub)或私有仓库来管理镜像。有一些常用的镜像仓库,例如Docker Registry,Kraken,Amazon ECR等。
  • 安全性和合规性 ( Security &compliance ) 是云供应商和云原生应用程序团队的共同责任。应用程序团队可以利用最佳实践和工具来保护应用程序和数据的安全,例如TUF,Clair,kube-hunter,terrascan等。
  • 密钥管理(Key management) 是一种身份和访问管理(IAM)中使用的密钥加密方法 ,以确保只有授权的用户才能访问该应用程序。 有一些有用的IAM工具,可帮助为云原生应用程序提供加密方法,例如CyberArk,ORY,Keycloak。

可观察性与分析(Observability &Analysis)

应用程序应提供适当的数据以使系统可观察。日志,指标,运行状况检查,分布式跟踪等可以用于数据分析,问题定位和发出警报。

以下是一些针对云原生的可观察性和分析工具。

  1. 监视( Monitoring ): – Prometheus,ZABBIX,Dynatrace,Nagios。
  2. 日志记录( Logging): -logStash,Splunk,LOGIQ
  3. 跟踪( Tracing ): – Spring Cloud Sleuth,Zipkin
  4. 混沌工程( Chaos engineering): – Litmus, Chaos Mesh, Gremlin

云原生最佳实践

设计和开发云原生应用程序的方法,模式和方法种类繁多,例如DevOps,Agile,微服务等。让我们介绍其中的一些。

  • 十二要素应用程序是一种设计和开发现代应用程序的方法。除了十二个因素之外,还包括三个因素,这些因素增加了应用程序开发的感知力,例如安全性,API和遥测。

  • 充分利用微服务,容器,业务流程和云供应商提供的服务等,这些有助于实现按需资源配置,更快的开发,扩展,使应用程序从开发到部署的整个生命周期自动化。
  • 利用无服务器技术的强大功能,使我们无需管理服务器即可构建和运行应用程序。团队可以专注于开发应用程序,而不是基础架构管理,例如服务器配置,扩展,后端组件。

无服务器技术的好处是:

-无需配置/维护服务器。

-自动灵活缩放。

-高可用性和容错能力。

  • 通过使用多云环境的兼容工具,来减少被供应商限制,帮助应用程序实现可移植性并支持多云基础架构迁移。
  • 设计模式,为云原生应用程序中的常见设计和开发问题提供了解决方案。以下是一些有用的设计模式资源的链接。

https://docs.microsoft.com/en-us/azure/architecture/patterns/

https://patterns.arcitura.com/cloud-computing-patterns

http://en.clouddesignpattern.org/index.php/Main_Page

译文链接:https://dzone.com/articles/cloud-native-standpoint-landscape-and-best-practic

K8S中文社区微信公众号

评论 抢沙发

登录后评论

立即登录