网关和 BFF(Backend for Frontend)是微服务架构中的两个重要角色,多数开发人员对网关有所了解,但是大都理解不深,对于 BFF,有些开发人员可能听说过,但是大都感觉名字怪怪的,不理解这是个什么概念。不知道能否从微服务架构演进的视角,以假想的公司案例 + 图示方式,来介绍下它们是如何诞生出来的,以及它们分别解决了什么问题?
杨波,资深架构师,微服务技术专家。曾在拍拍贷担任基础架构研发总监,主导了拍拍贷的微服务升级改造,同时投入了很大资源进行容器云平台的研发,推动云原生技术在拍拍贷的试点和落地。
2012~2015 年,在携程担任框架资深架构师和研发总监,主导微服务核心中间件的研发和 SOA 体系建设,推动了携程微服务架构的升级改造。
更早之前,曾在 eBay 中国研发中心作为核心开发人员参与 eBay 开放 API 平台的研发工作。
作者回复: 谢谢支持!加油!
作者回复: 网关是构建微服务基础设施的一个核心组件,网关部署以后也可以说对外提供服务(反向路由,安全认证,日志监控等),它属于技术基础服务,但不属于业务服务。
作者回复: kong可以认为是专门针对API网关场景的升级版的Nginx,openresty是对Nginx的一种扩展,kong其实也是基于openrest扩展的。Nginx历史悠久,成熟稳定,应用场景丰富。这些产品总体是互补的,不能简单理解为替代关系。
作者回复: 你好,服务分层一般按照职能划分:
微服务层:提供基础业务和技术服务;
BFF:聚合裁剪适配服务,面向各种端用户体验(PC, mobile, 第三方接入等)
网关层:负责反向路由,安全,监控等跨横切面功能
实际每一层和具体协议没有严格对应关系,微服务可以用rpc,也可以http/rest,BFF和网关也可以支持rpc或者http/rest。
当然,微服务用dubbo rpc框架,BFF转成http/rest,网关再暴露http,也是一种架构方式。
作者回复: Openresty/kong都属于可编程网关。
作者回复: BFF有很多玩法,之前看到过用动态脚本(可在运行时上传动态运行)做BFF,也有尝试用GraphQL做BFF,FaaS/serless做BFF还没有怎么听说,可能是一种新的尝试,anyway,BFF目标是帮助前端快速迭代。
作者回复: 1. 网关集群可以针对各种端用户体验(PC/无线/SPA/第三方等)划分,也可以根据产品线划分,具体要看企业的业务场景和规模,之前在携程这种大规模互联网公司是按照端用户体验划分的,其它企业可能不同。
2. 这个也是要看具体企业业务场景和规模的,比如Netflix这种规模公司,前端后端团队分别隶属于不同部门,为了提升研发交付效率,所以引入单独BFF层(前端团队负责)。如果企业规模不大,聚合适配工作由后端团队一起做掉,也是完全可以的。
作者回复: 谢谢!加油!