作者:CSDN云原生
近来,阿里云 aPaaS&Serverless 前端技能专家袁坤在 CSDN 云原生 meetup 长沙站分享了 Serverless 在阿里云函数核算 FC 的实践。
互联网软件架构演进
我们先简略回忆下互联网软件架构的演进之路。
单机布置
在单机布置中,将一切的事务和数据库都布置在一台主机中。
此架构的长处是:开发、布置以及运维都十分简略。缺陷是:一旦遇到流量过大或许机器故障,整个系统瘫痪,乃至丢掉事务数据,造成巨大事务丢失。
集群化布置
针对上述架构问题,常用的处理计划是采取水平扩容的方法进行集群化布置。引进 SLB 的流量网关路由,进行负载均衡。集群化布置本质上是单体架构,开发人员在项目开发的时候需求额外留意,比方要运用 cookie 进行鉴权,session 就不能存储在本地,需求引进 Redis 进行独自存储。集群化布置可以经过快速水平扩容处理流量突增或机器故障的问题。
微服务拆分
跟着事务的开展以及团队规划的扩张,单体架构这样紧耦合的方法会带来越来越多的问题,架构的灵活性和可扩展性成为阻碍事务开展的严重应战。微服务架构应运而生。
对比单体架构,微服务架构远比其杂乱,也衍生了很多新技能,比方:API 网关、服务注册、服务发现、RPC 通信。
Serverless 架构
从单体架构到微服务架构,从单机布置到集群化布置,互联网软件架构越来越杂乱,公司需求投入大量精力和本钱进行底层技能的晋级和维护。下图是 Serverless 架构,和单体架构不同的是将对应的组件换成 Serverless 云产品。
技能演进的本质是更好服务事务,传统开发方法使企业花费更多的精力打磨底层技能细节,而 Serverless 架构便是让开发者专心事务完成然后发明更大的事务价值。
Serverless 架构的优势很明显:
-
不重视底层基础设施,专心事务价值发明
-
主动弹性,从容面对突增流量
-
按资源运用计费,防止资源闲置浪费
Serverless 架构讨论
先来看一下 FaaS 的履行进程。蓝色部分是用户手动办理,只需求交付代码,其他的启动、运转、运维等都是在 FaaS 渠道进行。
可是此架构会发生一些问题:
-
代码碎片化,无法一致办理和布置
-
本地环境和线上环境不一致,无法处理依靠兼容性问题
-
进行本地 Debug 和线上调试困难
-
FaaS 厂商对代码包有限制,无法布置大代码包
-
没有一致的标准,导致厂商确定问题
Serverless Devs
针对上述问题,Serverless Devs 可以协助开发者更好地开发办理 Serverless 使用,它具备以下几个特色:
-
无厂商确定,Serverless Devs 协助开发者将使用布置在各个厂商上面
-
开源敞开,代码逻辑无任何黑洞
-
功能可插拨,Serverless Devs 经过组件的形式供给,开发者彻底可以依据需求,快速开发适合自己的东西套件
-
项目全生命周期办理才能,Serverless Devs 是用户进行项目初始化创立、开发、调试、布置等全生命周期办理的东西,简化 Serverless 使用开发
假如说 Serverless 架构可以协助开发者开发使用,那么 Serverles Devs 便是协助 Serverless 开发者更好地开发 Serverless 使用!
Serverless 架构实践
Serverless Devs 官网实践
经过上面的介绍可以看出 Serverless Devs 开发者东西并没有供给事务,事务的完成由组件供给,而组件本身涣散在不同的 GitHub 库房中。
Serverless Devs 官网有下面几个诉求:
-
不同库房下 GitHub源中的文档汇集在一个界面进行展示
-
组件开发者专心组件文档编写,文档主动实时同步到官网
-
组件一旦有变动,官网可以主动布置和构建
全体计划如下:
开发者在 GitHub更新文档,触发 webhook 钩子装备的 Http Serverless 函数。这儿需求留意的是:因为组件的文档数目不定以及 GitHub网络不安稳等问题,假如一切的工作都在 Http 函数中处理,十分容易导致超时,所以将一切的处理逻辑放在异步调用中,履行完后将处理的成果投递到钉钉或许邮件等渠道。
阿里云函数核算控制台实践
阿里云函数核算 FC 控制台是用户运用函数核算产品的第一站,控制台的用户体会至关重要。在架构上面对几个问题:
-
后端采用中心化布置形式,用户在海外拜访延时十分高
-
需求用户手动建设监控、日志、灰度等才能,导致运维本钱偏高
-
研制效率较低,开发进程中前后端需求协调交流,协作本钱较大
全体处理计划如下:
左侧是阿里云通用的网关,担任一致鉴权和安全等逻辑,抽离出 BFF(Backend for Frontend)层,这部分的特色如下:
-
全体 BFF 布置在阿里云函数核算 FC 上,开发者无需手动运维
-
BFF 层由前端工程师担任,前端工程师更好地深入事务,供给优异的用户体会
-
后端工程师专心于底层安稳性和原子才能的供给,经过 SDK 的方法进行交付给 BFF
经过 Serverless 完成的 BFF 不仅给事务带来了极大的灵活性,关于前端工程师这个群体也有质的改动:从之前的技能视角转变到愈加重视事务价值和用户体会提高。
CD 构建实践
常规的自建 CD 构建集群计划经过 Jenkins 或 Tekton 结构完成事务逻辑的编列,资源层面运用 K8s 布置,完成弹性伸缩。假如需求完成简略的云端构建 CD 计划,采用上文的架构略显杂乱。
CI/CD 的事务场景有以下几个特性:
-
经过事情触发履行
-
流量无法提前预估
-
需求长期在后台运转,对延时不敏感
-
因为网络时延等问题,需求规划失利重试机制
这些特性彻底是为 Serverless 量身打造的。完成计划还运用了异步函数,将构建的一切流程导到异步函数中处理,整个编列逻辑经过 Serverless Devs 进行,完美完成了一个性能安稳的 CD 构建集群。
阿里云函数核算使用中心这款产品的底层的 CD 才能彻底根据上述的原理进行实践,我们可以自行体会。
异步函数
实践中有十分多运用到异步函数的场景,这儿简略介绍下异步函数。
总结来看,异步函数有四个特色:
1、可长期运转,两个小时到一天不等
2、可以设置主动停止,自在调理时间,节省资源
3、可把触发成果分发给各个事情实现中心
4、有三次机会可在失利的情况下主动重试