BFF是(Backends For Frontends)单词的缩写,主要是用于服务前端的后台应用程序,来解决多访问终端业务耦合问题。前端
最近在公司的微服务架构中遇到了一些多终端访问接口的问题,不一样的终端拥有不一样的接口服务,有不一样的操做数据的能力,针对这种业务场景作出了调研,咱们是否能够在不一样的访问层进行业务逻辑处理,获取不一样的数据内容呢?android
早在微服务出现的初期就已经存在相似的业务需求出现,并且衍生出了一套成熟的解决方案,那就是BFF
,能够针对不用业务场景来提供对应的服务接口,每一种业务场景之间彻底独立。ios
在传统的应用程序中,咱们通常只将接口提供给一种类型的终端使用。
传统的应用程序内提供的接口是有业务针对性的,这种类型的接口若是独立出来再提供给别的系统再次使用是一件比较麻烦的事情,设计初期的高耦合
就决定了这一点。web
若是咱们的接口同时提供给web
、移动端
使用,移动端
仅用来采集数据以及数据的展现,而web
端大多数场景是用来管理数据,由于不一样端点的业务有所不一样每个端的接口复用度不会过高。segmentfault
针对多端共用服务接口的场景,咱们将基础的数据服务
与BFF
进行了分离,数据服务
仅提供数据的增删改查
,并不过多涉及业务的判断处理,全部业务判断处理都交给BFF
来把控,遇到的一些业务逻辑异常
也一样由BFF
格式化处理后展现给访问端点。架构
这种设计方式一样存在必定的问题,虽然基础服务
与BFF
进行了分离,咱们只须要在BFF
层面进行业务判断处理,可是多个端共用一个BFF
,也会致使代码编写复杂度增高
、代码可阅读性下降
、多端业务耦合
。app
若是咱们为每个端点都提供一个BFF
,每一个端点的BFF
处理自身的业务逻辑,须要数据时从基础服务
内获取,而后在接口返回以前进行组装数据用于实例化返回对象。分布式
这样基础服务若是有新功能添加,BFF
几乎不会受到影响,而咱们若是后期把App
端点进行拆分红Android
、IOS
时咱们只须要将app-bff
进行拆分为android-bff
、ios-bff
,基础服务一样也不会受到影响微服务
这样每当新增一个访问端点时,咱们须要修改的地方也只有网关的转发
以及添加一个BFF
便可,基础服务
内提供的服务接口咱们彻底能够复用,由于基础服务
提供的接口都是没有业务针对性的!!!spa
在微服务架构设计中,BFF
起到了一个业务聚合的关键做用,能够 经过openfeign
、restTemplate
调用基础服务
来获取数据,将获取到的数据进行组装返回结果对象,BFF
解决了业务场景问题,也一样带来了一些问题,以下所示: