本文参考文献----《微服务架构与实践(第2版)》电子工业出版社出版 王磊 等著
服务接入
-
边缘服务:边缘服务的作用是简化外部消费者对系统的调用。它可以是纯前端的页面,用于获取多个服务的数据后提供给消费者,也可以是聚合类服务,将结果进行聚合后返回给消费者。
边缘服务的典型场景是支撑多样化的消费者,这种情况有时候也称作 BFF(Backend for Frontend)。譬如在支撑多种终端设备的应用中,通常会对服务的结果做必要的聚合或者裁剪,然后提供给不同的设备,如 PC 端或者其他设备等。Netflix 在其微服务的实现中,通过 BFF 为几十种设备提供不同的视频数据。
-
API 网关(API Gateway):同边缘服务类似,API 网关的存在也是为了简化消费者对系统的调用。不过它更关心的是将请求有效路由到服务,而非业务逻辑的聚合。
API 网关的主要功能如下所示:
- 请求路由。API 网关位于服务的外层,消费者端先将请求发送到网关,网关再路由至各服务。
- 协议转换。对于某些场景,服务内部实现的接口可能与消费者端期望的接口不一致。如内部使用 RPC 或私有协议,而消费者端期望 REST 接口。此时就需要通过网关完成协议的转换。
- 公共功能。因为 API 网关是微服务系统中的集中化部分(它同所有服务交互)。因此在实际落地过程中,可以将服务内部所需的一些公共功能,如认证、鉴权、限流、流量统计等,移至 API 网关实现,降低修改和升级成本。
API网关的实现如下:
另外,在某些系统中,会将 API 网关作为聚合服务使用。不过笔者建议,避免将复杂的聚合逻辑放在网关内。主要原因是:- 确保网关职责单一,聚焦于请求路由等功能,而非复杂逻辑的实现。
- 降低其替换成本。网关是服务系统中的支撑组件,随着技术的演进,应持续演进并使用更有效的技术替换。
使用 API 网关,具有如下明显的优势:
- 屏蔽服务的接口变化。API 网关的存在,使消费者端使用的接口与服务内部的接口隔离开。当服务内部的接口发生变化时,可以通过网关屏蔽对消费者端的影响。
- 降低公共功能的维护成本。对于某些微服务系统的公共功能,如认证、授权、SSL、流量统计、流控等,通过在网关内统一处理,降低了维护成本。
虽然 API 网关有如上所述的优点,但它也会带来新的问题:API 网关是对外的唯一入口,其发生故障将导致整个系统的不可用,API 网关性能下降会导致所有服务的性能下降。因此,需要做好 API 网关的无状态、可用性设计,并对 API 网关进行性能实测,保障具备足够的应对突发流量的能力。
-
数据一致性:
分布式系统与数据一致性:单体应用通常会使用单一的关系型数据库来存储数据,事务的 ACID 机制会