从单体迈向Serverless的避坑指南

凌云时刻 · 技术linux

导读:用户需求和云的发展两条线推进了云原生技术的兴起、发展和大规模应用。本文将主要讨论什么是云原生应用,构成云原生应用的要素是什么,什么是Serverless 计算,以及Serverless如何简化技术复杂度,帮助用户应对快速变化的需求,实现弹性、高可用的服务,并经过具体的案例和场景进行说明。数据库

做者 | 不瞋c#

来源 | 凌云时刻(微信号:linuxpk)后端

前言服务器

 

现在,各行各业都在谈数字化转型,尤为是新零售、传媒、交通等行业。数字化的商业形态已经成为主流,逐渐替代了传统的商业形态。在另一些行业里(如工业制造),虽然企业的商业形态并不是以数字化的形式表现,可是在数字孪生理念下,充分利用数据科技进行生产运营优化也正在成为研究热点和行业共识。微信

 

企业进行数字化转型,从生产资料、生产关系、战略规划、增加曲线四个层面来看:网络

  • 生产资料:数据成为最重要的生产资料,需求/风险随时变化,企业面临巨大的不肯定性。架构

  • 生产关系:数据为中心,非基于流程和规则的固定生产关系。网络效应令生产关系跨越时空限制,多链接方式催生新的业务和物种。负载均衡

  • 战略规划:基于数据决策,快速应对不肯定的商业环境。框架

  • 增加曲线:数字化技术带来触达海量用户的能力,可带来突破性的增加。

 

从云服务商的角度来看云的演进趋势,在Cloud 1.0时代,基础设施的云化是其主题,采用云托管模式,云上云下的应用保持兼容,传统的应用能够直接迁移到云上,这种方式的核心价值在于资源的弹性和成本的低廉;在基础设施提供了海量算力以后,怎么帮助用户更好地利用算力,加速企业创新的速度,就成为云的核心能力。

若是仍在服务器上构建基础应用,那么研发成本就会很高,管理难度也很大,所以有了Cloud 2.0,也就是云原生时代。在云原生时代,云服务商提供了丰富的托管服务,助力企业数字化转型和创新,用户能够像搭积木同样基于各类云服务来构建应用,大大下降了研发成本。

云原生应用要素

云原生应用有三个很是关键的要素:微服务架构,应用容器化和Serverless化,敏捷的软件交付流程。

 微服务架构

单体架构和微服务架构各有各的特色,其主要特色对好比下图所示。总的来讲,单体架构上手快,可是维护难,微服务架构部署较难,可是独立性和敏捷性更好,更适合云原生应用。

单体架构VS微服务架构

 应用容器化和Serverless化

容器是当前最流行的代码封装方式,借助K8s及其生态的能力,大大下降了整个基础设施的管理难度,并且容器在程序的支撑性方面提供很是出色的灵活性和可移植性,愈来愈多的用户开始使用容器来封装整个应用。

 

Serverless计算是另一种形态,作了大量的端到端整合和云服务的集成,大大提升了研发效率,可是对传统应用的兼容性没有容器那么灵活,可是也带来了很大的整洁性,用户只须要专一于业务逻辑的编码,聚焦于业务逻辑的创新便可。

 敏捷的应用交付流程

敏捷的应用交付流程是很是重要的一个要素,主要包括流程自动化,专一于功能开发,快速发现问题,快速发布上线。

Serverless 计算

 阿里云函数计算

Serverless是一个新的概念,可是其内涵早就已经存在。阿里云或者AWS的第一个云服务都是对象存储,对象储存实际上就是一个存储领域的Serverless服务;另外,Serverless指的是一个产品体系,而不是单个产品。当前业界云服务商推出的新功能或者新产品绝大多数都是Serverless形态的。阿里云Serverless产品体系包括计算、存储、API、分析和中间件等,目前云的产品体系正在Serverless化。

阿里云Serverless计算平台函数计算,有4个特色:

  • 和云端无缝集成:经过事件驱动的方式将云端的各类服务与函数计算无缝集成,用户只须要关注函数的开发,事件的触发等均由服务商来完成。

  • 实时弹性伸缩:由系统自动完成函数计算的弹性伸缩,且速度很是快,用户能够将这种能力用在在线应用上。

  • 次秒级计量:次秒级的计量方式提供了一种彻底的按需计量方式,资源利用率能达到百分之百。

  • 高可用:函数计算平台作了大量工做帮助用户构建高可用的应用。

那么,阿里云函数计算是如何作到以上4点呢?阿里云函数计算的产品能力大图以下图所示,首先函数计算产品是创建在阿里巴巴的基础设施服务之上的产品,对在其之上的计算层进行了大量优化。接着在应用层开发了大量能力和工具,基于以上产品能力,为用户提供多种场景下完整的解决方案,才有了整个优秀的函数计算产品。函数计算是阿里云的一个很是基础的云产品,阿里云的许多产品和功能均是创建在函数计算的基础上。目前阿里云函数计算已经在全球19个区域提供服务。

阿里云函数计算产品能力大图

 Serverless帮助用户简化云原生应用高可用设计、实施的复杂度

云原生应用的高可用是一个系统的工程,包括众多方面,完整的高可用体系构建须要不少时间和精力。那么Serverless计算是如何帮助用户简化云原生应用高可用设计、实施的复杂度呢?

 

以下图所示,高可用体系建设要考虑的点包括基础设施层、运行时层、数据层以及应用层,且每一层都有大量的工做要作才能够实现高可用。函数计算主要是从容错、弹性、流控、监控四方面作了大量工做来实现高可用,下图中蓝色虚线框所对应的功能均由平台来实现,用户是不须要考虑的。蓝色实线框虽然平台作了一些工做来简化用户的工做难度,可是仍须要用户来进行关注,而橘红色的实线框表明须要用户去负责的部分功能。结合平台提供的功能和用户的部分精力投入,能够极大地减轻用户进行高可用体系建设的难度。

函数计算高可用

函数计算在不少方面作了优化来帮助用户建设高可用体系。下图展现了函数计算在可用区容灾方面的能力。从图中可知,函数计算作了相应的负载均衡,使得容灾能力大大提高。

函数计算多可用区容灾

下图展现的是函数计算对事件的异步处理,其处理流水线主要包括事件队列、事件分发、事件消费三个环节,在每个环节上均可以进行水平伸缩,其中一个比较关键的点是事件的分发须要匹配下游的消费能力。另外,经过为不一样函数指定不一样数量的计算资源,用户能方便地动态调整不一样类型事件的消费速度。此外,还能够自定义错误重试逻辑,而且有背压反馈和流控,不会在短期内产生大量请求时压垮下一个服务。

函数计算事件异步处理

在函数计算的可观测性上面,提供了日志收集和查询功能,除了默认的简单日志查询功能外,还提供了高级日志查询,用户能够更方便地进行日志分析。在指标收集和可视化方面,函数计算提供了丰富的指标收集能力,而且提供了标准指标、概览信息等视图,能够更方便用户进行运维工做。

 

下图是应用交付的一个示意图,在整个应用的交付过程当中,只有每一个环节都作好,才可以建设一个敏捷的应用交付流程,其核心是自动化,只有作到了自动化,才能提高整个流水线的效率和敏捷度。

敏捷的应用交付流程

下图展现了自动化应用交付流水线在每一个环节的具体任务。其中须要注意的是作到基础设施即代码,才能进行模板定义和自动化设置应用运行环境,进而实现自动化的持续集成等。

自动化应用交付流水线

作到了应用的自动化交付以后,对整个研发效率的帮助是很是大的。在Serverless应用上,阿里云提供了多种工具来帮助用户实现基础设施即代码。Serverless的模型有一个很好的能力,就是同一份模板能够传入不一样的参数,进而生成不一样环境的定义,而后经过自动化地管理这些环境。

 

对于应用自己不一样服务版本的交付和灰度发布,函数计算提供了服务版本和服务别名来提供相应的服务,整个应用的灰度发布流程能够简化成一些API的操做,大大提高业务的效率。经过Serverless计算平台提供的这些能力,整个软件应用的交付流水线自动化程度获得了大幅度的提升。

函数计算还有一个颇有用的功能——对存量应用的兼容性。经过Custom runtime,可以适配不少的流行框架,兼容传统应用,使其可以很容易地适配到Serverless平台上面,由控制台提供应用的建立、部署、关联资源管理、监控等一系列服务。

 

除了函数计算,还能够用Serverless工做流对不一样的应用环节、不一样的函数进行编排,经过描述性的语言去定义工做流,由其可靠地执行每个步骤,这就大幅度下降用户对于复杂任务的编排难度。


应用场景案例

函数计算有几个典型的应用场景,一个就是Web/API后端服务,阿里云已经有包括石墨文档、微博、世纪华联在内的多个成功应用案例。

函数计算的另一个应用场景就是大规模的数据并行处理,好比往OSS上面上传大量的图片、音频、文本等数据,能够触发函数作自定义的处理,好比转码、截帧等。这方面的成功案例包括虎扑、分众传媒、百家互联等。

 

函数计算还有一个应用场景就是数据实时流式处理,好比不一样的设备产生的消息、日志发送到消息队列等管道相似的服务中,就能够触发函数来进行流式处理。

 

最后一个应用场景就是运维的自动化,经过定时触发、云监控事件触发、流程编排等方式调用函数完成运维任务,大大下降运维成本和难度,典型的成功案例有图森将来等。

 

图森将来是一家专一于L4级别无人驾驶卡车技术研发与应用的人工智能企业,面向全球提供可大规模商业化运营的无人驾驶卡车技术,为全球物流运输行业赋能。在路测过程当中会有大量数据产生,而对这些数据的处理流程复杂多变,即便对于同一批数据,不一样的业务小组也会有不一样的使用及处理方式。如何有效管理不一样的数据处理流程、下降人为介入频率可以大幅的提升生产效率。

路测不定时运行的特色使得流程编排任务运行时间点、运行时长具备极大的不肯定性,本地机房独自创建流程管理系统难以最大优化机器利用率,形成资源浪费。而图森将来本地已有许多单元化业务处理脚本及应用程序,但由于各类限制而没法全量的迁移上云,这也对如何合理化使用云上服务带来了挑战。

针对上述状况,图森将来开始探索数据处理平台的自动化。阿里云 Serverless 工做流按执行调度的次数计费,具备易用易集成、运维简单等诸多优势,可以很好的解决上述场景中所遇到的问题,很是适合这类不定时运行的离线任务场景。

Serverless 工做流还支持编排本地或自建机房的任务,图森将来经过使用Serverless 工做流原生支持的消息服务MNS解决了云上云下的数据打通问题,使得本地的原有任务获得很好的编排及管理。

除了调度外,Serverless 工做流也支持对任务的状态及执行过程当中所产生的数据进行维护。图森将来经过使用任务的输入输出映射及状态汇报机制,高效的管理了流程中各任务的生命周期及相互间的数据传递。

在将来,随着业务规模的扩大,图森将来将持续优化离线大数据处理流程的运行效率及自动化水平。经过各类探索,图森将来将进一步提高工程团队的效率,将更多的精力和资金投入到业务创新中去。

总结

Serverless 工做流是阿里云 Serverless 产品体系中的关键一环。经过 Serverless 工做流,用户可以将函数计算、视觉智能平台等多个阿里云服务,或者自建的服务,以简单直观的方式编排为工做流,迅速构建弹性高可用的云原生应用。

自2017年推出函数计算起,该服务根据应用负载变化实时智能地弹性扩缩容,1分钟完成上万实例的伸缩并保证稳定的延时。目前已经支撑微博、芒果TV、华大基因、图森将来、石墨科技等用户的关键应用,轻松应对业务洪峰。

“Serverless” 近年来很是火爆。人人都热衷于探讨它出现的意义,但对于如何上手使用或在生产环境落地,却谈之甚少。咱们设计了体验场景,手把手带你 5 分钟上手 Serverless,还送 2000 个阿里云“第一行代码”鎏金限量马克杯!

点击下方“阅读原文”了解更多

END

往期精彩文章回顾

云计算的下个十年什么样?

突破数据存储瓶颈,Aibee实现场景化AI的有效落地

为全球提供顶级算力:阿里云发布第三代神龙云服务器

SpringCloud x Kubernetes(二):部署篇(开发部署)

云原生五大趋势预测,K8s 安卓化位列其一

eBPF Up & Running: Overview

容器技术在企业落地的最佳实践

独角兽完美日记电商系统容器化改造历程

银泰抛弃传统数据库转投阿里云PolarDB

阿里云SAE助力百富旅行实现Serverless+微服务完美结合


长按扫描二维码关注凌云时刻

每日收获前沿技术与科技洞见