美文网首页
Serverless

Serverless

作者: ylbjava | 来源:发表于2021-05-17 20:59 被阅读0次

    serverless

    1、可以降低服务器部署成本和部署复杂度;

    2、可以降低中长尾应用的运营成本;

    Serverfull--》DevOps--》Serverless

    Serverfull:RD开发, sre 负责上线, 服务器容灾, 资源均衡;

    DevOps:SRE 提供工具RD负责发布上线, 日志获取;SRE 负责服务器资源问题

    Serverless:上线自动化, 通过提交流水线完成, RD负责开发,SRE提供自动化工具和自动化服务弹性扩容, 容灾(大量的多机房部署);

    Serverless=FAAS+BAAS

    faas分为三层:函数触发器、函数服务和函数代码

    容器层就像是Windows操作系统;Runtime就像是Windows里面的播放器暴风影音;你的代码就像是放在U盘里的电影。

    常驻进程型就是为了传统MVC架构部署上FaaS专门设计的

    数据库也可以使用原来的DB连接方式,不过这样做会增加冷启动的时间,从而导致第一次请求长延迟甚至失败。比较适合的做法是数据持久化采用BaaS服务。

    FaaS的进程模型有两种:常驻进程型和用完即毁型。常驻进程型是为了适应传统MVC架构设计的,它看起来并不自然;如果你从现在开始玩FaaS的话,我当然首选推荐用完即毁型,它可以最大限度发挥FaaS的优势。

    数据编排:BFF 到SFF ,适合前端node 服务编排;

    因为BFF层只是做无状态的数据编排,所以我们完全可以用FaaS用完即毁型模型替换掉BFF层的Node.js应用,也就是最近圈子里老说的那个新名词SFF(Serverless For Frontend)。

    将FaaS中的数据存储移出到后端应用上,后端应用我们不光要做成数据接口,还要BaaS化;

    有状态的的数据适合baas话, 无状态的处理节点适合faas(可以做到水平横向扩缩容);

    有状态的比如数据库连接将大大增加网络、机器初始化等冷启动时间;

    我们为了避免在FaaS中直接操作数据库,而将数据库操作变成BaaS服务。

    BaaS化的过程就是微服务化的过程,只有职责单一才能更好的做到独立运营,在baas中将微服务组装成大型应用;因为组装和水平扩展必须要做到无状态,对于应用而言数据库是有状态;

    serverless 的最终目标是为了NOops; 所以对于数据库能够弹性扩容。结合现在数据库的ms结构, 能够做到ms自动切换和水平扩容即可, 那么就需要主从同步和主从切换, 主从同步使用的binlog 和kafka(美团的DTS)。虽然主库还是有状态的但是从整个微服务来说,数据库已经可以弹性扩容且状态对外透明;

    为什么微服务是免运营的?

    如何拆微服务:

    1、领域驱动设计:保证各个服务可以尽可能的复用;

    拆完的微服务 是在裸奔, 如何解决安全问题---鉴权;JWT

    因为severless 之后, 每一个独立的faas 或者微服务都可以独立提供服务, 一旦出现一个bug 可能影响面很大, 那如何解决这个问题呢? ---流水线发布;

    baas 服务部署的时候需要依赖很多环境, 比如jdk , python   这个时候就可以使用docker容器;

    这样就导致docker 容器太多,需要考虑docker 容器管理, 使用K8S对docker 进行管理;

    Container as a Service

    使用docker 解决应用开发环境和运行环境的一致性问题;

    Kubernetes它具备跨环境统一部署的能力;

    k8s:管理docker 集群;

    K8s如何实现扩缩容:

    metrics 指标监控:内存, cpu;

    Service Mesh 解决微服务之间网络通讯,将网络通信逻辑从SDK中抽离出来,让我们的微服务变得更加轻量,不用去关心网络如何通讯:服务请求失败重试,调用多个服务实例的负载均衡,服务请求量过大时的限流降级

    ServiceMesh其实只是实现Serverless网络通讯的其中一种方案,除此之外还有RSocket、gRPC、Dubbo等方案

    要做到serverless-->noops

    1、RD的工作还是写代码, 不负责额外的发布,机器维护等工作;

    2、SRE的可以做到无人值守,容器资源按需分配

    为了达到这个目标:

    1、系统代码自动发布;

    2、服务资源按需分配;解决长尾问题;

    3、服务响应时间不能变

    不知道大家是否有一些疑问?

    1、为什么流水线“又臭又长”提测、上线效率感觉很低 还没人提出问题去反对?

    2、为什么调用新接口还要配置鉴权, 都是内部服务鉴权是否有意义?

    3、为什么要进行领域划分、项目分层,一个简单的CRUD从api到DAO,VO、BO、PO 转好几层,感觉是一些无意义的工作量?

    下周周会找时间分享下serverless相关理论,为大家解决日常开发看似和写代码不想关的工作, 到底这些工作的意义在哪里?

    gateway:是我安外部请求到执行实例的路由;

    FAAS: 时间驱动, 无状态, 短生命周期;

    BAAS:状态复杂, 功能完备自洽,独立运营,接口交付;

    iaas:avatar

    caas:hulk

    paas:plus

    faas:nest

    相关文章

      网友评论

          本文标题:Serverless

          本文链接:https://www.haomeiwen.com/subject/resclltx.html