分布式系统开发实战:什么是Serverless架构?它的典型应用有哪些

Posted javatiange

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式系统开发实战:什么是Serverless架构?它的典型应用有哪些相关的知识,希望对你有一定的参考价值。

Serverless架构

在目前主流云计算基础设施即服务(
Infrastructure-as-a-Service,IaaS)和平台即服务(Platform-as a-Service,PaaS)中,开发者进行业务开发时,仍然需要关心很多和服务器相关的服务器开发工作,比如缓存、消息服务、Web应用服务器、数据库,以及对服务器进行性能优化,考虑存储和计算资源,考虑负载和扩展,考虑服务器容灾稳定性等非业务逻辑的开发。对于这些服务器的运维和开发,知识和经验极大地限制了开发者进行业务开发的效率。设想一下,如果开发者直接租用服务或者开发服务而无须关注如何在服务器中运行部署服务,是否可以极大地提升开发效率和产品质量?这种去服务器而直接使用服务的架构,我们称之为无服务器架构(Serverless架构)。

本篇详细介绍Serverless架构。

什么是Serverless架构

如今,随着移动和物联网应用蓬勃发展,伴随着面向服务架构以及微服务架构的盛行,造就了Serverless架构平台的迅猛发展。在Serverless架构中,开发者无须考虑服务器的问题,计算资源作为服务而不是服务器的概念出现。这样开发者只需要关注面向客户的客户端业务程序开发,后台服务由第三方服务公司完全或者部分提供,开发者调用相关的服务即可。Serverless架构是一种构建和管理基于微服务架构的完整流程,允许我们在服务部署级别而不是服务器部署级别来管理应用部署,甚至可以管理某个具体功能或端口的部署,这就能让开发者快速迭代,更快速地交付软件。

这种新兴的云计算服务交付模式为开发人员和管理员带来了许多益处。它提供了合适的灵活性和控制性级别,因而在IaaS和PaaS之间找到了一条“中间道路”。由于服务器端几乎没有什么要管理的,Serverless架构正在彻底改变软件开发和部署领域,比如,推动了NoOps模式的发展。

Serverless架构是新兴的架构体系,业界也没有一个明确的关于Serverless架构的定义。麦克·罗伯茨(Mike Roberts)认为的Serverless架构主要有下面两种形式。

  • 首先,Serverless架构用于描述依赖第三方服务(“云端”)实现对逻辑和状态进行管理的应用。这些应用包括典型的富客户端应用,比如单页Web应用或移动应用,它们使用基于云的数据库(比如Parse或Firebase),还有授权服务(比如Auth0、AWS Cognito等),这类服务以前曾经被描述为(移动)后端即服务((Mobile)Backend as aService,BaaS)。

  • 其次,Serverless架构也可以指这样的一类应用,一部分服务逻辑由应用实现,但与传统架构不同的是,它们运行在无状态的容器中,可以由事件触发,短暂、完全地被第三方管理。一种观点认为这是函数服务(Functions as Service,FaaS),而AWS Lambda就是一种流行的FaaS实现,当然还有其他。

云计算的发展从IaaS、PaaS、SaaS,到最新的BaaS,在这个趋势中Serverless(去服务器化)的趋势越来越明显。IaaS将真实的物理机变成了虚拟机,PaaS进一步将虚拟机变成了包含基础设施的中间件服务。作为Paas和Saas的中间架构,Baas的创建是为了满足移动互联网的快速发展需求,并提供后端功能作为服务。这些是云计算解决效率和成本的重要体现。Serverless这种无服务器架构,用服务代替服务器,无须了解落实服务,进一步降低了云计算的成本,提高了云计算的效率,从而为BaaS这种新时代云计算提供了架构基础。

BaaS要被开发者广泛接受,需要在云端解决以下限制。

·BaaS服务的治理。

·BaaS服务需要提供逻辑定制扩展。

·BaaS服务能独立部署,快速启动。

·BaaS服务可以弹性扩展,满足大并发需要。

·BaaS服务可以被监控、计费。

·BaaS服务要解决DevOps相关的问题。

要实现Serverless架构,需要利用以下技术和方案。

·实现BaaS中的云代码特性,开发者可以直接开发在云端的业务代码,实现FaaS。

·实现API网关,用API代表服务的入口,并对所有服务进行治理。

·微服务架构技术,用微服务的概念来实施服务的开发。

·利用Docker等容器技术部署运行微服务。

Serverless架构的典型应用

Serverless架构的典型应用主要有UI驱动的应用和消息驱动的应用两大类。

UI驱动的应用

先讨论一个带有服务功能逻辑的、传统面向客户端的三层应用——一个典型的电子商务应用Pet Store(在线宠物商店)。其一般架构如图10-1所示,假设服务端用Java开发完成,客户端用html/javascript

分布式系统开发实战:什么是Serverless架构?它的典型应用有哪些图10-1 传统面向客户端的三层应用

这种架构中,服务端不得不实现诸多系统逻辑,例如认证、页面导航、搜索、交易等都需要在服务端完成,而客户端则显得比较简单。如果采用Serverless架构来对该应用进行改造,则架构如图所示。

与传统面向客户端的三层应用架构相比,Serverless架构有以下5个方面的差异。

  • 删除了认证逻辑,用第三方BaaS服务来替代。

  • 使用另外一个BaaS,允许客户端直接访问架构与第三方(例如AWS Dynamo)的数据子库。通过这种方式提供给客户更安全的访问数据库模式。

  • 前两点中包含着很重要的第三点,也就是以前运行在Pet Store服务端的逻辑现在都转移到客户端中,例如跟踪用户访问,理解应用的UX架构(例如页面导航),读取数据库并转化为可视视图等。客户端则慢慢转化为单页面应用。

分布式系统开发实战:什么是Serverless架构?它的典型应用有哪些图10-2 Serverless架构的应用

  • 某些我们想保留在服务端的UX相关功能,例如,计算敏感或者需要访问大量数据,比如搜索这类应用。对于搜索这类需求,我们不需要运行一个专用服务,而是通过FaaS模块,通过API Gateway对HTTP访问提供响应。这样可以使得客户端和服务端都从同一个数据库中读取相关数据。由于原始服务使用Java开发,AWS Lambda(FaaS提供者)支持Java功能,因此可以直接从服务端将代码移植到搜索功能上来,而不用重写代码。

  • 最后,可以将“Purchase”功能用另外一个FaaS功能取代,因为安全原因放在服务端还不如在客户端重新实现,当然客户端还是APIGateway。

消息驱动的应用

消息驱动的应用是一个纯后台数据处理服务,如图10-3所示。例如正在编写一个面向用户的应用,需要对UI请求快速响应,但是同时还想获取所有发生的行为。我们设想一个Ad Server(在线广告系统),当用户点击一个广告时,希望快速导向目标,但是同时需要搜集点击量以便向广告商收取费用。

分布式系统开发实战:什么是Serverless架构?它的典型应用有哪些图10-3 消息驱动的应用

在传统的架构中,Ad Server同步地响应客户,但是同时还会向异步处理“点击量”的应用发送一个消息,并更新到便于以后向广告商收费的数据库。而在采用Serverless架构的情况下,将会改为下图所示的方式。

分布式系统开发实战:什么是Serverless架构?它的典型应用有哪些图10-4 Serverless的消息驱动的应用

这个架构跟第一个例子有些许不同,这里我们用FaaS功能取代了一个一直运行的应用。此FaaS运行于第三方提供商提供的消息驱动上下文之间。需要注意的是,供应商提供了消息代理和FaaS,两者将更加紧密地合作在一起。

FaaS环境通过复制出若干实例来并行处理这些点击,这无疑带来了全新开发体验和执行效率。

写在最后

如果你觉得自己学习效率低,缺乏正确的指导,可以加入资源丰富,学习氛围浓厚的技术圈一起学习交流吧!
[Java架构群]
群内有许多来自一线的技术大牛,也有在小厂或外包公司奋斗的码农,我们致力打造一个平等,高质量的JAVA交流圈子,不一定能短期就让每个人的技术突飞猛进,但从长远来说,眼光,格局,长远发展的方向才是最重要的。
在这里插入图片描述

码字不易,如果觉得本篇文章对你有用的话,请给我一键三连!关注作者,后续会有更多的干货分享,请持续关注!

以上是关于分布式系统开发实战:什么是Serverless架构?它的典型应用有哪些的主要内容,如果未能解决你的问题,请参考以下文章

一看即会:Serverless 应用开发的 7 个实战小技巧文末附好礼

人人都是 Serverless 架构师 | 弹幕应用开发实战

实战指南 | Serverless 架构下的应用开发

人人都是 Serverless 架构师 | 弹幕应用开发实战

人人都是 Serverless 架构师 | 弹幕应用开发实战

我的Serverless实战——Maven项目部署