海量数据高并发场景,构建Go+ES8企业级搜索微服务无秘分享
获取ZY↑↑方打开链接↑↑
BFF和网关以及微服务的划分原则和具体方法
BFF(Backend for Frontend,服务于前端的后端)、网关和微服务是现代分布式系统架构中常用的概念,它们在系统中承担不同的职责,以下是它们的划分原则和具体方法:
BFF 的划分原则和具体方法
- 划分原则
-
- 满足前端特定需求:BFF 的主要职责是为前端提供定制化的数据和服务,因此划分 BFF 应基于前端不同的业务场景和需求。例如,一个电商应用可能有面向移动端的 APP、面向桌面端的 Web 应用以及用于管理的后台系统,每个前端应用的数据需求和交互方式都有所不同,可分别为其创建对应的 BFF 服务。
- 业务聚合与简化:将前端需要的多个相关业务逻辑聚合在一个 BFF 服务中,避免前端与多个后端微服务直接交互,简化前端开发复杂度。例如,在社交应用中,用户资料展示页面可能需要获取用户基本信息、好友列表、关注列表等数据,这些数据可能来自不同的微服务,通过 BFF 可以将这些数据请求进行整合,一次性返回给前端。
- 隔离前端与后端变化:BFF 作为前端和后端之间的中间层,能够隔离前端和后端的变化。当后端微服务的接口或数据结构发生变化时,只需在 BFF 层进行相应调整,而无需前端修改代码;同样,当前端需求改变时,也不会直接影响到后端微服务。
- 具体方法
-
- 按前端应用类型划分:根据不同的前端应用类型,如 Web 端、移动端(iOS、Android)、小程序等,分别创建对应的 BFF 服务。每个 BFF 服务针对特定前端应用的特点和需求进行定制开发。
- 按业务模块划分:对于大型前端应用,可按照业务模块进一步细分 BFF 服务。例如,电商 APP 可分为商品详情 BFF、购物车 BFF、订单 BFF 等,每个 BFF 负责处理特定业务模块的请求和数据处理。
网关的划分原则和具体方法
- 划分原则
-
- 统一入口与流量管控:网关作为所有外部请求进入系统的统一入口,负责对流量进行管控,包括限流、熔断、认证、授权等功能。通过统一的入口,便于对系统的访问进行集中管理和控制,提高系统的安全性和稳定性。
- 协议转换与适配:不同的前端应用可能使用不同的协议与后端进行通信,网关需要能够进行协议转换和适配,将外部请求转换为内部微服务能够识别的协议和格式。例如,将 HTTP/HTTPS 请求转换为内部的 RPC 协议(如 gRPC)请求。
- 服务路由与聚合:网关需要根据请求的目标和规则,将请求路由到相应的微服务,并在必要时对多个微服务的响应进行聚合。例如,一个请求可能需要调用多个微服务才能完成处理,网关可以协调这些微服务的调用,并将最终结果返回给前端。
- 具体方法
-
- 基于功能特性划分:可以根据网关需要实现的功能,如认证网关、限流网关、日志网关等,将不同功能的网关进行分离。这样可以使每个网关专注于特定的功能,提高网关的可维护性和扩展性。
- 按业务领域划分:按照业务领域将网关进行划分,例如,电商平台可以分为用户网关、商品网关、订单网关等,每个网关负责处理特定业务领域的请求,并根据业务需求进行定制化配置。
微服务的划分原则和具体方法
- 划分原则
-
- 单一职责原则:每个微服务应该只负责一项特定的业务功能,做到高内聚、低耦合。例如,在电商系统中,用户管理、商品管理、订单管理等功能应分别由不同的微服务来实现,这样每个微服务的职责明确,便于开发、测试和维护。
- 业务边界清晰:微服务的划分应基于业务边界,将相关的业务逻辑和数据封装在一个微服务中。例如,将与支付相关的业务逻辑和数据封装在支付微服务中,该微服务对外提供与支付相关的接口,与其他微服务之间通过明确的接口进行交互。
- 可独立部署和扩展:每个微服务都应该能够独立进行部署和扩展,以满足不同业务功能的性能和资源需求。例如,在电商促销活动期间,订单微服务的请求量可能会大幅增加,可以单独对订单微服务进行扩展,而不会影响其他微服务的运行。
- 具体方法
-
- 按业务模块划分:这是最常见的微服务划分方法,按照业务功能模块将系统拆分为多个微服务。例如,电商系统可拆分为用户微服务、商品微服务、订单微服务、支付微服务、物流微服务等。
- 按数据模型划分:根据数据的独立性和关联性来划分微服务。如果某些数据在业务上具有较强的独立性,并且对这些数据的操作也相对独立,可以将这些数据相关的业务逻辑封装在一个微服务中。例如,用户数据和商品数据在业务上相对独立,可分别由用户微服务和商品微服务来管理。