zoukankan      html  css  js  c++  java
  • Serverless

    部署平台的演化

    部署平台的演化都是为了提高效率,降低成本,方便运维管理

    大体上有以下几种类型

    • 物理机部署: 所有程序组件都部署在物理机上
    • 虚拟机部署: 和物理机部署差不多,只不过可以在物理机上创建多个虚拟机,添加删减虚拟设备比起物理设备方便很多
    • 基于云平台的虚拟机部署: 直接向云产商比如亚马逊云申请虚拟机,这样自己就不用维护底层的物理设备,并且虚拟机的稳定性和可用性也交给云平台保证
    • 容器部署: 在物理机/虚拟机上搭建容器平台比如 K8S,程序作为容器部署,更方便快捷,容易隔离,容易管理,容易保证一致性
    • 基于云平台的容器部署: 直接向云产商申请容器平台,比如 Azure 的 AKS,这样物理机、虚拟机都不用维护,并且容器平台的稳定性和可用性等都交给云平台保证,客户直接通过 Azure 的 az 命令和 K8S 的 kubectl 命令操作部署容器
    • 基于云平台的 Serverless 部署: K8S/AKS 依然需要自己编写服务器代码,还要实现分配资源,扩容,负载均衡,应对高并发,搭建数据库,等等,Serverless 模式把这些统统外包给了云产商,只需要实现业务代码,告诉云产商,当某个事件产生时帮我调度某个服务/函数即可,做到按需分配资源,按调用次数计费

    国内外的各大云厂商 Amazon、微软、Google、IBM、阿里云、腾讯云、华为云都相继推出了 Serverless 产品

    Serverless 的基础是 FaaS 和 BaaS

    FaaS (Function as a Service, 函数即服务)

    无需管理部署自己的物理机/虚拟机/容器平台,甚至也不需要编写服务器程序,只需要编写可运行的函数代码,打包上传给云产商,绑定产商提供的事件源,使得在某个事件发生时,调用我们的函数即可

    事件源可以是,HTTP 请求,某个时间,文件更新,加入消息总线的消息,数据库触发,等等

    至于负载均衡,高可用,高并发处理,资源分配调度,服务器程序,物理机虚拟机容器的管理,等等,统统由产商保证

    并且产商可以在事件发生时才为我们的代码分配资源,也可以按函数执行的次数计费

    BaaS (Backend as a Service,后端即服务)

    FaaS 简化了业务代码的部署,而我们的业务代码还需要和很多外部组件交互,比如数据库,消息总线,认证模块,日志服务,监控,等等

    这些则交给 BaaS 解决,BaaS 提供了业务代码需要的第三方组件,只需要向产商申请相应的 BaaS 服务,然后在 FaaS 的业务代码里调用 BaaS 提供的相应的 API 即可

    Serverless 适用场景和优势

    • 适合应用有显著的波峰波谷的情况,为了应付波峰而预留的资源在大部分时间是浪费的,Serverless 可以做到按需调用资源,按需付费
    • 适合基于事件的应用
    • 可以降低运维的复杂度和成本
    • 可以简化开发缩短产品上市时间

    Serverless 可以大大解放程序员,使得开发更专注于业务层面,其他的因素全部交给云产商解决就行

    简单的 Serverless 开发例子可以参考 https://www.zhihu.com/question/378776917

    Serverless 的不足

    • 不适合长时间运行应用
    • 依赖于特定产商,不同平台的产商的产品可能不兼容,会无法迁移
    • 调试,开发,构建都有待完善

    虽然 Serverless 还有所不足,但总体而言潜力还是巨大的



  • 相关阅读:
    登陆中发现css页面不见了,变成了光秃秃的输入框问题
    servlet基础一
    解决问题:Error:(5, 59) java: 程序包javax.servlet.http不存在
    静态方法的引用
    登录功能之添加验证码(包含切换验证码)
    生成图片验证码(VerifyCode)
    idea编辑器中批量完成注释及批量取消注释
    jdbc连接测试
    利用IO流复制图片
    js 判空
  • 原文地址:https://www.cnblogs.com/moonlight-lin/p/14165134.html
Copyright © 2011-2022 走看看