深入理解Serverless架构 (深入理解serdes系列之一电子工程专辑)

教程大全 2025-07-15 06:52:57 浏览

深入理解Serverless架构

2017-08-15 13:05:58随着2014年AWS Lambda的发布和流行,近年来有关Serverless的话题和讨论越来越频繁。究竟什么是Serverless?为什么需要Serverless? Serverless是否意味着从此不再需要 服务器 了?Serverless究竟能为开发运维带来哪些便利呢?

随着2014年AWS Lambda的发布和流行,近年来有关Serverless的话题和讨论越来越频繁。究竟什么是Serverless?为什么需要Serverless? Serverless是否意味着从此不再需要服务器了?Serverless究竟能为开发运维带来哪些便利呢?

深入理解serdes系列之一电子工程专辑 回溯本源

让我们先来回顾一下常见的应用服务开发上线流程。

一、直接使用物理设备

开发者将应用程序开发测试完毕后,直接将程序和相关软件部署在物理设备上。服务器直接使用物理机。这种方式将不可避免地需要大量人工运维和重复劳动。比方说,用户数量逐渐增长时,我们需要扩容物理设备以应对更高的网站访问压力。这时候我们需要购置更多的物理服务器,并且搬运到机房的对应机架机柜中。然后,我们需要手动为新购置的物理服务器安装各种运行软件,填写好配置文件,手动部署启动好需要运行的应用程序。这些大量的重复运维劳动造成产品上线慢,迭代周期长。其次,使用物理设备直接部署应用程序将导致资源浪费。如今的物理服务器的配置越来越强大,64核128G在今天看来也不过是普通配置。很难想象你买了一台32核的物理机,却只想搭建个人博客。此外,电商行业经常为了应对促销秒杀等活动准备大量的物理资源,然而在非促销等流量低谷时段,大量物理资源处理闲置状态,不利于节约成本。

最后,为了解决资源浪费的问题,我们很容易想到,可以将多个应用程序部署在同一台服务器上来充分利用资源。但由此又导致了新的麻烦,不同的应用程序经常会抢占CPU,磁盘IO,内存,难以做到隔离资源,各行其是,互不干扰。

二、IaaS托管硬件

虚拟化技术的成熟直接解决了上述直接使用物理设备的几个痛点。

首先,使用IaaS平台,服务器由物理机变成了虚拟机。申请服务器资源仅需要调用IaaS平台的API或者点击控制台页面就可以轻松完成。CPU个数,内存大小,网络带宽,存储磁盘大小都可以按需指定,随心所欲。虚拟机被玩坏了也不需要重装系统修复,删除重建新虚拟机即可。扩容服务器不再需要大量的重复人工运维劳动,加速了产品上线和迭代。

其次,使用IaaS平台一定程度上减轻了资源浪费。在IaaS平台上很容易申请和删除虚拟机,升降带宽配置等操作,这样当业务低谷时段直接删除多余的虚拟机,降低带宽购买配额,就能节约不少成本。

最后,IaaS平台解决了资源隔离的问题。不同虚拟机之间有独立CPU,内存,磁盘,网卡,不同虚拟机之间的程序不会进行资源抢占。

然而,IaaS平台仅仅为开发者做好了硬件托管的工作。开发者依然需要为虚拟机安装操作系统和各种软件,填写配置并部署应用;依然需要关注服务器,带宽,存储等资源的使用量和扩容缩容。此外,IaaS平台没有完全解决资源浪费的问题,实际上,大量虚拟机在日常运行中依然存在超低负载运行的情况。

三、 PaaS托管应用

使用PaaS平台,开发者无需关注服务器的申请采购、系统安装和资源容量。PaaS服务提供商为开发者提供好了操作系统和开发环境以及支持的SDK和API,还能自动调整资源来帮助应用服务更好的应对突发流量。有了PaaS平台,开发者仅仅需要把应用开发好,然后在PaaS平台完成服务部署,应用服务即可上线。

相比IaaS平台,PaaS平台能更加精准地为应用程序所消耗的资源计费。IaaS平台仅仅依据用户申请的资源量,如CPU核心数,网络带宽来计费,而不关注用户是否实际真正充分使用到了其所申请到的资源。PaaS平台则可以通过统计应用程序所占用的CPU使用率和内存使用率来做的更精准的计费,甚至可以实现应用层面的计费,比如服务响应时间,或者应用所消耗的事务。

1. 什么是Serverless?

Serverless指的是由开发者实现的服务端逻辑运行在无状态的计算容器中,它由事件触发, 完全被第三方管理,其业务层面的状态则被开发者使用的数据库和存储资源所记录。

以上图为例,图中上半部分描述的是互联网应用传统架构的模型:用户客户端APP与部署在服务器端的常驻进程通信,服务端进程处理该应用的大部分业务逻辑流程。下半部分则描述了Serverless架构模型。与传统架构模型最大的不同在于,互联网应用的大部分业务逻辑流程被转移到客户端上,客户端通过调用第三方服务接口来完成诸如登录、鉴权、读取数据库等通用业务场景;高度定制化的业务逻辑则通过调用第三方FaaS平台执行自定义代码来完成。总体上看,Serverless架构将传统架构中的服务器端的整串后台流程拆分成在客户端上执行一个个第三方服务调用或FaaS调用。

回顾之前所述,无论是直接使用物理服务器设备部署程序,还是基于IaaS平台托管硬件,或者使用PaaS平台托管应用,开发部署互联网应用都离不开传统的客户端-服务器模式,即客户端向服务端发送请求,服务器运行处理各种业务逻辑,并响应来自客户端的请求。至于物理机,IaaS乃至PaaS,归根结底只是服务器程序的部署模式不同。

而在Serverless架构中,软件开发者和运维工程师们不在需要关心服务器的部署、架设、伸缩,这些问题交给云平台商来解决,程序员们得以将精力投入用代码来实现业务逻辑中,而不是管理服务器。Serverless并不意味着不再需要服务器了,只是服务器资源的申请、使用、调度、伸缩由云服务商自动实现,应用开发者无需关心。

2. Serverless如何工作?

以一个简单需求为例,论坛网站需要对用户上传的图片生成一个缩略图。

我们使用UCloud的通用计算(UGC)来实现该功能

如上图所示,使用UGC实现这一功能操作步骤如下:

整个过程中,开发者仅仅需要将缩略图算法实现函数代码镜像提交到UGC算法仓库中,然后调用UGC的提交任务API,输入源图片数据,即可获得计算结果。

从以上过程可以总结出:使用Serverless,开发者无需考虑服务器细节,只需要负责编写发生某些事件后所需执行的代码。云供应商将负责提供用于运行这些代码的服务器,并在必要时对服务器进行缩放。执行完毕后,承担这些功能的容器会立刻停用,用户只需为运行代码过程中所消耗的资源付费。这种模式也被称为做函数即服务(Function-as-a-Service,FaaS)。

3. 与非Serverless方案的对比

上述场景如果使用非Serverless方案,大体架构如下:

该方案需要维护一组UHost服务集群,服务器中部署图片缩略转换程序。UHost的服务程序先从Ufile中读取源图片,使用图形库将其转换成缩略图并再存回UFile中。相比之前的Serverless方案,有以下几点对比:

4. Serverless相比PaaS的特点

相比PaaS,Serverless在以下几个方面更具优势:

4. 使用Serverless前,你需要了解的Serverless的适用场景特点

5. 不是银弹

Serveless架构在某些场景下拥有明显的优势,但它不是解决一切架构问题的灵丹妙药,更不是传统架构的革命者和替代者。架构上说,Serverless更像是一种粘合剂。以下是一些常见的不适用Serverless的情况。

Serverless平台需要为每次FaaS调用创建一个容器运行对应代码。前面提到过,由于创建容器并初始化代码运行环境存在一定程度的开销和延时(通常在10ms级),Serverless架构难以胜任对延迟要求非常苛刻的场景。

同样的,由于启动容器进程开销较高,Serverless架构难以应对非常高的并发请求场景。通常云服务商会对用户的并发调用数做限制,比如AWS Lambda是1000。

通常FaaS平台会对代码运行时间做最大时间限制。如果你的代码需要运行较长时间才能返回结果,需要慎重考虑使用Serverless。例如刚才提到的,AWS Lambda对代码最大运行时间限制为5分钟。

由于代码容器在Serverless平台部署位置环境的不确定性,使用Serverless时,我们必须对代码做无状态改造。如果你两次调用存在关联偶合,同样请慎重考虑Serverless。

6. 其他主流公有云服务商Serverless产品

除了众所周知的AWS Lambda,目前常见的Serverless产品还有前文提到的UCloud的通用计算 (UGC),官网:。

UCloud通用计算UGC具备以下特性:

作为UCloud研发的分布式大规模并行计算服务,UGC能够充分利用UCloud多个区域内的多个可用区的计算资源,提供基于UCloud云平台的高可用性和高并发性,同时满足图片处理、机器学习、大数据处理、生物数据分析等领域的计算需求。


《潍县署中寄舍弟墨第一书》中郑燮反对什么样的读书方法,有主张什么样的读书方法?

反对:过目成诵,无所不诵,主张:深入探研,择其精华,均通过举例说明 我是一个初二的学生刚学好这篇文章!!

怎么样才能培养学习能力

学习能力是多方面的,它包括注意力、观察力、思考力、应用力、自觉力、记忆力、想象力、创造力等,本文所涉及的是一些最基本的方面。 可想而知,一个连课都听不懂的人要想提高学习能力和学习成绩则无从谈起。 所以,要提高学习能力,必须以听课为重,提高听课水平,在预习和上课阶段,让你的学习潜力得到最大限度的发挥,然后利用复习,将学习的要点加以深入思考和整理,以提高应用能力,从而由征服一门学科到到征服所有不擅长的学科,全面提高学习成绩。 1、积极主动地听课 你是不是有这样的看法,所谓的上课就是被动的听老师讲课,如果真是如此,那你也不必事先预习功课了,只要把老师的讲过的内容像鹦鹉学舌那样重复几遍,不就能圆满完成任务了吗? 实际上,中小学的课程(尤其是中学)并不好对付,在毫无准备(预习)的情况下听老师讲课,顶多只能懂些“鸡毛蒜皮”的东西,想要做到彻底理解,几乎不可能。 真正所谓的“上课”,就是把自己事先做过或思考过,但又不怎么理解的问题,放在课堂教学的有限时间里去求得解答的线索,然后再去思考更深一层的问题,这样你必须做好预习和复习。 2、预习,通常分为三个阶段(预习三部曲) (1)、预习第一阶段 先把教科书通读一遍,在不甚了解的地方作个记号,上课时就针对这些疑点提出问题,直到了解为止。 (2)、预习第二阶段 研究课本后的问题或习题,将它们解答出来,上课时将答案与老师讲解的正确答案对照。 (3)、预习第三阶段 利用参考材料,将没有学过的内容(后几课)做一番预习,能做到这一部,不仅预习的兴趣会迅速增加,而且预习的功夫也会渐渐达到“炉火纯青”的境界。 当然在预习阶段遇到不太明白的地方,你得立刻回过头来复习以前的部分,所以“预习”本身就包含了大量的“复习”因素,兼有双重功能。 正如有人曾说过的“七分预习,三分复习”。 3、复习的过程也分为三个阶段 (1)、复习第一阶段把课堂上学过的内容重温柔一遍、实际上,这是最愚笨的方法,很多人都是这样:“点到为止”,不求甚解,但总比一点都不复习好得多。 (2)、复习第二阶段 把课堂上学过的重点摘出来,整理在笔记本上,这并不需要太多时间。 (3)、复习第三阶段 做练习(这是加强应用能力的问题) 总而言之,要提高学习能力,必须以听课为重,在预习和上课阶段,让你的学习潜力得到最大限度的发挥,然后利用复习,将学习的要点加以深入思考和整理,以提高应用能力。

C语言的结构体类型是什么数据?数据有哪些类型?

结构体类型就是以struct关键字定义的数据类型。 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构。 是一种聚合类型,里面可以包含多种数据类型,甚至可以结构体里嵌套结构体。 相信我,等你深入理解了C言语之后,结构体在C语言里是一个神器。 C语言有五种基本数据类型:字符(char)、整型(int)、单精度实型(float)、双精度实型(double)和空类型(void)。 C语言还提供了几种聚合类型(aggregate types),包括数组、指针、结构体(struct)、共用体(联合)、位域和枚举。 结构体(Structure)是一个或多个相同数据类型或不同数据类型的变量集合在一个名称下的用户自定义数据类型。 struct 结构体名,成员列表。 因为有typedef关键字,PER实际上也就是结构体类型名,用PER可以直接定义变量。 结构体定义的格式是struct 结构体名。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐