• Serverless 入门学习


    MVC 架构

    • MVC
      前端: View 层
      后端: Control 层 && Model 层


    Serverless 解决问题的边界,就是服务端的边界,即服务端运维。

    Serverless

    • 狭义 Serverless(最常见)= Serverless computing 架构 = FaaS 架构 = Trigger(事件驱动)+ FaaS(函数即服务)+ BaaS(后端即服务,持久化或第三方服务)= FaaS + BaaS

      • 基于 Serverless 架构,我们完全可以把传统的 MVC 架构转换为 BaaS+View+FaaS 的组合,重构或实现。
    • 广义 Serverless = 服务端免运维 = 具备 Serverless 特性的云服务

    FaaS 与应用托管 PaaS 平台对比,最大的区别在于资源利用率,这也是 FaaS 最大的创新点。FaaS 的应用实例可以缩容到 0,而应用托管 PaaS 平台则至少要维持 1 台服务器或容器。

    FAAS 冷启动

    冷启动本来是 PC 上的概念,它是指关闭电源后,PC 再启动仍然需要重新加载 BIOS 表,也就是从硬件驱动开始启动,因此启动速度很慢。

    FaaS 中的冷启动是指从调用函数开始到函数实例准备完成的整个过程。 冷启动我们关注的是启动时间,启动时间越短,我们对资源的利用率就越高。现在的云服务商,基于不同的语言特性,冷启动平均耗时基本在 100~700 毫秒之间。得益于 Google 的 JavaScript 引擎 Just In Time 特性,Node.js 在冷启动方面速度是最快的。

    请求第一次访问时,云服务商就可以利用构建好的缓存镜像,直接跳过冷启动的下载函数代码步骤,从镜像启动容器,这个也叫预热冷启动。所以如果我们有些业务场景对响应时间比较敏感,我们就可以通过预热冷启动或预留实例策略,加速或绕过冷启动时间。

    FAAS 分层

    1. 容器
    2. 运行时runtime
    3. 具体函数代码

    云服务商负责的就是容器和 Runtime 的准备阶段了。而开发者自己负责的则是函数执行阶段。一旦容器 &Runtime 启动后,就会维持一段时间,这段时间内的这个函数实例就可以直接处理用户数据请求。当一段时间内没有用户请求事件发生(各个云服务商维持实例的时间和策略不同),则会销毁这个函数实例。

    FAAS 进程模型

    • 用完即毁型:函数实例准备好后,执行完函数就直接结束。这是 FaaS 最纯正的用法。
    • 常驻进程型:函数实例准备好后,执行完函数不结束,而是返回继续等待下一次函数被调用。这里需要注意,即使 FaaS 是常驻进程型,如果一段时间没有事件触发,函数实例还是会被云服务商销毁。

    SFF(Serverless For Frontend)指前端数据请求过来,函数触发器触发我们的函数服务;我们的函数启动后,调用后端提供的元数据接口,并将返回的元数据加工成前端需要的数据格式;我们的 FaaS 函数完全就可以休息了。

    Serverless 示例

    百度云 Serverless 服务 CFC:

    选择 HTTP 触发器;返回当前系统时间:

    ➜  ~ curl https://7m2mvhhnp7v6y.cfc-execute.bj.baidubce.com/galvin
    Hello World
    2020-05-08 02:32:38%
    

    后端应用 BaaS 化

    回到我们的进程模型,用完即毁型是天然的 Stateless,因为它执行完就销毁,你无法单纯用它持久化存储任何值;常驻进程型则是天然的 Stateful,因为它的主进程不退出,主进程可以存储部分值。

    BaaS 化的核心思想就是将后端应用转换成 NoOps 的数据接口,这样 FaaS 在 SFF 层就可以放开手脚,而不用再考虑冷启动时间了。

    AWS 提供的 DynamoDB 服务或 Aurora 服务。数据库就是 BaaS 化的,我们无需关心服务端运维,也无需关心 IP,我们只要通过域名和密钥访问我们的 DB,就像使用数据编排一样

    总结

    • 扩缩容我们可以选择纵向扩缩容和横向扩缩容,纵向扩缩容就是提升单机性能,价格上升曲线陡峭,我们通常要慎重选择;横向扩缩容就是提升机器数量,价格上升平稳,也是我们常用的默认扩缩容方式。
    • 在网络拓扑图中,Stateful 是存数据的节点;Stateless 是处理数据的节点,不负责保存数据。只有 Stateless 节点才能任意扩缩容,Stateful 节点因为是保存我们的重要数据,所以我们要谨慎对待。如果我们的网络拓扑节点想自由扩缩容,则需要将这个节点的数据操作外移到专门的 Stateful 节点。
    • 我们的 FaaS 访问 Stateful 节点,那我们就希望 Stateful 节点对 FaaS 提供数据接口,而不是单纯的数据库指令,因为数据库连接会增加 FaaS 的额外开支。另外为了方便后端工程师开发,我们需要将 Stateful 节点 BaaS 化,BaaS 化的内容,我们将在后续的课程中展开。

    A Berkeley View onServerless Computing
    https://www2.eecs.berkeley.edu/Pubs/TechRpts/2019/EECS-2019-3.pdf

  • 相关阅读:
    小程序接入第三方ui库(组件库)
    element ui表格的校验和自定义校验规则
    element ui表格 表头的的特殊处理(换行/jsx风格表头)以及上传组件的一点小问题
    MongoDB 配置本地服务
    乙方渗透测试之Fuzz爆破
    SSRF漏洞挖掘经验
    SQL注入绕过技巧总结
    Xss Bypass备忘录
    bilibili存储型xss (绕过长度限制打乱顺序限制)
    XSS攻击常识及常见的XSS攻击脚本汇总
  • 原文地址:https://www.cnblogs.com/galvin007/p/12853858.html
Copyright © 2020-2023  润新知