我的Serverless实战——引领云计算的下一个十年

前言:如今,越来越多的大厂企业开始大规模使用Serverless,处于变革中的开发者,大多已从观望状态转向尝试阶段,越来越多Serverless落地场景被解锁。作为基础研发底座,越来越多企业开始接受Serverless,并将其应用于业务实践中。预计Serverless架构将引领云计算的下一个十年已成为共识。这个Serverless不仅适合与小场景,同样适用与大厂秒杀,12306抢票的大业务场景。Serverless不是不需要Server,而是需要我们前端较少的关注服务器端,前端程序员可以好好研究一下。

目录

 

培养自己的Serverless思维与认知

Serverless的使用价值及常见的架构模式

函数计算介绍及其应用

函数的测试与部署

Serverless容器服务及部署

Serverless应用引擎

常见的业务场景及经典案例


培养自己的Serverless思维与认知

以前很多开发者都是采用的单体架构,为了保证服务的稳定性,只需要维护一台服务器及数据库就可以啦,但是随着业务的增长会面临两个问题,如果流量比较大,这个服务器可能顶不住这么大的流量,其次硬件啥的损坏也会导致整个系统瘫痪。

解决这个问题的办法就是使用负载均衡,分担各个服务器的压力。然后整个系统就有一定的水平伸缩能力,如果一台服务器坏了,其它的服务器也能正常运行,保证系统稳定运行。

随着业务的进一步增长,增加大量的开发人员去处理这种单体应用,就会出现大量的冲突问题,这个就需要管理者进行人工协调,公司整体研发效率比较低,后台大家想到一个好办法就是把这个单体应用分为一个个独立开发、测试及部署。每个环节都是独立而又有一定的联系,这个就是微服务的雏形。服务和服务之间采用API通信,这种微服务架构大大提升了研发人员的工作效率。

再到后来,估计大家都有所了解,如果从物理的角度思考这个问题就会发现分布式的一些困难与挑战,比如大家使用分布式服务及框架,使用一些Redis缓存、配置服务ACM以及分布式追踪系统等。这个微服务架构给运维也带来不少的难题,感觉运维大哥都快成全能底层人才了,以前运维只需要维护一个应用,现在估计一个人都得看几十个、几百个应用。对应用分发、自动化弹性等能力有一定的要求。

现在很多人都谈云计算,云架构,简单理解就是这个架构长在“云”上就是云架构。有了应用分发的标准和生命周期的标准,云就能提供标准化的应用托管服务。在整个架构的演变的过程中,我们发现,研发运维人员希望用平台系统的去管理机器,而不是人去管理这些个玩意。这可能就是server is less.

Serverless的使用价值及常见的架构模式

我们抛去这些抽象的概念,看一下这个Serverless的使用价值主要有以下几点:

1.不用过多的关注服务器。

(Serverless平台具备自动识别故障,移除故障的能力)

2.自动弹性。

(Serverless平台自动及时稳定的实现自动弹性)

3.按照实际资源的消耗进行计费。

(Serverless模式下,按照实际消耗资源及使用存储进行计费)

4.更少的代码,更快的交付速度。

(Serverless提供成熟的代码构建发布、版本切换等特性,交付速度更快)

Serverless由开发者实现的服务端逻辑运行在无状态的计算容器中,它由事件触发, 完全被第三方管理,其业务层面的状态则被开发者使用的数据库和存储资源所记录。Serverless涵盖了很多技术,分为两类:FaaS和BaaS。

FaaS(Function as a Service,函数即服务)

FaaS意在无须自行管理服务器系统或自己的服务器应用程序,即可直接运行后端代码。其中所指的服务器应用程序,是该技术与容器和PaaS(平台即服务)等其他现代化架构最大的差异。

FaaS可以取代一些服务处理服务器(可能是物理计算机,但绝对需要运行某种应用程序),这样不仅不需要自行供应服务器,也不需要全时运行应用程序。

FaaS产品不要求必须使用特定框架或库进行开发。在语言和环境方面,FaaS函数就是常规的应用程序。例如AWS Lambda的函数可以通过Javascript、Python以及任何JVM语言(Java、Clojure、Scala)等实现。然而Lambda函数也可以执行任何捆绑有所需部署构件的进程,因此可以使用任何语言,只要能编译为Unix进程即可。FaaS函数在架构方面确实存在一定的局限,尤其是在状态和执行时间方面。

在迁往FaaS的过程中,唯一需要修改的代码是“主方法/启动”代码,其中可能需要删除顶级消息处理程序的相关代码(“消息监听器接口”的实现),但这可能只需要更改方法签名即可。在FaaS的世界中,代码的其余所有部分(例如向数据库执行写入的代码)无须任何变化。

相比传统系统,部署方法会有较大变化 – 将代码上传至FaaS供应商,其他事情均可由供应商完成。目前这种方式通常意味着需要上传代码的全新定义(例如上传zip或JAR文件),随后调用一个专有API发起更新过程。

FaaS中的函数可以通过供应商定义的事件类型触发。对于亚马逊AWS,此类触发事件可以包括S3(文件)更新、时间(计划任务),以及加入消息总线的消息(例如Kinesis)。通常你的函数需要通过参数指定自己需要绑定到的事件源。

大部分供应商还允许函数作为对传入Http请求的响应来触发,通常这类请求来自某种该类型的API网关(例如AWS API网关、Webtask)。

BaaS(Backend as a Service,后端即服务)

BaaS(Backend as a Service,后端即服务)是指我们不再编写或管理所有服务端组件,可以使用领域通用的远程组件(而不是进程内的库)来提供服务。理解BaaS,需要搞清楚它与PaaS的区别。

首先BaaS并非PaaS,它们的区别在于:PaaS需要参与应用的生命周期管理,BaaS则仅仅提供应用依赖的第三方服务。典型的PaaS平台需要提供手段让开发者部署和配置应用,例如自动将应用部署到Tomcat容器中,并管理应用的生命周期。BaaS不包含这些内容,BaaS只以API的方式提供应用依赖的后端服务,例如数据库和对象存储。BaaS可以是公共云服务商提供的,也可以是第三方厂商提供的。其次从功能上讲,BaaS可以看作PaaS的一个子集,即提供第三方依赖组件的部分。

BaaS服务还允许我们依赖其他人已经实现的应用逻辑。对于这点,认证就是一个很好的例子。很多应用都要自己编写实现注册、登录、密码管理等逻辑的代码,而对于不同的应用这些代码往往大同小异。完全可以把这些重复性的工作提取出来,再做成外部服务,而这正是Auth0和Amazon Cognito等产品的目标。它们能实现全面的认证和用户管理,开发团队再也不用自己编写或者管理实现这些功能的代码。
 

函数计算介绍及其应用

从用户角度,他需要做的只是编码,然后把代码上传到函数计算中。上传代码就意味着应用部署。当有高并发请求涌入时,开发者也无需手动扩容,函数计算会根据请求量毫秒级自动扩容,弹性可靠地运行任务,并内置日志查询、性能监控、报警等功能帮助开发者发现问题并定位问题。

函数计算是事件驱动的无服务器应用,事件驱动是说可以通过事件源自动触发函数执行,比如当有对象上传至OSS中时,自动触发函数,对新上传的图片进行处理函数计算支持丰富的事件源类型,包括日志服务、对象存储、表格存储、消息服务、API网关、CDN

除了事件触发外,也可以直接通过API/SDK直接调用函数。调用可以分为同步调用与异步调用,当请求到达函数计算后,函数计算会为请求分配执行环境,如果是异步调用,函数计算会将请求事件存入队列中,等待消费。

函数的测试与部署

服务是函数计算资源管理的单位,同一个服务下有很多函数,这些函数共享服务的网络 配置、权限配置、存储配置、日志配置。 服务可以对应成一个“应用”,这个应用由很多函数共同组成,这些函数具有相同的访 问权限、网络配置,日志也记录到相同的 logstore。这些函数本身的配置可以各不相同, 比如同一服务下有的函数内存是 3G,有的函数内存是 512M,有些函数用 Python 写, 有些函数用 Node.js 写。

开发流程

函数测试部分,Serverless稍微薄弱一点,软肋,这个调试一般可以采用云调试、命令行工具、VSCode 插件、无工具调试等方式,具体怎么调试我就不一一说明了,有兴趣的可以尝试一下。
至于部署,比较简单,我们可以使用在线部署、客户端部署(通过命令行工具、通过 VSCode 插件)。命令行工具的 - h 指令真的很棒, 无论使用什么指令,我们都可以通过 - h 查看到使用方法。

Serverless容器服务及部署

Serverless Kubernetes 是以容器和 kubernetes 为基础的 Serverless 服 务,它提供了一种简单易用、极致弹性、最优成本和按需付费的 Kubernetes 容器服务, 其无需节点管理和运维,无需容量规划,让用户更关注应用而非基础设施的管理。我们可以把把 Serverless Kubernetes 简称为 ASK。

当下各大云厂商都推出了自己的 Serverless 容器服务,上图为 Gartner 评估机构 整理的 Serverless 容器产品 Landscape,其中阿里云有 Serverless Kubernetes ASK 和 ECI;AWS 有 Fargate,基于 Fargate 有 EKS on Fargate 和 ECS on Fargate 两种形态;Azure 有 ACI。另外 Gartner 也预测,到 2023 年,将有 70% 的 AI 应用以容器和 Serverless 方式运行。

在对 Serverless Kubernetes 的基础概念有了充分了解之后,我们直接进入容器服务控制台进行集群的创建。集群创建完成后,接下来我们部署一个无状态的 nginx 应用,主要分成三步:

1.应用基本信息:名称、POD 数量、标签等; 

2.容器配置:镜像、所需资源、容器端口、数据卷等;

3.高级配置:服务、路由、HPA、POD 标签等

创建完成后,在路由中就可以看到服务对外暴露的访问方式了。

Serverless应用引擎

主要的挑战:

1.开发难度和入门门槛高,业务轻量化困难,不能平滑地迁移现有应用 ;

2.担心被云厂商锁定,如 FaaS 形态的 Serverless 产品,每个厂商都希望推出自己的 标准,缺乏开源的规范和开源的生态支持。相似的一幕曾经在容器领域上演,直到后来 Kubernetes 成为事实标准,Serverless 还在寻找自己的事实标准;

3.如何方便地本地开发调试、监控,和现有业务做深度整合。

低门槛,无需任何代码改造就能直接使用的 Serverless PaaS 平台(SAE),是企业在线业 务平滑上云的最佳选择。

SAE 提供了成本更优、效率更高的应用托管方案。底层基于统一的 K8s 技术底座, 帮用户屏蔽复杂的 IaaS 层和 K8s 集群运维,提供计算资源、弹性、隔离性等能力,用 户只需关心应用实例的规格和实例数。 在应用层,除提供了生命周期管理、多发布策略外,还提供监控、日志、微服务治理能 力,解决应用可观测性和治理需求。同时提供一键启停、应用编排等高级能力,进一步提效 和降本。核心场景主要面向在线应用:微服务应用、Web 应用、多语言应用等。 在开发者工具方面,和 CI/CD 工具做了良好的集成,无论是 Jenkins 还是云效,都 能直接部署应用到 SAE,也可以通过 Cloud Toolkit 插件工具实现本地一键部署应用到 云端,可以说SAE覆盖了应用上云的完整场景

常见的业务场景及经典案例

至于行业一些经典案例这个场景,这个简单提一下 ,不过多介绍,有兴趣的可以查阅项目资料。

比如:Serverless 应用引擎弹性伸缩实践、基于函数计算实现 AI 推理、基于函数计算实现快速建站、基于函数计算快速搭建 Hexo 博客系统等等,然后再提一下相关的产品吧,比如函数计算(Function Compute)是一个事件驱动的全托管 Serverless 计算服务, 您无需管理服务器等基础设施,只需编写代码并上传,函数计算会为您准备好计算资源,并 以弹性、可靠的方式运行您的代码。Serverless 应用引擎(Serverless App Engine,简称 SAE)实现 Serverless 架构 + 微服务架构的完美融合,真正按需使用、按量计费,节省闲置计算资源,同时免去 IaaS 运维,有效提升开发运维效率。弹性容器实例 ECI提供安全的 Serverless 容器 运行服务。您无需管理底层服务器,只需要提供打包好的 Docker 镜像,即可运行容器, 并仅为容器实际运行消耗的资源付费。GPU 云服务器基于 GPU 应用的计算服务,多适用于 AI 深度学习、视频处理、 科学计算、图形可视化等应用场景等。

 

好啦,本期内容就分享到这里,我们下期见!

 

【本文正在参与"100%有奖|我的Serverless实战"征稿活动】,活动地址:https://marketing.csdn.net/p/15940c87f66c68188cfe5228cf4a0c3f

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

各种边距clientWidth、offsetWidth、scrollWidth、clientLeft、getBoundingClientRect详解

1、clientWidth、offsetWidth、scrollWidth <!DOCTYPE html> <html><head><meta charset"utf-8" /><style>#box1 {padding: 50px;position: static;}#box {border: 1px solid red;overflow: scroll;height: 200px;width: 500px;}#con…

花了两天时间用html+css+js做了一个网页版坦克大战游戏

大家好&#xff0c;我是孙叫兽&#xff0c;本期内容给大家分享如何用htmlcssjavaScript去做一个简易网页版坦克游戏。 目录 坦克游戏玩法及介绍 项目结构 源码地址&#xff1a; 坦克游戏玩法及介绍 我们先来看一下首页。 打开这个首页很简单&#xff0c;基本是上面这个样子&…

设置文字多行显示溢出显示省略号

#news_text { border: 1px solid red; width: 200px; word-break: break-all; text-overflow: ellipsis; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2; /*这里可以设置文本显示的行数*/ overflow: hidden; }<div id"news_text"&g…

vue项目有几个接口content Download时间特别长的解决办法

做的可视化地图项目&#xff0c;有几个接口加载比较慢&#xff0c;大概16S左右&#xff0c;第一次加载接近一分钟&#xff0c;这谁能受得了。 对比了正式环境和测试环境&#xff0c;这个接口数据量一样&#xff0c;就是在测试服务器比较慢&#xff0c;排除滚动插件及其它的影响…

Jmeter调试工具---HTTP Mirror Server

转自&#xff1a;http://www.cnblogs.com/puresoul/p/4907655.html 一、HTTP Mirror Server的作用&#xff1a; 它可以在本地临时搭建一个HTTP服务器&#xff0c;该服务器把接收到的请求原样返回&#xff0c;这样就可以看到发送出的请求的具体内容&#xff0c;以供调试。 二、…

520 单身福利|女朋友又找我要礼物

大家好&#xff0c;我是孙叫兽&#xff0c;520快到了&#xff0c;给大家分享一下单身福利&#xff01;时间过得真快&#xff0c;一转眼又到了 520&#xff0c;有对象的程序员又激动又扎心的节日&#xff0c;其实吧&#xff0c;程序员对这种节日又期待又焦灼&#xff0c;为什么呢…

pit和systick_PIT和TestNG突变测试简介

pit和systick变异测试是一种技术&#xff0c;它可以发现测试未涵盖代码的哪些部分。 它类似于代码覆盖范围 &#xff0c;但变异测试不限于在测试期间执行给定行的事实。 这个想法是修改生产代码&#xff08;引入突变&#xff09;&#xff0c;这应该改变其行为&#xff08;产生不…

使用vue-seamless-scroll自动滚动插件复制出来的数据点击事件无效的解决办法

引言&#xff1a;做可视化地图项目&#xff0c;使用vue-seamless-scroll实现表格数据自动滚动&#xff0c;有个bug就是复制出来的数据点击事件失效。这个插件底层的实现是cope的形式&#xff0c; 无限滚动原理&#xff1a;无限滚动的原理就是把之前的遍历的内容复制一份&#x…

最短路的几种算法及其优化(模板)

一.Dijkstra 算法 dijkstra算法适用于边权为正的情况&#xff0c;求单源最短路&#xff0c;适用于有向图和无向图 模板伪代码&#xff1a; 清除所有点的标号 设d[0]0&#xff0c;其余d[i]INF&#xff1b; 循环n次{ 在所有未标记的节点中&#xff0c;寻找d[i]最小的点x 给x做标记…

极客青年说,北京沙龙

大家好&#xff0c;我是孙叫兽&#xff0c;本期内容给大家分享infoq写作平台在北京站的沙龙主题。主要流程如下&#xff1a;早上起来&#xff0c;吃了点饭&#xff0c;然后就去北京望京悠乐汇的A1202,这次是个轰趴馆&#xff0c;比较适合年轻的程序员放松。去的稍微早了点&…

vue点击弹窗自动触发点击事件的解决办法

业务场景&#xff1a;使用vue element ui 的el-dialog&#xff0c;点击弹窗之后&#xff0c;默认加载第一个按钮的数据进行初始化。 div 指令&#xff1a; // 自动触发点击事件directives:{trigger:{inserted(el,binging){// console.log("自动触发事件")el.click()}…

vue根据表格字段不同的状态显示不同的颜色。

业务需求:根据后台返回的数据,对表格中的严重等级和问题状态做一下颜色区分。数据很大,大概一年左右的数据,在二级弹窗中,数据滚动的形式。 大家好,我是孙叫兽 不加状态前: 我这个使用vue+div循环的实现,很便捷,使用element ui也是可以的。 然后再computed:{}中添加…

Apache JMeter教程

要负载测试您的Web应用程序吗&#xff1f; 然后&#xff0c;您应该了解Apache JMeter &#xff01; 该JMeter教程介绍了基本概念以及如何创建测试计划以及如何执行它以对应用程序进行基准测试。 这是我在Disy的Tech-Blog上的文章的交叉张贴 -谢谢您让我在公司时间写文章&…

Echats给柱状图及提示文字添加百分号(%)的解决办法

业务需求&#xff1a;给柱状图添加百分号。 目录 柱状图上添加%效果图 悬浮标签添加%效果图&#xff1a; 刚开始从后台取的数据带%&#xff0c;我这边取这个值的时候显示undifined&#xff0c; 后来就让这哥们把这类的数据从数据库把%去掉。这样我这边就取到了数据&#xff0…

前端使用linux命令更新项目生产包与测试包命令

业务需求&#xff1a;把vue开发的项目打成dist.zip文件&#xff0c;丢到服务器去&#xff0c;通过域名进行访问。 首先登录云管平台的账号和密码&#xff0c;找到对应的服务器&#xff0c;然后连接到堡垒机。 在命令行进入到域名下的地址及目录。 切换到测试文件夹 点击左上角…

CSDN学习神器——CSDN浏览器助手测评体验

导读&#xff1a;大家好&#xff0c;我叫孙叫兽&#xff0c;本期内容给大家分享一下CSDN浏览器助手这款插件&#xff0c;看看最新版的插件已经比较完善了&#xff0c;还有一些可以优化的地方。下面简单进行体验一把最新版&#xff01; 体验时间&#xff1a;2021年5月31日。 目录…

CVE-2016-0143 漏洞分析(2016.4)

CVE-2016-0143漏洞分析 0x00 背景 4月20日&#xff0c;Nils Sommer在exploitdb上爆出了一枚新的Windows内核漏洞PoC。该漏洞影响所有版本的Windows操作系统&#xff0c;攻击者利用成功后可获得权限提升&#xff0c;微软在4月补丁日修复了该漏洞。 0x01 漏洞分析 Nils Sommer并没…

HB-X打不开的解决办法

导读&#xff1a;今早点击HB-X这款编译器的时候&#xff0c;点击快捷键和图标按钮一点反应都没有。死活打不开。 点击的时候一点提示都没有&#xff0c;重启电脑打开也是如此。 解决办法&#xff1a; 关机重启&#xff0c;一定要关机再重启。 其它情况请参考这个帖子&#xff…

【iCore3 双核心板_ uC/OS-III】例程五:软件定时器

实验指导书及代码包下载&#xff1a; http://pan.baidu.com/s/1eSHenjs iCore3 购买链接&#xff1a; https://item.taobao.com/item.htm?id524229438677 转载于:https://www.cnblogs.com/xiaomagee/p/5453762.html

前端 vue 在可视化大屏领域的工作实践

导读:最近入职了一家互联网公司,主要是做物联网及互联网解决方案方向,我上来就接手了这个项目,是一个可视化管理地图,主要用于某国企物业的安全预警的职能,说来也比较倒霉,刚来这公司,公司做这个项目的前端和后端都跑路了,然后让我一个月给他整改完,说是重构吧,还不…