0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

无服务器架构的基本概念及运维

茶棚小二 来源:茶棚小二 作者:茶棚小二 2022-04-06 10:40 次阅读

前言

在介绍运维之前,大家先来快速了解一下无服务器(serverless)的概念。由于笔者的实战经验是在AWS平台上,本文中出现的无服务器均指使用AWS Lambda构建的serverless应用。Serverless的特点是用户无需预配置或管理服务器,只需要部署功能代码,服务会在需要的时候执行代码并自动伸缩,从每天几个请求到每秒数千个请求,轻松地实现FaaS(Function as a Service)。如下图所示:

无服务器架构的基本概念及运维

(图片来自网络)

在传统的应用中,开发团队除了需要编写功能代码,还要监控实时负载,并相应地对应用进行伸缩,还要处理一些因非功能性故障导致的停机(硬盘、内存等)。而无服务器架构则将开发团队从服务器维护的工作中解放出来,继而能更专注在功能代码上(图中的Function)。在实际的项目里,开发者只需将功能代码打包上传到AWS Lambda,再进行少量配置(环境变量,触发条件,内存,超时时间等)即可将应用/服务上线。

以上是无服务器架构的基本概念。接下来,笔者将从日志,指标,监控及报警,灾备这四个维度来介绍无服务器架构下的运维。

日志

默认情况下,应用运行时产生的日志会保存在应用服务器本机,在需要查看日志的时候,需要运维人员远程登录到这台服务器获取日志信息。这种方式操作起来稍显繁琐,而且当应用服务器的数量增多后,由于需要先找出产生错误信息的那台服务器,会严重降低查找日志的效率。

一种解决办法是ELK(ElasticSearch, Logstash, Kibana),这三个开源工具各司其职,Logstash负责日志的推送和转换,ElasticSearch作为数据库与搜索引擎,Kibana作为图形界面。好处是搭建容易,良好的伸缩性,以及免费。但带来的额外成本是,独立出来的日志服务也需要做好全方位的监控(应用状态,硬盘,网络等),避免因为基础服务的问题导致系统全面故障。

AWS无服务器架构中的日志是一个开箱即用的服务,所有日志自动采集到AWS CloudWatch Logs中,只要根据服务名称找到对应的日志组,即可进行查询搜索,不需要任何配置,也没有任何维护成本。

无服务器架构的基本概念及运维

指标

通常情况下,运维工作会包含采集线上应用的运行指标,来反映应用的健康状况,故障率,性能,访问量,访问频率等。这里以一个使用Spring Boot构建的API服务来举例,Spring Boot中的Actuator扮演了采集指标的角色。默认配置下,对于每个API,Actuator会自动采集以下几个指标:

uri,例如/api/person/{id}

method,例如GET或POST

status,例如200或500

当然我们可以通过实现一些接口来扩展/自定义采集指标,这里就不展开了。有了指标数据,还需要对应的报表或仪表盘工具,以便更好地查询和展示,可以选择像Prometheus,Grafana这样的工具。

那么AWS无服务器架构是否提供了类似的指标采集呢?答案是肯定的,AWS CloudWatch Metrics自动采集了Lambda function的以下四个指标:

Invocations(实际调用量)

Errors

Duration(执行时间)

Throttles(超过并行限制而被阻止的调用的数量)

Invocations和Errors取一段时间的总数,结合二者可以得出应用的错误率,如下

无服务器架构的基本概念及运维

Duration则通过取平均数来反映一段时间的性能表现,在笔者的项目中Lambda function的耗时主要集中在SQL的查询上,这个数字可以相应地反映技术人员对查询优化的效果。当然,在实际情况中,这些检验都可以在预发布环境下进行,这个例子只是为了方便理解。

无服务器架构的基本概念及运维

在笔者目前的项目中,Throttle并未被使用到,默认的并发限制是1000/秒,而用量最大的Lambda function的调用频率也不过每分钟150次,距离超限差得很远,不过这一数据对于并发高的应用有很重要的意义。

除了开箱即用的几个指标以外,还可以结合CloudWatch metrics的API,在相应的功能代码中埋点,定制化采集指标。例如,对于一个Lambda function,代码里三个子task,默认提供的Duration只能反映总体的运行效率,如果需要统计每个task的消耗,就需要用到AWS CloudWatch metrics API。

监控&报警

监控的意义在于全面了解应用的资源使用率,性能和运行情况,这些数据可以用来帮助团队及时作出调整,保证应用程序顺畅运行。这通常包括CPU使用率,数据传输,磁盘使用等。在突发状况导致系统不可用的时候,团队的响应速度,往往取决于监控和报警的及时性,全面性和准确度。如果能在对历史数据的分析之上对监控系统进行合理的配置,团队甚至能预测不好的事情将要发生,提前做好防范,未雨绸缪。

同上,这里还是以一个Spring Boot应用为例,在上一小节指标数据的采集中提到过Actuator,事实上Actuator除了可以记录上面提到的指标,还可以用来收集监控数据。这里我们只需要设置一个Spring Boot Admin应用,给需要进行监控的应用加上Spring Boot Admin client配置,监控数据就会通过Actuator暴露的API传递给Spring Boot Admin。

无服务器架构的基本概念及运维

报警功能一般则要根据实际情况自行实现。Spring Boot Admin中实现了对Pagerduty,Slack等第三方工具的集成,如果只是需要简单的邮件提醒,实现起来也不复杂,这里就不展开了。

随着云上基础设施的普及,上面提到的监控和报警早已是各个平台的标准配置,根本轮不到开发者去操心如何实现及维护,运营团队可以把更多的精力放在配置优化的工作中去。

AWS默认提供了非常完备的监控数据,也允许自定义监控dashboard,通过把一系列重要的指标添加到创建好的dashboard中,应用的运行状况一目了然。

无服务器架构的基本概念及运维

前面已经提到过,在出现错误,或性能底下时,根据某些关键指标的变动情况发送警告通知非常必要。笔者所在的项目的做法是使用AWS CloudWatch和AWS SNS提供的告警通知功能,只需要先选择指标然后设定触发阈值和检查间隔时间即可,AWS SNS支持HTTP、SMS、Email等多种订阅方式。下图展示了如何设定当某个Lambda在过去5分钟内发生了5次以上错误的时候发送通知。

无服务器架构的基本概念及运维

灾难备份&恢复

在系统镜像,构建工具还有容器技术越来越普及的今天,灾难备份的意义很大程度上是为了有效保护重要数据。通常的做法是设定一些定期任务,将数据传输到远端的灾备中心,从物理上抵御不可抗灾难。如果数据量过大,出现网络传输效率跟不上的情况,可以参考AWS用卡车拉数据的解决办法。

真正需要用到灾难备份的情况在笔者有限的经历中还没有发生过,但是如果不未雨绸缪,真正发生时的后果将难以设想。笔者项目中用到的AWS RDS默认启用了以7天为周期的自动备份,这个配置可以手动调整也可以将配置写入构建基础设施的脚本中去。 如果灾难真的发生,光有数据备份是不够的,还需要能够快速重建应用运行时的基础设施。笔者所在的团队(下文简称团队)分别使用了AWS CloudFormation和Serverless framework,CloudFormation用来重建数据库、网络等基础设施,Serverless framework用来重建Lambda function,在重建数据库的时候,通过持续集成流水线,以环境变量的方式传入最近一次数据备份快照的Id,15分钟以内即可重建一套产品环境。

总结

笔者所在的团队是10个人左右的配置,采用结对编程的方式,3对pair,包含web端、业务层、数据层。从产品原型确定到第一次上线(MVP)耗时30天,每周至少发布一次新版本,story的平均交付时间(cycle time,从需求确定到上线)为8天。这样的速度也许不能算快,但是如果没有Serverless架构在运维端提供的支持,我们想要在交付速度上有更高的突破会困难得多。

最后来谈一下成本,俗话说抛开商业化谈技术都是耍流氓,大部分人看到一个强大易用的工具都会下意识里觉得开销会很大。实际上并不是这样,我们做了一个粗算,选用双核CPU,8G内存的M4型服务器,开销是$72每月。dev,staging,prod三个环境都用同样的配置就是$216每月,而实际上Lambda每个月的开销包含所有环境在$20左右,需要注意的是Lambda的计费是根据使用量来的,我们的API访问大约在150万每月的量级。可以预见到当访问达到一定数量的时候Lambda的开销会和使用服务器的方案持平甚至更大,但是在量小的时候优势明显。

得益于强大的AWS生态,利用Lambda构建的无服务器应用经过少量甚至无需任何配置,即可以极低的价格获得完整的运维功能和体验。与自己利用开源工具进行搭建的方式相比,研发团队可以从繁琐的运维工作——特别是基础工程搭建——中解脱出来,更加专注于产品本身,极大的提高软件交付速度,可用性、可靠性和可扩展性也相当有保障。换来的代价是更高的迁移成本,某些功能的不可定制化可能成为瓶颈,以及对底层实现原理的屏蔽也可能对开发者的学习和成长有影响。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    8125

    浏览量

    82546
  • 架构
    +关注

    关注

    1

    文章

    485

    浏览量

    25200
  • 运维
    +关注

    关注

    1

    文章

    189

    浏览量

    7354
收藏 人收藏

    评论

    相关推荐

    什么是DTU和串口服务器的区别

    在工业物联网的快速发展中,数据传输单元(DTU)和串口服务器作为两种关键设备,各自扮演着重要的角色。对于传统行业来说,了解它们的基本概念和区别,有助于更好地选择和应用这些技术,提升生产效率和智能化
    的头像 发表于 04-25 20:48 39次阅读

    服务器远程不上服务器怎么办?服务器无法远程的原因是什么?

    运营商。 2.服务器网络问题 解决办法:通过路由图来确定是哪里的线路出现丢包,联系服务器商切换线路。 二、服务器问题 服务器带宽跑满、服务器
    发表于 02-27 16:21

    linux服务器和windows服务器

    Linux服务器和Windows服务器是目前应用最广泛的两种服务器操作系统。两者各有优劣,也适用于不同的应用场景。本文将 对Linux服务器和Windows
    发表于 02-22 15:46

    接地装置的基本概念

    接地装置的基本概念
    的头像 发表于 12-05 15:49 261次阅读
    接地装置的<b class='flag-5'>基本概念</b>

    amazon s3采用什么架构涉及的基本概念是什么

    用户提供了存储和备份的功能,还为开发者提供了存储、下载和分发大型文件的能力。本文将详细介绍Amazon S3的架构基本概念。 S3的架构 Amazon S3采用了分布式架构,将数据分
    的头像 发表于 12-03 16:37 899次阅读

    软开关的基本概念及分类 典型的软开关电路介绍

    软开关技术的主要内容有:软开关的基本概念、软开关电路的分类、典型的软开关电路、软开关技术新进展等。
    的头像 发表于 11-22 16:08 1016次阅读
    软开关的<b class='flag-5'>基本概念及</b>分类 典型的软开关电路介绍

    服务器并发的概念

    自己调整系统的相关参数 并发的概念是什么?什么是并发? 对于服务器并发的概念,下面几点是错误的定义 ①服务器处理客户端请求的数量:没有时间、空间等限制,因此不能作为并发的
    的头像 发表于 11-10 10:05 1378次阅读
    <b class='flag-5'>服务器</b>并发的<b class='flag-5'>概念</b>

    天线的几个基本概念

    电子发烧友网站提供《天线的几个基本概念.ppt》资料免费下载
    发表于 10-07 16:17 0次下载
    天线的几个<b class='flag-5'>基本概念</b>

    智能技术的发展和设计资料

    )和大数据技术(BigData),设计开发智能终端和后台服务器系统,实现对变电站设备的实时增强显示、缺陷告警、缺陷分析与判断智能化、缺陷远程专家会诊等功能。
    发表于 09-21 07:18

    pc服务器服务器的区别是什么

    按上图指令架构分类,服务器可以分为: CISC复杂指令集 CISC服务器也称为 x86服务器,目前比较主流。主要是采用Intel、AMD处理器芯片。 iRISC精简指令集 RI
    发表于 08-25 09:48 1200次阅读
    pc<b class='flag-5'>服务器</b>和<b class='flag-5'>服务器</b>的区别是什么

    ARM服务器基础系统体系结构7.1平台设计文档

    服务器基本系统架构嵌入了功能级别的概念。每个级别都在前一级别之上添加了功能。除非明确说明,属于N级的所有规格项均适用于大于N的级。 一个标高的所有视图都需要实现以符合该标高。 SBSA合规性
    发表于 08-09 07:49

    LoRaWAN技术的基本概念 LoRaWAN服务器ChirpStack搭建教程

    LoRaWAN技术的应用范围越来越广泛,而ChirpStack作为⼀款备受开发者青睐的优秀LoRaWAN服务器,支持多种操作系统和硬件平台,可在不同场景下快速部署和使用。
    的头像 发表于 07-21 09:53 531次阅读
    LoRaWAN技术的<b class='flag-5'>基本概念</b> LoRaWAN<b class='flag-5'>服务器</b>ChirpStack搭建教程

    什么是服务器指令?

    服务器
    YS YYDS
    发布于 :2023年06月23日 01:02:04

    服务器与PC机的比较

          第1章、什么是服务器 服务器的逻辑架构仍然遵循冯·诺依曼架构,主要包含:处理器(CPU、GPU、DPU等)、存储器、I/O接口,以及SSD、BMC、PCIe插槽、主板、电源
    的头像 发表于 06-17 14:51 549次阅读
    <b class='flag-5'>服务器</b>与PC机的比较

    德索讲解LVDS线束的基本概念

    德索精密工业工程师指出,线束(circuit group)为一定负载源组提供服务设备的总体,如中继线路、交换装置、控制系统等。话务理论的基本研究内容是研究话务量、呼损和线束容量三者之间的关系,因此线束是话务理论中一个重要的基本概念
    的头像 发表于 06-12 09:25 2758次阅读
    德索讲解LVDS线束的<b class='flag-5'>基本概念</b>