BFF调研-1

本文探讨了前端开发面临的挑战,引出BFF(Backends For Frontends)解决方案,详细阐述了BFF的演化历程,从服务化架构到微服务架构,强调了BFF在无线应用和多端适配中的作用。同时,介绍了蚂蚁财富和有赞的BFF实践,涉及到Node.js与Java的通信问题。最后,提到了TWA(Techless Web Application)的理念,旨在提升开发者体验,通过统一的研发框架和运维平台简化开发流程。
摘要由CSDN通过智能技术生成

已同步到个人博客,欢迎访问

前端开发中存在的难问题

  1. 多端应用,不同类型客户端对数据、API有个性化的需求
  2. 服务聚合,单一后端为多个前端团队提供接口,导致跨团队协作低效,资源协调困难

问题:服务端设计的接口究竟是面向UI,还是面向通用服务

BFF

解决方案: Backends For Frontends, 简称BFF。

BFF最适合的场景,为第三方提供定制API等差异化场景,每个用户体验(客户端)对应一个后端,

v2-50720e139878624f394dcf2d3de836fb_hd.jpg

BFF作为用户体验适配层,对后端接口进行组合、处理,对数据进行:裁剪、格式化、聚合、编排。

BFF理念中,最重要的一点是:服务自治,谁使用谁开发,所以一般由前端维护。

BFF实现不限制具体技术,可以自由选型:Java/Node/PHP/Python,但大部分前端团队都会选择Node.js。

BFF的演化历程

BFF和网关(API Gateway)是微服务架构中两个重要概念,可以通过下面的例子讲解BFF的出现过程

服务化架构V1

实现单块应用的解构拆分,微服务初步完成,前端用户体验层主要是传统的服务端Web应用,服务化架构如下所示:

service4.png

服务化架构V2

随着无线应用的流行,除了Web应用外,服务还需要为新的无线原生App来提供接口和数据,先采用下面的服务架构:

service5.png

这样的架构的问题是:

  1. 无线App与内部为微服务强耦合
  2. 无线App需要知道内部服务的地址等细节
  3. 无线App需要对接口数据进行大量的聚合剪裁和适配逻辑

服务化架构V2.1

为了解决这个问题,在用户体验层和内部微服务层之间引入了BFF层,将后端的微服务进行适配,想用户体验层暴露有号和统一的API,方便无线设备接入访问后端服务

service.png

这种架构解决了上面的问题:

  1. 无线App与内部为微服务解耦,两边可以独立变化
  2. 无线App只需要知道BFF的地址,并且服务接口统一,不需要关心内部复杂的微服务的地址和细节
  3. 无线App需要不再需要聚合剪裁和适配逻辑,这些步骤都在BFF完成

但是随着接入设备的增加,也会有一些问题:

  1. BFF只有一个,接入设备增加后导致要考虑匹配问题,团队之间沟通协调成本高
  2. BFF中不仅包括了各个业务线的聚合剪裁、适配和业务逻辑,还需要引入很多跨横切面逻辑,比如安全认证、日志监控、限流熔断等,这些代码混在一起,导致代码复杂度提高
  3. BFF如果出现错误,会导致所有应用都不可用

微服务架构V3

为了解决这个问题,引入API Gateway

serveice2.png

在这种架构下:

  1. BFF按团队和业务线进行解耦拆分,拆分成若干个BFF微服务,每个业务线并行开发和交付各自负责的BFF微服务
  2. 网关,一般由独立的团队负责运维,专注跨横切面的功能,包括
    • 路由,将来自无线设备的请求路由到后端的某个微服务BFF集群
    • 认证,对涉及敏感数据的API访问进行集中认证鉴权
    • 监控,对API调用进行性能监控
    • 限流熔断,网关能够进行限流熔断,保护后端服务
    • 安全防爬,收集访问日志,通过后台分析恶意行为,阻断恶意请求
  3. 网关在客户
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据最新提供的日志信息,我们可以看到以下内容: 1. 出现了多次警告事件 "ProvisioningFailed",指示使用StorageClass为"evs-sc"为PersistentVolumeClaim "snapshot-demo-restore"提供卷失败。 2. 还有一个正常事件 "Provisioning",显示外部供应程序正在为"snapshot-demo-restore"的声明提供卷。 3. 最后,一个正常事件 "ExternalProvisioning" 指示持久卷控制器正在等待卷的创建,可以是由外部供应程序 "evs.csi.huaweicloud.com" 创建,也可以是由系统管理员手动创建。 根据这些日志信息,我们可以得出以下结论: - 存储类 "evs-sc" 正在尝试为 "snapshot-demo-restore" 的持久卷声明提供卷。 - 但是,由于无法获取名称为 "new-snapshot-demo" 的 VolumeSnapshot 的数据源类型处理程序,导致卷的提供失败。 - 同时,持久卷控制器正在等待卷的创建,这表明卷的创建过程可能正在进行中。 要解决此问题,您可以执行以下操作: 1. 检查名为 "new-snapshot-demo" 的 VolumeSnapshot 是否已正确创建和绑定。您可以使用以下命令检查 VolumeSnapshot 的状态: ``` kubectl get volumesnapshot new-snapshot-demo ``` 2. 确保 VolumeSnapshot 的绑定状态为 "Bound"。如果它未正确绑定,请重新绑定 VolumeSnapshot: ``` kubectl patch volumesnapshot new-snapshot-demo -p '{"spec": {"dataSource": {"name": "new-snapshot-demo"}}}' ``` 3. 确保 StorageClass "evs-sc" 的配置正确,并且它与您的持久卷声明 "snapshot-demo-restore" 匹配。 4. 检查是否存在任何其他错误或警告消息,以获得更多上下文信息。 如果您仍然遇到问题,请提供更多详细信息,以便我们能够更好地帮助您解决问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值