云原生应用和微服务发展主流趋势
Posted 分布式应用运行时
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生应用和微服务发展主流趋势相关的知识,希望对你有一定的参考价值。
今天谈下对为微软开源的Dapr框架的初步理解,实际上对于Dapr去年就经常看到相关的新闻和技术材料,但是由于是微软发布的开源产品一直没有引起我重视,最近又经常看到Dapr这个微服务框架,才仔细去学习了相关的资料。
微软Dapr框架概述
Dapr 是微软主导的云原生开源项目,2019年10月首次发布,到今年2月正式发布 V1.0 版本。在不到一年半的时间内,github star 数达到了 1.2 万,超过同期的 kubernetes、istio、knative 等,发展势头迅猛,业界关注度非常高。
Dapr 这个词是是 「Distributed Application runtime」的首字母缩写,非常精炼地解释了 dapr 是什么:dapr 是一个为应用提供分布式能力的运行时。
什么是 Runtime
Runtime 是一个抽象的概念,字面意思是程序运行的时候。一般是指用来支持程序运行的实现。描述的是程序正常执行需要的支持:库、命令和环境等。
常见的 runtime 为程序提供的支持
语言 runtime(C/Goang…)操作系统:交互,垃圾回收,并发控制等 .NET runtime: 虚拟机 容器运行时:namespace,cgroup 等
容器运行时,就是容器运行起来需要的一系列程序和环境。比如如何使用 namespace 实现资源隔离,如何使用 cgroup 实现资源限制,这些都是容器运行时需要提供的实现。
什么是 Distributed Application Runtime
Dapr 所提供的「分布式应用运行时间」,是应用程序运行所需分布式能力的实现,这些能力涵盖服务通信、数据持久化、外部 binding,pub-sub 等等。比如服务调用需要有容错重试机制,比如一个数据持久化操作希望使用乐观锁,比如发布消息是要求有投递保证。
长期以来,这些功能的适配都是集成在业务代码里的。dapr 创新之处是将这些功能,从原来 application runtime 中拆分出来,作为一个独立的 runtime。dapr runtime 也满足上面说到的 runtime 的特征。
简单总结就是:
Dapr是一种可移植的,事件驱动的分布式运行时,企业开发者通过它可快速地构建弹性的、有状态或无状态的微服务应用,这些应用可运行在云或边缘,并支持语言与框架的多样性。同时开发人员只需要关注业务功能和逻辑的实现,而对于应用本身的底层高可用性,可靠性和弹性伸缩能力并不需要去关注,而由云原生平台来解决。
Dapr本身是跨语言, 跨框架, 跨环境的。Dapr是平台无关的,这意味着你可以在本地、任何Kubernetes集群以及其他集成Dapr的托管环境中运行,这可以让你的微服务应用运行在云或边缘节点上。使用Dapr,你可以使用任何语言、任何框架构建你的微服务应用,并将它运行在任何环境中。
Dapr架构
Dapr 的设计是典型的分层架构,其核心理念,是利用抽象层来实现应用关注点的分离,用以降低分布式应用的复杂性。在 dapr 的架构中,核心的三个组成部分:
API
Building Blocks
Components
对于这个图,我不准备引用官方文档的一些说明,从Dapr的分层架构上,可以简单地理解为北向接口和能力开放,内部业务组件和逻辑实现,南向底层能力适配三个方面的内容。
对于最上层的API层是最容易理解的,即将内部组件能力发布为API接口服务,既可以是Http Rest API接口,也可以是Rpc接口,而且可以做到灵活发布给前端应用使用。
对于Building Blocks,除了架构图里面谈到的状态管理,资源绑定,发布订阅,可观测性等能力外,更加重点是是和能力绑定在一起的核心业务组件和功能实现。也就是Building Blocks仅仅是核心逻辑组件实现附属的Sidecar能力。核心组件能力如何实现呢?你仍然可以按照传统的编程语言来实现你的核心业务规则和逻辑。
对于Components层,实际是一个关键,核心就是提供和底层云原生基础设施,和边缘端的对接和适配能力。这个能力从最早期的云原生基础设施资源层,进一步抽象到当前主流的PaaS技术服务层,或者理解为前面谈到的Runtime运行时能力对接,典型的就是数据库,中间件,消息,缓存等各种能力对接。
开发模式和API调用
上图实际是对Dapr开发机制的一个关键说明。
既开发人员重点是开发业务功能和逻辑实现,而且整体应用的开发以及从资源层抽象到服务层,既开发人员直接对接的是服务和运行时,而不是自己去安装和配置资源。
你原来需要数据库能力,原来思路是你自己去找到资源并安装配置数据库,而新架构模式下思路是你直接使用数据库服务,在底层数据库资源和功能开发之间通过Components来进行适配,这个适配不仅仅是从资源层到服务层的抽象,更加重要的是可以扩展云原生下多云服务适配能力。
对于API接口的开发和暴露,同样对于组件来讲暴露Rest API接口或RPC,而对于前端应用开发既可以调用标准的Http Rest API接口,也可以在前端应用中下发一个轻量的SDK包作为Sidecar适配,彻底实现前端和后端之间的解耦。
Dapr和ServiceMesh,ServerLess的融合
对于Dapr,个人更加倾向于将其理解为ServiceMesh和ServerLess能力的融合。
Dapr和ServiceMesh在微服务治理里面都是通过Sidecar边车模式来实现。但是可以看到对于ServiceMesh更多是偏微服务治理方面的能力,包括了注册发现,限流熔断,安全,负载均衡等能力,这种能力可以理解为各个微服务之间的横向交付能力。
但是对于Dapr来讲,不仅仅是提供微服务间的横向交付能力,还提供微服务本身在纵向将资源,服务,接口,前端应用分层后的纵向交互能力。即Dapr提供了完整的分布式运行时能力,这个能力提供既提供了南向对于底层云端资源,边缘端能力的集成和适配;同时又提供标准的API层能力接口和开放,实现和前端功能的集成适配。
再来看下ServerLess无服务器架构。
对于BaaS层后端即服务能力,实际和Dapr架构里面的Components组件层完全对应,即将底层的资源层能力抽象为运行时的服务层能力。
但是对于ServerLess的无服务器架构,BaaS层更多的是类似数据库,消息,缓存,存储,日志等各种技术服务能力。因此常规的云原生平台提供的ServerLess并不适合开发企业级的复杂应用,其核心原因就是共性的领域层业务服务能力无法提供。
那么如何来解决这个问题?
简单来讲就是ServerLess的架构思路,仍然需要和微服务架构进一步融合。既借鉴ServerLess的资源,分层解耦的核心架构思路,同时又借鉴传统的微服务架构框架,基于传统方法来开发能够提供核心业务服务能力的业务组件。
这个业务组件你完全可以采用传统的开发语言,开发方式进行开发。但是开发完成后仍然需要融合到整个云原生和微服务架构体系里面去。也正是整个原因,我们完全可以理解为Dapr是微服务,服务网关,无服务器化三者核心思想的一个融合,这也正是整个云原生下微服务框架发展的趋势。
大家可以参考下图进行理解:
简单来讲就是开发人员只需要关心BaaS层业务组件微服务的开发,其它和底层资源和技术服务的集成和适配,API接口的能力开放,微服务组件之间的交互,微服务本身的服务治理和可观测性问题全部由Dapr框架来完成。
Dapr框架实际是融合了ServiceMesh服务网关和ServerLess无服务器化两者的核心思想,真正实现了让开发人员从技术基础设施和底层资源逻辑,服务治理管控中脱离出来。
Dapr符合云原生和微服务发展演进趋势
在我前面谈云原生和DevOps的文章中谈到,希望基于DevOps持续集成和交付能力来构建一个多云适配的能力平台。即你在私有云环境中开发完成的应用,能够灵活的朝不同的公有云服务商进行交付,也能够灵活的在多个公有云之间进行迁移。
当我在谈这个问题的时候,实际重点仍然是基于公有云服务的资源层虚拟机或者基于公有云提供的标准Kurbernetes API接口层对接容器能力。
但是对于核心的PaaS层数据库,消息中间件,缓存,日志等各种技术服务能力并无法支撑。也就是说如果你用的阿里云的RocketMQ消息中间件,你如何迁移到华为云?或者即使你用的阿里云的mysql数据库即服务能力?你如何保证一定可以平滑迁移到华为云的Mysql数据库服务上面去?
因此,这种和公有云的适配不是简单的资源层包括容器层的适配,更加重要的是各种技术服务能力的适配,这些技术服务能力可以理解为ServerLess无服务器架构中的BaaS层能力。
这种适配在哪里做?
按Dapr的思路,我们可以在Components组件层来完成这种适配工作。
当开发人员在开发新的应用的时候,只需要使用Dapr架构框架下的数据库,消息等API接口能力,同时又确保你开发的应用能够平滑的向云端的云原生架构进行快速交付。也不会被某个单一的云服务商强制绑定。
包括我在前面谈ServerLess架构演进的时候也谈到,简单的BaaS+FaaS无法支撑复杂的企业级应用开发,对于企业级应用核心仍然是业务BaaS层的开发,并将能力通过API接口方式暴露给前端应用。
但是业务BaaS层业务组件和服务的开发同样需要使用类似消息,缓存等各种技术BaaS层服务能力,技术BaaS+业务BaaS才构成完成的底层服务层能力提供。
因此我们需要找到一种方式或架构框架,同时满足对业务BaaS微服务的开发定制,从资源到服务层能力的抽象和适配,通过边车模式实现的微服务治理管控,基于API接口服务实现的前后端分层和能力解耦。
而对于Dapr框架本身具备上述大部分能力,这也是我们将Dapr架构和框架实现思路是后续云原生和微服务架构发现的关键趋势的原因。
以上是关于云原生应用和微服务发展主流趋势的主要内容,如果未能解决你的问题,请参考以下文章