前言
Serverless,无服务架构,彻底抛弃传统主机/虚拟主机,甚至是比容器更进一层的开发及部署理念,目前国内相关资料较少,但国外已经有数年发展
这一篇文章,会尽可能简单易懂的叙述Serverless究竟是什么?以及其到底如何开发?如何部署?如何运维?国内相关的资料实在是太少了,能搜索到的基本都停留在讲述概念的部分,很少有实践文章
我希望这一系列文章是能够真正涵盖Serverless的所有核心,也希望所有有心的读者能够借此踏入真正的Serverless无服务架构领域。这一系列文章会从零概念到实际编码的全流程阐述Serverless相关
传统
在具体描述Serverless的概念之前,我们先来看一下几种主流和前沿的WEB应用开发和部署思路:
单机应用,即单台主机应用,开发部署最简单,但性能存在明显瓶颈,一般用做教学
主机应用群,即通过预置购买/租赁服务主机,通过复杂的网络配置,部署相关的WEB应用服务,使用分布式服务控制和负载均衡等平衡主机性能,最后组合而成完整系统,对外提供服务
容器应用群,即通过将WEB应用服务,以容器为单位,自动分发部署在主机集群中,不再需要关心主机配置,但是需要配置容器网络以组建容器集群,对外提供服务
以上三种WEB应用开发和部署方式并非所有,只是比较经典和突出,都存在着各自的优缺点,而且无论哪种方式,即便是做到了计算无瓶颈,也很难做到数据源无瓶颈,目前传统WEB应用开发并没有简单好用的数据库解决方案,最后我们总是需要疲于忙碌于各种数据库事务,各种数据库锁,各种数据库拆分,各种数据库峰值的处理上
概念
对于开发者而言,单机应用无疑是最简单的,甚至可以说如果单台主机的性能是无限的,那么无论是分布式也好,容器也好,负载均衡也好,都不会出现了
那么究竟有没有可能实现单台主机性能无限呢?很遗憾,从目前人类的科技来看,这几乎是不可能的事情。但是事情也不绝对,虽然单台主机的性能几乎没有办法无限拓展,那么多台主机集群的性能总还是有办法拓展的,如果能使多台主机合体像一台主机一样,这个问题就能迎刃而解了!
于是,Serverless服务在这样的背景下诞生了。使多台主机合体是非常困难的事情,单凭我们个人甚至是一般的企业都难以企及,但是来到21世纪,云平台的诞生为这一实现提供可能,目前Serverless最全最成熟的解决方案在AWS云平台(当然,我们的阿里云也在追赶中...)
看到这里,你是否对Serverless的概念有些许的清晰?
总结一下,Serverless的目标就是开发者能够真正的不用关心任何服务器相关的配置,只需要实现一份单机应用代码,在云平台上部署后,就能够获得无限的性能拓展
总览
AWS Serverless
首先任何WEB应用都会由三个核心部分组成,分别是请求,运算,存储。这三个部分,对于传统应用而言都有着各自的主机瓶颈。而Serverless则主要就是解决这三个部分的瓶颈,且对开发者无感知
目前比较完整地提供了这三个部分的Serverless解决方案的云平台,只有AWS,其余云平台无论是谷歌也好,微软也罢,或者国内正在迅速兴起的阿里云,都还暂时在布局中。所以AWS世界第一云平台的称号也是名副其实
API Gateway
顾名思义,这是AWS云平台的网络接口网关,更关键的是,这一网络接口网关服务提供给开发者使用,开发者无须关心性能瓶颈,因为AWS的API Gateway会自动适配来自用户的网络请求
Lambda
函数计算,以函数为单位的计算模型,开发者通过专注于函数业务功能开发,抛弃传统WEB开发框架,仅通过上传函数代码,就可实现业务功能
Dynamodb
托管型分布式非关系数据库,的确是有点拗口,但这个数据库确实比它的名字简单许多。开发者一直希望拥有的无限性能的“单机”数据库,在dynamodb上实现了,是的,不需要数据库锁了,不需要数据库拆分了,不需要为数据库性能担忧了!
可以说,存储是传统WEB应用中最难攻克的一关,因为分布式数据库同步太困难了。中小型企业想要拥有微信/支付宝一样的数据库方案是几乎不可能的。目前分布式数据库仍处于研究领域,基于paxos,raft等算法的分布式数据库都很少有商业化运作的,而且这些算法问世时间也不长,尚未经过长时间的检验
很多云平台都有大数据的数据库解决方案,但是这些数据库解决方案,或多或少都需要繁琐的网络配置,主机配置,集群配置等等,如果没有专业的数据库人员,是很难以掌握和把控的
dynamodb是少有的商业化运作,且提供Serverless化服务的数据库之一。(这里写之一是为了严谨,但是我真的没有找到其他同类产品,如果有,希望能联系告知我,在此感谢) 它提供了单一的简单访问,没有任何主机或集群相关配置,背后却是全自动的性能提升
当然,事实客观的看待,虽然dynamodb描绘起来很厉害的样子,但实际上,因为分布式数据库仍是研究领域前沿的产品,学术化气息浓重,dynamodb的sdk交互并不友好,没法和SQL这样的语义化操作,甚至没法和mongodb这样成熟的非关系型数据库相比,当然,现阶段也只能用一切都会好起来安慰自己,长达接近一年的dynamodb使用经验,让我对这个AWS的划时代产品了解比较深入,后面的文章系列,会详细提及,在此不做展开
后记
以上就是Serverless的核心概念,将其所有概念串起来,我们可以得到从零开始到构建一个Serverless系统服务的基本思路:
API Gateway 网关服务,实现我们需要的网络RESTful接口
Lambda 函数计算,实现我们需要的平行扩展业务运算
Dynamodb数据库,实现我们需要的“单机”无限性能数据库
通过以上步骤,我们可以初步得到一个性能可自动拓展的“单机应用服务”,也就是所谓的Serverless服务
后续
至此,就是Serverless构建的基本思路,你可能会有很多问题,例如究竟怎么组合以上所说的所有服务?组合这些服务是否耗时,是否又相当于传统WEB服务的主机配置?除了AWS我是否还有其他云平台可选择,构建Serverless是否一定要选择AWS?限于篇幅,本文只阐述Serverless的核心概念和简单说明构建思路。整个Serverless系列文章预计会有三篇,后续两篇会一步步阐述如何真实编码构建Serverless应用系统。所以,未完待续...
感谢你的阅读,希望本文能够给你带来帮助:)
作者:CheneyXu
作者:宇帅
链接:https://www.jianshu.com/p/13582721b0a7
共同学习,写下你的评论
评论加载中...
作者其他优质文章