作者回复: 图示为了简化,突出和业务相关的聚合和基础服务层,没有提网关层zuul。zuul一般只处理和业务无关的跨横切面(cross-cutting)逻辑,建议BFF单独一层,关注分离和职责单一原则,当然特殊情况(业务和团队规模很小)zuul上也可以承担BFF职责。
作者回复: 都可以,统一webapi简单,一套框架搞定。内部用RPC也OK,但对外要多用一套框架转成REST/HTTP。
作者回复: 对于一个电商网站,基础服务有商品,分类,购物车,用户等。对于无线app,可以有专门的无线聚合服务,对基础服务进行聚合裁剪,再暴露给无线app,方便无线app使用。对h5app,或第三方接入,也可有专门的聚合服务。
作者回复: 恩,标准的聚合层+基础服务层
作者回复: zuul一般只处理和业务无关的跨横切面(cross-cutting)逻辑,建议BFF单独一层,当然特殊情况(业务和团队规模很小)zuul上也可以承担BFF职责。PC/mobile/3rd party zuul是共享还是独立,也是看业务和团队规模,小的时候可以共用,大的时候如果团队间有摩擦影响效率了,就要分开,这个就是微服务的分而治之的思想。
作者回复: 可以这样认为,更多是适配器,适配不同体验设备
作者回复: 可以是一种逻辑分层方式
作者回复: 你好,我是在参考Netflix微服务架构的基础上,推荐了一个简化的两层分层模型,下层是基础服务(也称原子服务,领域服务或者公共服务),上层是聚合服务(也称适配服务,BFF),聚合服务可以认为是下层的基础服务和外部的端用户体验(无线,桌面,H5,第三方开放平台等)之间的一个适配层,主要是用来适配端用户体验的,让体验和基础服务不强耦合,可以相互独立变化。这个模型比较简单易于理解,但是不是一个严格的规范,每家公司具体的分层和叫法可能都不太一样,大家不必拘泥纠结。基础服务层中如果有聚合服务也是有场景OK的,有些情况下可能没有聚合服务层,基础服务直接对外暴露,也是有场景OK的,大家要根据具体业务场景、团队和业务规模灵活应用。如果你使用TCC做分布式事务,一般是在基础服务层做,当有也可能有场景需要在聚合层做,也需要灵活应变。一般上层调用下层服务OK,同一层服务间相互调用OK,但是避免下层调用上层。
作者回复: 完全可以,很多公司用nodejs开发聚合服务。聚合服务一般由前端开发,前端熟js,用node正合适
作者回复: BFF我理解就是聚合层,就是前端应用和后端微服务的一个适配器层,适配不同用户体验的。BFF可以有很多(桌面浏览器应用BFF,无线应用BFF,H5应用BFF,第三方接入BFF),看资源和需求,一般前端团队按需开发
作者回复: 我的两层分层方式比较简单,下层统称基础服务(也有称公共服务,业务领域服务),上层聚合服务(适配服务,或BFF),下层一般有复杂业务逻辑,上层较简单聚合逻辑
作者回复: 1,松散耦合主要是指各个服务之间可以独立开发部署,相互尽量不强依赖,前端聚合服务和后台服务只是一种逻辑划分,这种划分使架构上更清晰易于识别。松散耦合并不是说完全没有依赖,前端服务一般是会依赖于后台服务的,这种依赖如果是有限受控的,则架构上是合理的。后台服务变更,如何做到对前台服务无或者很小影响,这是对架构、服务治理和研发流程管理等众多方面的考验。2,视情况定,多个微服务后面用同一个数据库也是可以的。如果量涨到一定阶段,单体数据库成为瓶颈(性能和团队开发效率瓶颈),则逐步拆分数据库,很多公司都是这么过来的。服务具体怎么拆分,没有统一标准,视业务量和团队规模,也和架构师的领域拆分能力有关。