- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章从微服务到ServerLess无服务器架构演进思考由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
今天再下从微服务到ServerLess无服务器架构的演进过程方面的话题。对于ServerLess我在前面专门写过一篇文章进行说明,自己也专门申请了腾讯云ServerLess环境做了简单验证和测试。具体可以参考下面这篇文章.
最近1到2年,类似阿里,腾讯,华为各大公有云服务商对ServerLess架构和解决方案推广力度很大,也看了一些垂直细分场景下ServerLess架构下的成熟应用和实践。但是实际上可以看到这些应用场景主要还是集中在互联网应用中,即使在互联网应用中也是一些相当垂直的场景,比如一些基础服务能力整合,数据采集发送,事件响应场景,物联网垂直应用等.
而对于传统企业信息化领域,ServerLess应用很少.
其次,对于一个传统的IT应用系统,可以说对其进行微服务化和架构改造,但是却很难在短期做到完全的ServerLess化.
今天重新谈这篇文章,还是想对ServerLess无服务器架构里面的一些关键内容进一步说明,也方便大家理清思路和要点.
首先我们还是先看下对Serverless的一个基础定义和说明,即:
Serverless是一种构建和管理基于微服务架构的完整流程,允许你在服务部署级别而不是服务器部署级别来管理你的应用部署。它与传统架构的不同之处在于,完全由第三方管理,由事件触发,存在于无状态(Stateless)、暂存(可能只存在于一次调用的过程中)计算容器内.
构建无服务器应用程序意味着开发者可以专注在产品代码上,而无须管理和操作云端或本地的服务器或运行时。Serverless真正做到了部署应用无需涉及基础设施的建设,自动构建、部署和启动服务.
在这里我想再强调下里面的一些关键点.
实际在谈微服务的时候,我们希望的就是整个云平台不断地向上抽象和上移,从IaaS层资源能力提供到PaaS层服务能力提供.
但是实际在应用开发过程中,并没有完全做到对资源层的隔离,比如一些自研的基础组件开发和部署,一些数据库资源部署,我们仍然还在申请类似虚拟机资源,然后自己进行部署和管理。也就是说没有做到完整意义上的对资源层透明.
而到了Serverless阶段,那就是必须做到完整意义上的服务化,你能够看到和使用的只能够是通过API网关暴露给你的API接口服务能力,对于资源层可以做到彻底意义上的不关心.
所以对于Serverless无服务器化这个词,无服务器化可以理解为无资源化,即你不直接面对资源层,你面对的都是服务能力,去订购和消费使用API服务能力.
对于Serverless可以理解为微服务的进一步拆分,即将微服务实现的各个能力全部拆分和解耦,每一个服务能力变成无状态的API接口能力,这些API接口能力就是一个个的可以通过脚本来实现的云函数,构成了Serverless架构中的FaaS层.
传统架构,即使微服务架构仍然可以看到有比较重的微服务开发框架,有共性底层技术组件依赖等,而这些在Serverless下全部都应该去掉或者转为由云平台统一提供.
简单来说如果共性基础框架这层不去掉,上层就不可能彻底的函数化.
为何彻底函数化困难?
除了前面谈到的有一个共性的技术框架依赖外,另外一个关键点就是各个方法和函数之间的调用往往存在状态,需要做类似会话保持等相关动作.
一旦方法间存在状态,那么实际每一个方法或函数功能的实现就无法做到完全的自我管理,这个不论在前期部署,后续的弹性伸缩,高可用等各种场景中你都需要去考虑状态保持的问题,那么整体架构又变得复杂.
因此在Serverless不断在强调事件驱动,强调无状态,强调任何一个接口调完就结束,这个结束不仅仅是不保留状态,包括承载FaaS函数实现的轻量无状态容器也可以做到快速的销毁.
所以你也可以看到无状态化是实现Serverless能够按调用次数进行计费的一个关键。要实现这个按次计费就必须做到资源层的快速启动,创建,快速的扩展,销毁等各种能力.
实际上将微服务和ServerLess无服务器架构进行对比,或者将ServerLess作为微服务后续的发展趋势并不合理.
基于上图可以看到.
ServerLess无服务架构实际是整个云平台的重心不断上移,从资源到服务层能力不断抽象的一个过程.
那么微服务在哪里?
微微服务实际可以理解为PaaS层发展的第二个阶段。对于PaaS层的第一个阶段仍然是单体应用和传统的基于虚拟机进行应用调度和托管的PaaS平台,同时类似数据库,消息等技术服务能力也不足够成熟.
而随着云原生技术的发展,特别是云原生中的微服务,容器技术也在不断发展。公有云PaaS平台发展到了围绕容器+技术服务为核心的云原生PaaS平台。在这个过程中传统的单体应用为了获得更好的性能和可扩展性,也转变从单体拆分为更小的微服务.
这个发展阶段可以参考下图:
我们可以将整个演进过程分为三个阶段.
在传统单体架构阶段,往往只会使用到云平台提供的虚拟化资源池,提供弹性计算和弹性存储能力。应用自己申请虚拟机,然后安装环境,管理环境。同时应用在开发完成后也是人工来完成将测试通过的版本部署到虚拟机环境中去.
而到了云原生PaaS平台阶段,底层的资源池变成了更加轻量化的容器,同时上层的单体已经拆分为了多个独立松耦合的微服务,中间件PaaS层实现两个能力.
其一是类似K8s实现的容器资源编排和调度;其二是实现共性的技术服务能力提供,其中包括了数据库,消息,缓存等各种技术服务能力.
为了更好地衔接上层微服务和底层容器云资源,可以通过DevOps持续集成和交付最佳实践和工具集的整合,来完成整个从需求,开发,测试,集成,交付过程的全面自动化。也就是说整个编译,构建,打包,部署的动作全部由DevOps过程自动完成.
到了ServerLess阶段,实际看到又带来如下变化.
其一是底层的容器变成无状态化容器,更加轻量,也更加容易快速创建和销毁;其二是上层的微服务能力进一步拆分为各个独立,无状态的云函数或服务;其三是PaaS层的技术服务能力进一步增强,构建完整的BaaS层.
BaaS(Backend as a Service,后端即服务)是指我们不再编写或管理所有服务端组件,可以使用领域通用的远程组件(而不是进程内的库)来提供服务.
在现阶段,Serverless主要应用在以下几个场景。首先在Web及移动端服务中,可以整合API网关和Serverles服务构建Web及移动后端,帮助开发者构建可弹性扩展、高可用的移动或 Web后端应用服务.
在IoT场景下可高效地处理实时流数据,由设备产生海量的实时信息流数据,通过Serverles服务分类处理并写入后端处理。另外在实时媒体资讯内容处理场景里,用户上传的音视频到对象存储OBS,通过上传事件触发多个函数,分别完成高清转码、音频转码等功能,满足用户对实时性和并发能力的高要求.
无服务器计算还适合于任何事件驱动的各种不同的用例,这包括物联网,移动应用,基于网络的应用程序和聊天机器人等.
我曾经提到如下观点:
对于传统企业信息化应用来说,由于本身业务规则和逻辑实现复杂,同时存在大类的流程,数据,应用功能间的协同和集成。在这种场景下,转到完全的Serverless架构基本没有任何的可能性.
在这里想转换下思考方式,即对于传统企业信息化应用,如果要迁移到ServerLess无服务器化架构需要做哪些准备.
对于这个问题,我准备分几个点来思考.
在这里再次强调下对于BaaS后端共性服务能力提供这块,仍然是采用传统架构或当期的微服务架构方式来提供.
当我们一说到Serverless架构的时候,很容易将思考重心放在FaaS云函数这层,其原因是在当前的公有云服务下,类似存储,数据,消息等各种BaaS后端服务能力都是云平台在提供。但是当前去开发企业级应用的时候,这个BaaS后端服务含义变化.
即BaaS后端服务不仅仅是技术服务,也包括了共性业务服务能力.
如果还是用中台这个词,你可以理解为企业共性的业务中台和数据中台提供的共性服务能力也是BaaS后端服务的重要组成.
也就说你要开发企业级应用,那么先得把BaaS这层做好,否则寸步难行.
在前面已经谈到,Serverless架构是一种彻底的无状态化架构模式。比如你原来本身就是采用的类似事件驱动架构在开发,那么转移到Serverless相当容易。但是如果你原来更多的都是大量长周期事务,大量的状态保持场景,那么整个迁移就相当复杂.
无状态开发类似SOA架构思想里面的服务组装和服务编排,也类似于基于消息事件机制的事件链编排模式。但是核心都是无状态,你需要通过其它方式,比如类似token传递来保持状态,通过消息机制来暂存状态等.
这个也是我在前面就强调的点,如果后续要转移到Serverless架构模式,那么你现在所有的开发指导思想都应该是面向服务而非面向资源.
你不要再去考虑申请订购虚拟机或容器资源,你需要考虑的是将你的技术需求转换为对技术服务的需求;将你的业务需求转变为一个个独立的无状态功能函数.
在前面我就谈到如果你现在上云过程中,都还是在自己申请虚拟机安装数据,安装消息中间件,那么在后期就更难以迁移到ServerLess模式。包括在前面对腾讯云ServerLess简单验证中也可以看到,当你需要数据持久化存储的时候,你不是去申请了一个虚拟机自己安装Mysql数据库,而是在基础服务里面有一个数据库服务,你直接使用这个服务能力来创建数据库集合即可.
对于所有开发人员来说,面向服务开发是一个相对重要的内容.
进入到ServerLess无服务器阶段的时候,可以看到开发团队人员往往重新进行分工,这个分工可以看做是当前微服务前后端分工的一个分支.
即一个团队专门来做BaaS后端服务这层,这个团队仍然是采用传统方法或者当前的微服务架构来进行开发和持续集成交付。而对于另外一个开发团队则面向应用和用户,面向后端提供的API接口服务,这个开发团队完全可以由当前的前端开发人员来组成.
也就是说在后端BaaS服务稳定后,对于新应用的创建更多就是前端应用,FaaS云函数的编写,前端开发人员可以更加关注业务场景和规则的实现,更多的是去组装和组合BaaS层已有的业务服务和技术服务能力来满足各种需求.
可以举个简单的例子.
对于传统的OA办公自动化场景里面,当组织,权限,人员,流程这些共性的后端服务能力具备后,对于前端各种类似请假单,出差申请单这种功能的开发是完全可以实现云函数化的。这个时候前端应用的开发更类似于当前的低代码开发平台完成的事情.
原文地址:https://mp.weixin.qq.com/s/0o2VJj9E9AC4LV4Eacmfxg 。
最后此篇关于从微服务到ServerLess无服务器架构演进思考的文章就讲到这里了,如果你想了解更多关于从微服务到ServerLess无服务器架构演进思考的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
使用微 Controller 时,通常您必须对寄存器进行写入和读取,为了使代码更具可读性,您需要定义寄存器地址及其位。这有点好,但是当您的寄存器名称彼此非常相似时,它很快就会变得困惑,例如此处所示 #
微 Controller 背景下的“原子操作”是什么? 我正在研究 TI F28027 MCU。 The data sheet says that its operations are atomic
我正在用 PIC 微 Controller 做一个项目。我有一个 ADC 采样并将数据保存到 RAM 存储器,一旦 RAM 被填满,我需要使用 PIC 微 Controller 通过蓝牙发送它。 我的
如何确定微 Controller 中特定程序所需的堆栈内存? 例如,假设我有一个内部可能有许多子例程或线程的程序。在我开始执行程序之前,我想修复这个程序的堆栈大小。我如何标记堆栈的终点。 最佳答案 我
我知道 printf 和 sprintf 之间的基本功能差异。但是,我想知道它们之间一些与时间/延迟相关的差异。显然,我想在我的一个自定义构建 RTOS 的任务中使用它。你怎么看 ?我想知道更多它会如
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 9 年前。 Improve this ques
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我有一个一般性的问题。我在微 Controller 上记录错误。但是微 Controller 的资源比 Windows 计算机更有限。在我的例子中,我将 64 个错误代码保存在一个队列中,由 Free
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 6 年前。 Improve th
假设我有一个时钟速度为 20 Mhz 的 8 位定时器。计时器在多少时间内可以计数多远而不溢出。或者1秒内溢出多少次?我知道它可以数到 255 并且会溢出 最佳答案 时间和频率之间的关系是t = 1/
我正在开展一个全面的长期 C 编程项目,该项目需要模块化编程方法。作为设计的一部分,将创建库,因此我想确认头文件组织的正确/错误解释: 问题 假设您正在创建一个库。经过深思熟虑,您决定您希望构想的最终
1. #define timers ((dual_timers *)0x03FF6000) 这是 ARM 微 Controller 中使用的内存映射定义 结构定义在哪里 2. struct dua
我购买了 LinkSprite JPEG 彩色相机和 LPC1768 mbed 微 Controller 。通过“LinkSprite”相机,我可以拍摄 jpeg 格式的图像,根据他们提供的教程,我可
我有很多不同的时间来跟踪我的设计,但没有什么是 super 关键的。 10 毫秒 +/- 几毫秒根本不是什么大问题。但是可能有 10 个不同的定时器同时在不同的周期进行计数,显然我没有足够的专用定时器
是否可以通过串行端口与 PIC 单片机通信 Android 应用程序?我可以使用哪些低成本手机?对不起,我是哥伦比亚人。 最佳答案 不确定 PIC,但是 Arduino可能是一个很好的引用点,并且有一
今天我一直在思考以下问题: 在一台普通的 pc 中,当你分配一些内存时,你向操作系统请求它,它会跟踪哪些内存段被占用,哪些内存段没有被占用,并且不要让你弄乱其他程序的内存等。但是微 Controlle
我已经为微 Controller 的键盘开发了一个 c 驱动程序。我想改变它,例如,当我按下 1 时,它会显示 1,直到我按下另一个数字。截至目前,数字只有在我按下数字时才会改变,这意味着一旦我松开键
我有一个在线程之间共享的 volatile unsigned char array LedState[5] 变量。数组中的每个索引表示一个状态。根据每个状态,LED 将以不同的顺序闪烁。一个线程设置数
我有一个项目要对微 Controller PIC18F 进行编程,我必须将一个开关电路连接到微 Controller 板上,这个开关电路有一个电锁和一个蜂鸣器要连接到它。 锁最初是通电的。假设当我发送
我是一名优秀的程序员,十分优秀!