【SERVERLESS】AWS Lambda上实操

通过Serverless的发展历程及带给我们的挑战,引出我们改如何改变思路,化繁为简,趋利避害,更好的利用其优势,来释放企业效能,为创造带来无限可能。

一 Serverless概述

无服务器计算近年来与云原生计算都是在互联网背景下产生,其顾名思义是指开发者在构建和运行应用时无需管理服务器等基础资源设施,应用被解耦为细粒度的函数,函数是部署和运行的基本单位。用户只为实际使用的资源付费。这些代码完全由事件触发(event-trigger),平台根据请求自动平行调整服务资源,拥有近乎无限的扩容能力,空闲时则没有任何资源在运行。代码运行无状态,可以轻易实现快速迭代、极速部署。

1.1 Serverless背景

  • 云计算演进历史

在快速发展的互联网时代,从最初的物理服务器,到使用XEN、KVM等虚拟化技术的虚拟机,再到云计算自动管理这些虚拟化资源,再到容器技术的出现,隔离了应用关于操作系统,现在,我们又有了Serverless,让用户无需关心程序运行环境、资源及数量,只要将精力 Focus 到业务逻辑上的技术。

云计算的发展从IaaS,PaaS,SaaS,到最新的BaaS,FasS,在这个趋势中Serverless(去服务器化)。

  • Serverless的组成

对于一个完整的应用,想要上Serverless,需要我们考虑前端,API网格即后端的服务以及对象存储数据库等,从技术角度来说,Serverless 就是 FaaS 和 BaaS 的结合。

FaaS(Function as a Service) 就是一些运行函数的平台,比如阿里云的函数计算、AWS 的 Lambda 等。

BaaS(Backend as a Service)则是一些后端云服务,比如云数据库、对象存储、消息队列等。利用 BaaS,可以极大简化我们的应用开发难度。

Serverless 则可以理解为运行在 FaaS 中的,使用了 BaaS 的函数。

1.2 Serverless特点

  • 无状态:但也决定了Serverless的无状态特性,因为每次函数执行,可能使用的都是不同的容器,无法进行内存或数据共享。如果要共享数据,则只能通过第三方服务,比如 Redis,COS 等。
  • 无运维:使用 Serverless 我们不需要关心服务器,不需要关心运维。这也是 Serverless 思想的核心。运维的发展经历了人肉运维,自动化运维,DevOps,AiOps等,而Serverless带来一种新的运维模式,这种模式下用户需要管理的只有Code可以认为NoOps。
  • 事件驱动编程:Serverless 的运行才计算,便意味着他是事件驱动式计算。
  • 低成本:运营成本,Serverless将用户的服务器,数据库,中间件委托于BaaS/FaaS,用户将不再参与基础设施及软件的维护,尤其在大规模的集群运营上成本大幅度降低。开发成本,对比IaaS或者PaaS平台的服务器或者操作系统,Serverless的架构中,用户操作的是服务化的组件比如存储服务,授权服务等,可以缩短开发周期,降低开发难度。
  • 按需计费:Serverless/FaaS区别于IaaS/PaaS预先分配计算资源的计费方式,其计费方式通常是按请求次数及运行时间,一方面可以最大程度利用资源,另一方面真正的按需计费可以降低用户的资源成本。据统计,商业和企业数据中心的典型服务器仅提供5%~15%的平均最大处理能力的输出,本质上这是对社会资源的一种浪费。而在Serverless架构下,提供商将提供更细力度的计算能力最大限度满足实时需求,资源利用率将大幅度提升,可以认为相对IaaS与PaaS Serverless/FaaS是一种 “绿色” 计算。
  • 弹性伸缩:Serverless架构一个显而易见的优点即“横向扩展是完全自动的、有弹性的、且由服务提供者所管理”。

二 Serverless带来的挑战

2.1 服务改造

  • 使用场景有限:Serverless并不是适用所有场景,在目前的发展情况下,Serverless适合事件驱动的异步工作流程,如果应用本身场景不适应,改造起来难度非常大,且后期很难达到成效。
  • 开发部署:目前Serverless的生态处于快速发展阶段,目前各大公有云厂商都有自己的Serverless产品,为了便于开发人员快速开发,厂商都针对自己的产品编写了各种IDE插件,可以自动补全,代码检测,并且可以一键自动化部署到云端,但是对于传统一些应用的覆盖面不到,目前还有很多需要持续优化改进的地方。
  • 运行测试:对于函数的测试,目前各大公有云也提供了运行测试用例,但是对于多个接口参数传递,目前还没有很好的功能支撑,对于想在部署节点集成到CI中,对此也非常的麻烦

2.2 基础设施挑战

  • 底层基础设施构建维护:目前对于开源Serverless,例如:Knative/Openfass/Kubeless还是OpenWhisk对于其的搭建、部署已经后期的维护,对于企业都带来了巨大的挑战,如果业务迁移上去,出现基础设施层问题,需要在短时间内进行修复,对运维人员提出了非常高的要求。
  • API的维护:对于将业务迁移上Serverless,对于后期大量的后端API的维护,没有统一的管控平台,或维护工具对此管理可谓异常困难,对于API的后期维护,不仅仅是来自统一仓库,更是需要将管控延伸到平台上。
  • 相关生态维护:对于Serverless不仅仅是后端的单个函数,其也包含Baas相关的产品,如果企业自己选型开源工具,需要同时维护API网关,对象存储,日志,监控等都需要用户自己实现,对此一入Serverless深似海,不但没有降低用户成本,反而带来了更大的技术挑战。

三 AWS Lambda概述

针对上述Serverless面对的挑战,我们需要清楚的认知知道的业务是否适用于Serverless的场景,拆分业务,对于某些接口,某一类模块功能是否可以迁移上Serverless来优化架构。

对于基础设施带来的挑战,在目前公有云快速发展的阶段,其为我们提供了统一的一站式上云体验,与最佳实践,在我们考虑范围内或未来可能遇到的问题,都已经替我们考虑到并解决,真正的实现了让我们在云计算的时代,用户将所有的精力关注在自身的业务创新,释放更大业务价值上,在此我们就AWS 的Lamdb进行展开实践。

3.1 AWS Lambda概述

  • 什么是AWS Lambda

AWS Lambda 是一项计算服务,可使您无需预配置或管理服务器即可运行代码。AWS Lambda 只在需要时执行您的代码并自动缩放,从每天几个请求到每秒数千个请求。您只需按消耗的计算时间付费 – 代码未运行时不产生费用。借助 AWS Lambda,您几乎可以为任何类型的应用程序或后端服务运行代码,并且不必进行任何管理。AWS Lambda 在可用性高的计算基础设施上运行您的代码,执行计算资源的所有管理工作,其中包括服务器和操作系统维护、容量预置和自动扩展、代码监控和记录。您只需要以 AWS Lambda 支持的一种语言提供您的代码。

  • Serverless生态

AWS Lambda是属于FaaS,Serverless还需要Baas的相关服务,公有云为我们提供了完整的一套解决方案,例如事件响应,更改Amazon S3 存储桶或 Amazon DynamoDB 表中的数据;以及使用 Amazon API Gateway 运行代码以响应 HTTP 请求;或者使用通过 AWS SDK 完成的 API 调用来调用您的代码。借助这些功能,您可以使用 Lambda 轻松地为 Amazon S3 和 Amazon DynamoDB 等 AWS 服务构建数据处理触发程序,处理 Kinesis 中存储的流数据,或创建您自己的按 AWS 规模、性能和安全性运行的后端。

对于DevOPS,您可以使用 CodePipeline 和 AWS CodeBuild 自动部署这些应用程序。

3.2 应用场景

Serverless 有一定的应用场景,分析自身业务的架构即场景,结合Serverless的特点,来拆解或将适应场景的业务迁移上Serverless。

  • 定制图片网店店家进行商品图片维护时,需要根据商品陈列位置,将图片动态切割成不同尺寸,或者打上不同水印。当店家把图片上传到对象存储 OSS上,会通过函数计算上定制的trigger来触发函数计算。根据计算规则,生成不同尺寸的图片,满足在线商品陈列需求,整个过程无需再搭建额外服务器,也无需网站美工干预。
  • 物联网中的低频请求物联网行业中,物联网设备传输数据量小,且往往是以固定时间间隔进行数据传输,因此经常涉及低频请求场景。例如:物联网应用程序每分钟仅运行一次,每次运行 50ms,这意味着CPU的使用率仅为 0.1%/小时,或者说有 1000 个相同的应用可以共享计算资源。而Serverless架构下,用户可以购买每分钟 100ms 的资源来满足计算需求,既能有效解决效率问题,也能降低使用成本。
  • 定制事件用户注册时发邮件验证邮箱地址,同样可以通过定制的事件来触发后续的注册流程,而无需再配置额外的应用无服务器来处理后续的请求。
  • 固定时间触发事件触发固定时间触发,例如在夜间或者服务空闲时间来处理繁忙时候的交易数据,或者运行批量数据,来生成数据报表,通过Serverless方式,不用再额外购买利用率并不高的处理资源。

四 AWS Lambda实践

您将使用 AWS Lambda 控制台创建一个 Lambda 函数。接下来,您将使用示例事件数据手动调用 Lambda 函数。AWS Lambda 将执行 Lambda 函数并返回结果。然后,您将验证执行结果,包括您的 Lambda 函数已创建的日志和各种 CloudWatch 指标,由于篇幅有限,在此我实践Lambda最基本的使用,后期高阶部分可以仓库官网,来享受一站式服务体验。

4.1 创建函数

打开 AWS Lambda 控制台,选择 Create a function。在函数名称中,输入函数名称,选择 Create function。

4.2 设计函数

设计器显示您的函数及其上游和下游资源的概述。您可以使用它来配置触发器、层和目标。

  • 创建函数

在此我们创建一个python 3.6 解释器运行时的函数。

创建完成后,我们可以看到函数模版代码为:

import jsondef lambda_handler(event, context):# TODO implementreturn {'statusCode': 200,'body': json.dumps('Hello from Lambda!')}

完成后,可以看到我们编写的函数。

4.3 运行测试

点击测试,创建测试事件,在此选择一个简单的hello world世界测试模版,自定义命名后,进行测试。

创建完成测试事件后,运行测试,可以看到运行的结构。

注意:每个用户每个函数可以创建最多 10 个测试事件。这些测试事件不适用于其他用户。

4.4 配置详解

我们可以先来看看运行测试后的结果输出。

通过打印结果,我们可以得出以下配置结论:

  • lambda_handler:该函数为lambda每次运行的函数,所有我们的业务逻辑在该函数内部进行编写,通过测试修改函数名称导致函数无法正常运行,该函数名称为固定的。
  • event:为我们需要处理的数据,也就是输入参数。
  • context:为该函数运行的一些信息,例如:aws_request_id为该函数调用后盛出的requestid,function_name为该函数的名称。
  • 在最后我们可以利用函数进行return结果等。

4.5 日志监控

4.5.1 查看日志

对于函数测试运行后,我们可以通过监控日志来查看函数运行的相关信息,

  • 执行结果:部分将执行状态显示为 succeeded,还将显示由 return 语句返回的函数执行结果。
  • 摘要:部分显示在 Log output 部分中报告的密钥信息(执行日志中的 REPORT 行)。
  • 日志输出:部分显示 AWS Lambda 针对每次执行生成的日志。这些是由 Lambda 函数写入到 CloudWatch 的日志。为方便起见,AWS Lambda 控制台为您显示了这些日志。

4.5.2 查看监控

对于函数运行监控,我们可以通过CloudWatch来进行查看,后期可以进行统计分析,函数的瓶颈及并发数,进行调优。

4.6 资源清理

再使用完成函数后,进行相关资源清理,再清理资源的时候有用有日志和IAM角色,也需要一并清理。

  • 删除lambda函数

  • 删除日志组

  • 删除执行角色

至此就完成了整个函数、角色和日志组的清理工作。

4.7 注意事项

  • 并发性:当函数代码运行时,如果有另外一个请求,那么需要去配置函数并返现,预配置另一个实例来提升函数的并发性。并发性受区域级别限制的约束
  • 触发器:是调用 Lambda 函数的资源或配置。这包括可配置为调用函数的 AWS 服务、您开发的应用程序以及事件源映射。事件源映射是 Lambda 中的一种资源,它从流或队列中读取项目并调用函数。
  • Virtual Private Cloud (VPC) – 如果您的函数需要通过网络访问无法在 Internet 上获得的资源,需要将其配置连接到VPC才能正常获取Internet上的资源。
  • 对于敏感数据,可以通过环境变量来注入到函数中,以保证函数的安全性。

五 Serverless上的思考

在使用 AWS Lambda 时,您只需负责自己的代码。AWS Lambda 管理提供内存、CPU、网络和其他资源均衡的计算机群。函数计算虽然适用于很多场景,但也不是覆盖全部应用场景的万金油,无服务器云函数想要后期更快的发展,需要进行业务逻辑的精细梳理和各函数调用,其次需要云厂商多个性化定制服务,已经自己需要完善生态,最少无服务器云函数支持自家云上各产品。虽然目前来说Serverless还是有不少的局限性,Serverless一直在发展完善中,广大开发者和服务提供者都在寻找Serverless的无限可能。

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

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

相关文章

B004-表达式 类型转换 运算符

目录 表达式数据类型转换自动转换强制转换 运算符数学运算符自增自减运算符i与 i的区别 赋值运算符比较运算符位运算符(了解)逻辑运算符三目运算符 表达式 /*** 表达式定义:由常量 变量 运算符 括号组成的算式,为了按照一定的运算规则计算出结果值* 括…

Java中创建多线程的方法

继承Thread类,对该类进行new一个实例,对实例调用start方法,重写run方法。 缺点:单继承,无法继承 public class myThread extends Thread {public static void main(String[] args) {myThread myThread new myThread()…

【机器学习入门】集成学习之梯度提升算法

系列文章目录 第1章 专家系统 第2章 决策树 第3章 神经元和感知机 识别手写数字——感知机 第4章 线性回归 第5章 逻辑斯蒂回归和分类 第5章 支持向量机 第6章 人工神经网络(一) 第6章 人工神经网络(二) 卷积和池化 第6章 使用pytorch进行手写数字识别 实操练习 使用Yolo模型进…

合并单元格的excel文件转换成json数据格式

github地址: https://github.com/CodeWang-Ay/DataProcess 类型1 需求1: 类似于数据格式: https://blog.csdn.net/qq_44072222/article/details/120884158 目标json格式 {"位置": 1, "名称": "nba球员", "国家": "美国"…

项目实战 | 使用python分析Excel销售数据(用groupby)

项目实战 | 使用python分析Excel销售数据 本文目录: 零、00时光宝盒 一、提出问题 二、理解数据 2.1、安装python读取excel文件的库 2.2、查看excel表的字段名和前几行记录 2.3、查看excel表结构 2.4、查看索引 2.5、查看每一列的列表头内容 2.6、查看每一…

AutoCAD 2024 安装注册教程

前言 大家好,我是梁国庆。 本篇分享的安装包是 AutoCAD 的全新版本——AutoCAD 2024,下文安装教程中简称 AutoCAD。 时间:2024年4月8日。 获取 AutoCAD 安装包 我已将本篇所使用的安装包打包上传至百度云,扫描下方二维码关注…

A Learning-Based Approach for IP Geolocation(2010年)

下载地址:Towards IP geolocation using delay and topology measurements | Proceedings of the 6th ACM SIGCOMM conference on Internet measurement 被引次数:185 Eriksson B, Barford P, Sommers J, et al. A learning-based approach for IP geolocation[C]//Passive …

VRRP(虚拟路由冗余协议)详解

VRRP-------虚拟路由冗余协议 在一个网络中,要做为一个合格的网络首先就要具备几种冗余,增加网络的可靠性。 这几种冗余分别为:线路冗余,设备冗余,网关冗余,UPS冗余 VRRP该协议就是解决网关冗余的。在二层…

同态加密:重塑数据隐私与安全的未来

同态加密技术是当今信息安全领域的一个重要研究方向,它允许在加密数据上直接进行计算,而无需将数据解密。这种加密方式对于保护数据隐私和增强云计算安全具有重要意义。在这篇文章中,我们将深入探讨同态加密的基本概念、技术特点、应用场景以…

[react] useState的一些小细节

1.无限循环 因为setState修改是异步的,加上会触发函数重新渲染, 如果代码长这样 一秒再修改,然后重新触发setTImeout, 然后再触发,重复触发循环 如果这样呢 还是会,因为你执行又会重新渲染 2.异步修改数据 为什么修改多次还是跟不上呢? 函数传参解决 因为是异步修改 ,所以…

day 74 js

JS的作用&#xff1a; 修饰 HTML 标签&#xff08;CSS&#xff09;设置 HTML 标签的动作&#xff08;JS&#xff09;JS特点&#xff1a;基于对象的编程语言&#xff0c;通过浏览器解释执行作用&#xff1a;表单验证、改变标签样式、获取和设置标签属性值 1 表单验证: <fo…

抽象工厂模式:深入探索面向对象设计的多样性

在软件开发中&#xff0c;正确地应用设计模式对于构建可扩展、可维护和高效的系统至关重要。抽象工厂模式作为创建型设计模式之一&#xff0c;提供了一个高层接口&#xff0c;用于创建一系列相关或依赖对象&#xff0c;而无需指定它们具体的类。本文将详细介绍抽象工厂模式的概…

MyBatis源码介绍

文章目录 MyBatis的核心流程介绍SqlSessionFactory的理解MyBatis中的Executor的源码理解Spring中是如何解决MySQL的SqlSession的线程安全问题MyBatis面向Mapper编程工作原理Mybatis动态sql执行原理Mybatis的一级、二级缓存实现原理Mybatis的插件运行原理以及如何编写一个插件my…

【攻防世界】web2(逆向解密)

进入题目环境&#xff0c;查看页面信息&#xff1a; <?php $miwen"a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";function encode($str){$_ostrrev($str);// echo $_o;for($_00;$_0<strlen($_o);$_0){$_csubstr($_o,$_0,1);$__ord($_c)1;…

排序之快速排序

代码 class Solution {public int[] sortArray(int[] nums) {merge(nums, 0, nums.length - 1);return nums;}private void merge(int[] nums, int l, int r){if(l > r) return;// 随机选取主元int i new Random().nextInt(r - l 1) l;int temp nums[i];nums[i] nums[…

【好用】推荐10套后端管理系统前端模板

后台管理系统前端模板是开发者在构建后台管理系统时使用的一种工具&#xff0c;它提供了预先设计好的界面和组件&#xff0c;以帮助开发者快速搭建出功能完善、用户体验良好的管理系统。以下是V哥整理的10款流行的后台管理系统前端模板&#xff0c;它们基于不同的技术栈和设计理…

第一部分 Vue讲解(代码版)

1.第一个vue实例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-w…

要申请开通融资融券账户,有那些条件?

1、什么是融资融券交易? 融资融券交易&#xff0c;又称信用交易&#xff0c;是指投资者向具有融资融券业务资格的证券公司提供担 保物&#xff0c;借入资金买入交易所上市证券&#xff08;融资交易&#xff09;或借入交易所上市证券并卖出&#xff08;融券交易&#xff09; 的…

【vue】v-model.lazy等(非实时渲染)

v-model&#xff1a;实时渲染v-model.lazy&#xff1a;失去焦点/按回车后&#xff0c;才渲染v-model.number&#xff1a;值转换为数字v-model.trim&#xff1a;去除首尾空格 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…

ansible的常见用法

目录 ##编辑hosts文件 ##copy模块##复制过去 ##fetch模块##拉取 ##shell模块 ##好用 ##command模块## ##file模块### ##cron模块### ##crontab 计划任务 ##下载好时间插件 ##script模块 ##yum模块## ##yum下载源配置文件 /etc/yum.repos.d/CentOS-Base.repo ##ser…