从单体迈向 Serverless 的避坑指南 –

2022年 7月 15日 发表评论
腾讯云正在大促:点击直达 阿里云超级红包:点击领取
免费/便宜/高性价比服务器汇总入口(已更新):点击这里了解

从单体迈向 Serverless 的避坑指南 -

作者|不是阿里巴巴云的资深技术专家

导读:的用户需求和云发展两条线,推动了云原生技术的兴起、发展和大规模应用。本文将主要讨论什么是云本地应用,什么是云本地应用,什么是无服务器计算,以及无服务器如何简化技术复杂性,帮助用户应对快速变化的需求,实现灵活和高可用性的服务,这些都将通过具体的案例和场景进行说明。

如今,各行各业都在谈论数字化转型,尤其是新零售、媒体、交通等行业。数字商业形式已经成为主流,逐渐取代传统商业形式。在其他行业(如工业制造),虽然企业的业务形式没有以数字化的形式表现出来,但在数字双胞胎的概念下,充分利用数据技术优化生产运营正成为研究热点和行业共识。

企业从生产资料、生产关系、战略规划、成长曲线四个方面进行数字化转型:

生产资料:数据成为最重要的生产资料,需求/风险随时变化,企业面临很大的不确定性;

生产关系:不以过程和规则为基础的以数据为中心的固定生产关系。网络效应使生产关系跨越时空限制,多种连接方式催生新的业务和品种;

战略规划:基于数据决策,快速应对不确定的商业环境;

增长曲线:数字技术带来的能力达到大量用户,可以带来突破性增长。从云服务提供商的角度来看,云的演进趋势,在云1.0时代,基础设施的云化是其主题。使用云托管模式,云下的应用程序保持兼容,传统应用程序可以直接迁移到云。这种方法的核心价值在于资源的灵活性和低成本;在基础设施提供海量计算能力后,如何帮助用户更好地利用计算能力,加快企业创新速度,成为云的核心能力。

如果基本应用程序仍然建立在服务器,上,R&D的成本将非常高,管理将非常困难,因此有云2.0,这是云原生时代。云原生时代,云服务提供商提供丰富的托管服务,帮助企业数字化转型创新。用户可以像构建模块一样基于各种云服务构建应用程序,这大大降低了研发成本。

云本机应用程序元素

云本地应用程序有三个关键要素:微服务架构、应用程序容器化和无服务器,以及敏捷软件交付流程。

1.微服务架构

单一架构和微服务架构各有特点,主要特点如下图所示。一般来说,单一架构移动快,但是微服务架构维护部署困难,但是更加独立敏捷,更适合云原生应用。

从单体迈向 Serverless 的避坑指南 -

单片架构VS微服务架构

2.应用程序容器化和无服务器

容器是目前最流行的打包代码的方式。在K8s及其生态能力的帮助下,整个基础设施的管理难度大大降低。而且容器在程序支持方面提供了极好的灵活性和可移植性,越来越多的用户开始使用容器来封装整个应用。无服务器计算是另一种形式,它做了大量的端到端集成和云服务集成,大大提高了研发效率。但是与传统应用的兼容性没有容器灵活,但也带来了极大的整洁。用户只需要关注业务逻辑的编码和业务逻辑的创新。

3.敏捷应用交付流程

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

无服务器计算

1.阿里巴巴云功能计算

无服务器是一个新概念,但其内涵已经存在。阿里巴巴云或者AWS的第一个云服务是对象存储,对象存储实际上是存储领域的无服务器服务;另外,无服务器指的是一个产品系统,而不是单一的产品。目前行业内云服务提供商推出的新功能或产品大多是无服务器的。阿里巴巴云无服务器产品体系包括计算、存储、API、分析和中间件等。目前,云产品系统正在变得无服务器化。

阿里巴巴云无服务器计算平台的功能计算有四个特点:

与云的无缝集成:云中的各种服务以事件驱动的方式与功能计算无缝集成。用户只需要关注功能的开发,事件的触发由服务提供商完成;

实时弹性展开:系统自动完成函数计算的弹性展开,速度非常快,用户可以在在线应用中使用这一能力;

亚秒计量:亚秒计量提供了完整的按需计量方式,资源利用率可达100%;

高可用性:功能计算平台为帮助用户构建高可用性应用做了大量工作。那么,阿里巴巴云函数计算怎么做呢

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

从单体迈向 Serverless 的避坑指南 - 阿里云函数计算产品能力大图

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

云原生应用的高可用是一个系统的工程,包括众多方面,完整的高可用体系构建需要很多时间和精力。那么 Serverless 计算是如何帮助用户简化云原生应用高可用设计、实施的复杂度呢? 如下图所示,高可用体系建设要考虑的点包括基础设施层、运行时层、数据层以及应用层,且每一层都有大量的工作要做才可以实现高可用。函数计算主要是从容错、弹性、流控、监控四方面做了大量工作来实现高可用,下图中蓝色虚线框所对应的功能均由平台来实现,用户是不需要考虑的。蓝色实线框虽然平台做了一些工作来简化用户的工作难度,但是仍需要用户来进行关注,而橘红色的实线框代表需要用户去负责的部分功能。结合平台提供的功能和用户的部分精力投入,可以极大地减轻用户进行高可用体系建设的难度。

从单体迈向 Serverless 的避坑指南 - 函数计算高可用

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

从单体迈向 Serverless 的避坑指南 - 函数计算多可用区容灾

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

从单体迈向 Serverless 的避坑指南 - 函数计算事件异步处理

在函数计算的可观测性上面,提供了日志收集和查询功能,除了默认的简单日志查询功能外,还提供了高级日志查询,用户可以更方便地进行日志分析。在指标收集和可视化方面,函数计算提供了丰富的指标收集能力,并且提供了标准指标、概览信息等视图,可以更方便用户进行运维工作。 下图是应用交付的一个示意图,在整个应用的交付过程中,只有每个环节都做好,才能够建设一个敏捷的应用交付流程,其核心是自动化,只有做到了自动化,才能提升整个流水线的效率和敏捷度。

从单体迈向 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 带来的红利,这一次,我们集结了 10+ 位阿里巴巴 Serverless 领域技术专家,打造出最适合开发者入门的 Serverless 公开课,让你即学即用,轻松拥抱云计算的新范式——Serverless。

点击即可免费观看课程: https://developer.aliyun.com/learning/roadmap/serverless

“ 阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的公众号。”

小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: