使用云服务构建Serverless应用程序的练习

前言:写这篇博客的目的有很多,其一是最近在学习各种新的知识,需要动手做一些实验,在实验过程中也遇到了一些问题,希望能记录下来,以便其他人可以借鉴。其二是有感而发,过去的几年在技术上真的有些掉队了,大环境如此,人人都在想着炒房,炒股票,炒大宗,炒比特币的时候,能有几个人静下心来潜心学习的,昨天去拜访一个客户,会上认识了一位大家尊称为叶博的前辈,中午吃饭的时候才知道,叶博是北大博士,中科院特聘教授,已经50岁了,现在还奋战在第一线,潜心的研究技术,看着前辈刚吃完饭就匆忙奔赴另一个战场的背影,心里还是很尊敬的。其三是现在写文章也源于各种各样的需要,但并不会给某个公司或某个产品打广告,纯粹的技术研究,好东西就是好东西,不需要过分的宣传。

题外话:可能在文章的内容中,不免会穿插一些最近喜欢的东西,比如这两天复仇者联盟3上映,十分的带感,建议大家去看看,当然百度盘上提前一个多星期就有了,而且字幕翻译的比电影院感觉还好。另外住在亚运村附近的吃货,可以外卖搜索一下余婆炸鸡,真的挺好吃的,我这篇文章就是在边吃炸鸡的情况下进行写作的。另外这篇文章是基于AWS的服务写的,阅读者需要了解一些AWS的知识。

正文:

首先,Serverless并不是一个才有的概念,好久之前就有了,关于这个话题,不展开讨论,主要的意思就是说比如你运行一套网站程序,以前我们还是需要创建一些虚拟机,然后在虚拟机上启用比如LAMP这样的一些服务,但是仍然要考虑虚拟机的容量,性能,可用性等等方面。有了Serverless架构之后,我们可以一台虚拟机都没有,全部使用云服务,开发者或者管理员不再需要关心后台虚拟机的扩展性,容量等等问题,只需要关心代码逻辑。网上有一个视频将的挺好。可以参考如下链接: https://ke.qq.com/course/256709 

要是你还不明白,我举一个现实的例子,以前我们想吃黄焖鸡米饭了,直到我们吃上米饭,要经历这么几个阶段,下楼,走到黄焖鸡饭店,点菜,人多的时候你可能要等,没座位的时候你可能要等,吃饭,结账,走回家,上楼。现在呢,手机上打开百度外卖,点菜,等着外卖小哥给你送饭,吃饭。 你费体力的活都让外卖小哥帮你干了,但是你多花了一点外卖费。相当于无服务器架构是外卖小哥的角色,把很多你原来也能干,但是要费点功夫的事情都帮你干了,你是省了事了,但是你好歹也得给点好处吧。所以无服务器架构的服务费用就相当于外卖费用。我不关心无服务器架构后台是怎么做到高可用,高性能的,我只关心我是不是能尽快的得到计算的结果。就好比我不关心外卖小哥是怎么在路上奔波,爬到六楼给我送饭的,我只关心外卖是不是能尽快送到。

我做的实验主要是基于AWS的平台做的,https://aws.amazon.com/cn/getting-started/serverless-web-app/  这个链接就是教你如何一步步的完成一个基本的Serverless程序的搭建的,感谢写这个教程的人,很多图和流程都是别人创作的,这是我的博客的特点,别人的就是别人的,我只是加以解释。下面这个图表示了整个实验要用到的东西,我们从左到右,从上到下一个一个来说:

1. 浏览器,推荐使用firefox和chrome,

2. API Gateway,这是个最近十分流行的东西,其实我也不是很懂究竟有什么内涵,但是有了这个东西,我们就可以很方便的将客户端的一些请求转成API发送给后台的处理程序,这个处理程序可以是lambda,也可以是其他的一些服务端程序,

3. Lambda,lambda是运行在云上的各种函数,可以是js的,也可以是python的,这些函数负责接收外界发来的请求,并处理这些请求,就好比以前我们需要在一个虚拟机里跑python程序,但是现在这些程序有一个叫lambda的东西来帮你跑,所以我连虚拟机都不要了,越来越省事。

4. 数据库使用的是dynamoDB,我们并不知道这个数据库是运行在哪里的,我们只知道他能帮我们创建表,能查询,而且是全托管的。DynamoDB是nosql类型的数据库,可以存字符串,二进制之类的。

5. 网站的页面是托管在S3上的,S3可以理解成一个非常大的FTP,可以上传下载,但是他存的是对象,不是我们平常理解的文件。以前发布网站的时候我们不也是要把网站程序通过FTP上传到一个目录下,然后启用类似apache之类的东西去运行吗,现在很简单,你只需要把网页程序上传到S3的某一个bucket下就可以,我们不需要担心S3会不会哪一天坏掉了,网页丢了,因为S3的持久性达到了11个9,就认为它不会坏吧。

6. Cognito,这个东西说实话以前我也没接触过,做完这个实验才知道主要是用来做用户管理的,举个例子来说,以前我们弄个网站,是不是得先在数据库里弄一堆表,设置一堆用户的属性,像什么邮件,姓名,生日之类的。然后做一堆用户管理的网页,比如怎么注册,怎么激活,怎么通知用户,使用邮箱还是短信之类的。现在这些东西Cognito全帮你做了,还支持多因子认证,而且更牛的是连发邮件和短信这种活,Cognito也都帮你做了,我这个实验里面使用我自己的真实邮箱和手机注册的,竟然真的接收到了验证码邮件和短信。省了我们自己去配置短信网关,自己去注册验证邮箱之类的事情。下面有个截图,估计大家一看就明白。


实验开始:

模块1: 按照之前给的那个demo教程的链接,模块1是托管静态网站,这个没啥好说的,有点IT基本知识的人都可以很轻松的完成,不过demo上给的那个链接在国内的下载速度确实有些慢,建议想试验的可以在国外申请个虚拟机,然后wget下来,unzip之后进入到website目录下,配置好aws账户的accesskey,直接使用S3命令行上传。这样快一些。这里给一些S3命令行提示:

aws s3 cp local_path s3://bucket_name --recursive    后面这个参数不加的话只能上传单个文件,加了这个参数就可以上传整个文件夹了。

模块2:跟着教程一步一步坐下来应该问题不大,主要是练习使用cognito的用法,这里给一点tips,就是在创建应用程序客户端的时候,一定要记得取消选中“Generate client secret”选项, 我刚开始这里没看清,大意了,结果后面第四部测试的时候会报什么no hash之类的错误。更正的办法很简单,删了这个,新建一个。

模块3:模块3和模块3是整个实验的核心点,基本上跟着教程下来也应该是没问题的,我这里说一个需要注意的地方,就是在创建DynamoDB表的时候,一定要区分大小写。如下图所示,其实教程里也写了,但是我没注意,导致后来实验的最后一步,报一个数据库无法写入的错误,主要是以为Lambda找不到这个表的主键,因此无法写入记录。


另外,模块3实验做完之后,你的lambda控制台应该是如下截图这样的。我这个是做完API gateway的,要是刚做完模块3,可能没有API Gateway的图标,不过没关系,实验教程里面的添加IAM角色的主要目的就是为了使Lambda函数可以具备写入cloudwatch log的权限和写入DynamoDB的权限。



模块4: 主要是练习如何使用API Gateway,仍然跟着教程做吧,做完之后,你的API 流程应该如下图所示:

相当于封装了一个POST方法,客户端会首先要求Cognito完成认证,对于认证通过的用户,把这个方法发送给Lambda的代理程序,然后代理程序会通过模块3时我们创建的那个request函数进行处理。



这个实验最后展示的效果就是我打开托管在S3上的网站,进行注册,注册成功之后登陆到ride.html这个界面,随便在地图上点一个点,这个时候前端程序记录下当前地图的坐标,在你点击Request Unicorn图标的时候,通过封装好的POST API方法发送给后台也就是Lambda,后台处理了之后,会生成一个独角兽的小图标,然后移动到地图上你点的那个位置,同时在后台数据库里生成一条记录。如下图所示:


全部的程序都是托管的,没有一台服务器。

这只是最简单的一个例子。我也在边学边写的路上。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值