微服务架构系列主题:庖丁解牛Serverless

本文转自:51cto

目录

架构演进史

Serverless 基本概念

Serverless应用场景 

Serverless 技术转型指南

 选型意见


架构演进史

要讲 Serverless,我们首先要了解传统的单体应用架构是如何一步一步发展到如今火爆的云原生架构的。

微服务架构系列主题:庖丁解牛Serverless_第1张图片

Serverless 基本概念

根据CNCF的定义,Serverless是指构建和运行不需要服务器管理的应用程序的概念。Serverless的中文含义是“无服务器”,但是它真正的含义是开发者不用过多考虑服务器的问题,而不是完全去除服务器,是依靠第三方资源服务器后端,来执行代码。

Serverless架构可分为Backend as a Service(BaaS)和Functions as a Service(FaaS)两种技术,Serverless是由开发者实现的服务端逻辑运行在无状态的计算容器中,它是由事件触发,完全被第三方管理的。

微服务架构系列主题:庖丁解牛Serverless_第2张图片

Serverless应用场景 

Web应用

Serverless 架构可以很好地支持各类静态和动态Web应用。如 RESTful API 的各类请求动作(GET、POST、PUT及DELETE等)可以很好地映射成 FaaS 的一个个函数,功能和函数之间能建立良好的对应关系。通过 FaaS 的自动弹性扩展功能,Serverless Web 应用可以很快速地构建出能承载高访问量的站点。

移动互联网

Serverless 应用通过 BaaS 对接后端不同服务而满足业务需求,提高应用开发的效率。前端通过FaaS提供的自动弹性扩展对接移动端的流量,开发者可以更轻松地应对突发的流量增长。在 FaaS 的架构下,应用以函数的形式存在。各个函数逻辑之间相对独立,应用更新变得更容易,使新功能的开发、测试和上线的时间更短。

物联网

物联网(Internet of Things,IoT)应用需要对接各种不同的数量庞大的设备。不同的设备需要持续采集并传送数据至服务端。Serverless 架构可以帮助物联网应用对接不同的数据输入源。

多媒体处理

视频和图片网站需要对用户上传的图片和视频信息进行加工和转换。但是这种多媒体转换的工作并不是无时无刻都在进行的,只有在一些特定事件发生时才需要被执行,比如用户上传或编辑图片和视频时。通过 Serverless 的事件驱动机制,用户可以在特定事件发生时触发处理逻辑,从而节省了空闲时段计算资源的开销,最终降低了运维的

数据及事件流处理

Serverless 可以用于对一些持续不断的事件流和数据流进行实时分析和处理,对事件和数据进行实时的过滤、转换和分析,进而触发下一步的处理。比如,对各类系统的日志或社交媒体信息进行实时分析,针对符合特定特征的关键信息进行记录和告警。

系统集成

Serverless 应用的函数式架构非常适合用于实现系统集成。用户无须像过去一样为了某些简单的集成逻辑而开发和运维一个完整的应用,用户可以更专注于所需的集成逻辑,只编写和集成相关的代码逻辑,而不是一个完整的应用。函数应用的分散式的架构,使得集成逻辑的新增和变更更加灵活。

Serverless 技术转型指南

要讲 Serverless,我们首先要了解传统的单体应用架构是如何一步一步发展到如今火爆的云原生架构的。

支持的编程语言 部署方式 定价模型和计费因素 功能函数触发类型 执行时间和并发数
AWS Lambda Python、Node.js、Java、C#、Visual Basic、F# Lambda 控制台配置和部署 每月100万个请求和每秒400,000 GB的计算时间(computing time)免费。 通过API提供已配置的触发器类型。使用API网关作为API触发器,通过Amazon S3作为基于文件的触发器,以及通过DynamoDB来执行动态触发。 并发数为1,000个,其最长执行时间为15分钟。
Azure Functions JavaScript、Node.js、C#、F#、Python、PHP、Bash、Batch、Powershell 外部包 URL、压缩部署、Docker 容器、Web 部署、源代码管理、本地 Git等 提供免费的套餐 通过API提供已配置的触发器类型。Azure建议使用其他的Microsoft服务、Azure事件中心和Azure存储,来实现Web API触发和计划性调用。 通过API提供已配置的触发器类型。Azure建议使用其他的Microsoft服务、Azure事件中心和Azure存储,来实现Web API触发和计划性调用。
腾讯云SCF 主流编程语言和自定义运行环境 Python、Node.js、PHP、Golang、Java 及 Custom Runtime;目前SCF已经支持通过容器镜像的方式启动应用 支持控制台部署,命令行部署,SDK/API部署,Web IDE直接部署以及镜像部署 支持按1ms时间粒度计费;每月免费额度:100万次函数调用,40万GBs资源使用量 支持事件触发与 HTTP 请求触发两种触发模式;Web Function支持原生的Socket监听的方式触发,改造成本更低 默认最大并发:默认可支持1,000并发, 可选择使用预置并发进行预热,降低冷启动时间;首创异步执行模式,解锁长时重计算,可支持长达24小时的计算任务;默认账号的地域级别扩容速度为每分钟可500个函数实例,可通过工单申请提升以上的配额限制。
阿里云FC Node.js、Python、PHP、Java 等等 控制台、Funcraft、VSCode 每月前100万次函数调用免费。 每月前400,000(GB-秒)函数实例资源使用量免费。 IoT触发器、表格存储(OTS)触发器、日志服务(SLS)触发器、消息队列(MNS)触发器、内容分发网络(CDN)触发器 函数计算一个地域(Region)中按量实例数的上限默认值为300,一个地域可以同时处理的最大请求数为“300×InstanceConcurrency”。

 选型意见

  1. 企业需要评估现有软件资产及发展目标。如果企业中已经拥有不少云资产,应明确列出现有部署方案、具体使用哪些云服务商以及对应的可用区。
  2. 分布全球各地而且对延迟要求严苛的服务,则特别适合部署在多可用区或边缘端点之上。
  3. 如果您的企业已经拥有丰富的Kubernetes使用经验,不妨考虑选择Kubernetes的各类开源无服务器平台。但如果没什么Kubernetes经验,最好还是选择原生云FaaS基础设施。
  4. 如果企业所构建的无服务器应用程序依赖于云数据库或流媒体服务,则应考虑将它们部署在同一云环境内,最大程度降低应用程序之内各组件间的延迟。但是,这不会对无服务器框架选择造成太大影响。
  5. 在大多数情况下,您的应用程序可能与常见用例颇为相似、甚至完全相同。这时候,大家就应认真评测目标无服务器平台的示例和库资源,看看有没有能够拿来就用的参考架构。
  6. 事实上,大部分函数即服务系统并不需要编写大量代码:FaaS拥有丰富的可重用代码资源,而且架构本身也经过良好测试及验证。无需大量调试,企业就可以将其化为己用、大大提升工作效率。

你可能感兴趣的:(IT-微服务,Serverless)