> For the complete documentation index, see [llms.txt](https://bohans.gitbook.io/ji-chu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bohans.gitbook.io/ji-chu/spring/group-1/spring-cloud/wang-guan-spring-cloud-gateway/shen-me-shi-fu-wu-wang-guan.md).

# 什么是服务网关？

<mark style="color:blue;">**服务网关充当服务客户端和被调用服务之间的中介。**</mark>

* **服务客户端仅与服务网关管理的单个URL通信。**
* **服务网关解析来自服务客户端调用的路径，并确定服务客户端试图调用哪个服务。**

有了服务网关，我们的**服务客户端永远不会直接调用个别服务的URL**，而是将所有调用都发送到服务网关。

<mark style="color:blue;">**由于服务网关位于从客户端到各个服务的所有调用之间，它还充当服务调用的中央PEP（策略执行点）。使用集中的PEP意味着可以在一个地方执行横切服务关注点**</mark>，而无需各个开发团队实施这些关注点。

服务网关可以实现的横切关注点示例包括：

1. ### **静态路由**

   <mark style="color:blue;">**服务网关将所有服务调用放在单个URL和API路由之后**</mark>**。这简化了开发，因为我们只需了解所有服务的一个服务端点（网关的）。**
2. ### **动态路由**

   服务网关可以检查传入的服务请求，并<mark style="color:blue;">**根据传入请求的数据为服务调用者执行智能路由**</mark>。例如，参与Beta计划的客户可能将所有对服务的调用路由到运行与其他人使用的不同代码版本的服务群集。
3. ### **身份验证和授权**

   由于所有服务调用都经过服务网关，<mark style="color:blue;">**服务网关是检查服务调用者是否已进行身份验证的自然位置**</mark>。
4. ### 指标收集和日志记录

   服务网关可用于<mark style="color:blue;">**在服务调用通过时收集指标和日志信息**</mark>。

   * 可以使用服务网关确认用户请求的关键信息是否齐全，从而确保日志记录是统一的。
   * 这并不意味着不应该从各个服务内部收集指标。相反，服务网关允许我们集中收集许多基本指标，例如服务被调用的次数和服务响应时间。

{% hint style="warning" %}

## <mark style="color:orange;">注意</mark>

<mark style="color:orange;">**如果服务网关没有正确实施，它有可能成为单点故障和潜在的瓶颈。**</mark>

在构建服务网关实现时，请记住以下几点，以降低这些风险：

1. <mark style="color:blue;">**负载均衡**</mark>**：在多个服务网关实例前实施负载均衡**是有益的。在这种情况下，位于多个服务网关实例前面的负载均衡器是一个适当的设计，可确保你的服务网关实现能够根据需要进行扩展。
2. <mark style="color:blue;">**无状态性**</mark>**：确保你的服务网关实现是无状态的**。不要在服务网关的内存中存储任何信息。如果不小心，这可能限制网关的可伸缩性。然后，你将需要确保数据在所有服务网关实例之间复制。
3. <mark style="color:blue;">**代码简洁**</mark>**：保持服务网关代码的轻量级**。服务网关是服务调用的“瓶颈”，具有多个数据库调用的复杂代码可能成为服务网关中难以追踪和解决的性能问题的根源。

通过解决这些问题，我们可以提高服务网关实现的可靠性和可伸缩性，减少其成为体系结构中的单点故障或瓶颈的风险。
{% endhint %}
