微服务

什么是服务网格?

服务网格是一种控制应用的不同部分之间如何共享数据的途径。与用于管理此类通信的其他系统不同,服务网格内置于应用中的专用基础架构层。这个可见的基础架构层可以记录应用的不同部分是否能正常交互。因此,随着应用的不断发展,它在优化通信和避免停机方面就显得更加有用。

应用的每个部分——即“服务”,都要与其他服务相互协作,来为用户提供所需的内容。如果在线零售应用的用户想购买什么东西,他们得知道该商品是否有货。因此,与公司库存数据库通信的服务还需要与产品网页进行通信,而产品网页本身,则需要与用户的在线购物车进行通信。为了增加业务价值,该零售商之后可能会推出一项新服务——在应用内为用户提供产品推荐。要推荐产品,这项新服务除了要与产品标签数据库进行通信外,还需要与产品页面所需的同一个库存数据库进行通信,因此这涉及到大量可重复使用的移动组件。

现代应用常常以这种方式进行拆分,从而构成一个服务网络,其中每个组件分别执行特定的业务功能。要执行相应的功能,一项服务可能需要向其他几项服务请求数据。但如果有些服务(例如零售商的库存数据库)遇到了请求超载,会怎样呢?这就要靠服务网格了,它会将请求从一项服务路由到下一项,从而优化所有移动组件的协同工作方式。


微服务不是已经做到这一点了吗?

微服务架构可让开发人员更改应用的服务,而无需完全重新部署。与其他架构中的应用开发不同,每个微服务都是由小型团队来构建,他们可以灵活地选择自己的工具和编码语言。总体而言,微服务是独立构建的,它们之间彼此通信,出现故障也只是单独情况,而不会升级为整个应用的中断。

服务间的通信,令微服务成为可能。逻辑管理的通信可以在没有服务网格层的情况下编码到每个服务中,但随着通信变得越来越复杂,也会愈发凸显服务网格的价值。对于以微服务架构构建的云原生应用而言,利用服务网格,可以将大量离散服务整合为一个功能应用。


如何运作?

服务网格不会为应用的运行时环境引入新功能,任何架构中的应用还是需要相应的规则来指定请求如何从 A 点到达 B 点。但服务网格的不同之处在于,它从各个服务中提取逻辑管理的服务间通信,并将其抽象为一个基础架构层。

要这样做,服务网格会以网络代理阵列的形式内置到应用中。代理的概念在企业 IT 中并不陌生,如果您从一台工作计算机访问网页,很可能就会使用代理:

  1. 当对该网页的请求发出时,首先会被公司的 Web 代理收到……
  2. 通过了代理的安全措施检查后,它将被发送到托管此网页的服务器……
  3. 接下来,该网页将返回代理并再次进行安全措施检查……
  4. 之后,网页将最终从代理发送给您。

在服务网格中,请求将通过自己基础架构层中的代理在微服务之间路由。正因如此,构成服务网格的各个代理有时也被称为“sidecar”,这是因为它们与每个服务并行运行,而非在内部运行。总之,这些“sidecar”代理(与每项服务分离)构成了网格式网络。

sidecar 代理与微服务并排,用于将请求路由给其他代理。这些 sidecar 共同构成了网格式网络。

如果没有服务网格,每项微服务都需要进行逻辑编码,才能管理服务间通信,这会导致开发人员无法专注于业务目标。同时,这也意味着通信故障难以诊断,因为管理服务间通信的逻辑隐藏在每项服务中。


服务网格是如何优化通信的?

每向应用中添加一项新服务或为容器中运行的现有服务添加一个新实例,都会让通信环境变得更加复杂,并可能埋入新的故障点。在复杂的微服务架构中,如果没有服务网格,几乎不可能找到问题所在。

这是因为服务网格还会以性能指标的形式,捕获服务间通信的方方面面。随着时间推移,服务网格获取的数据逐渐累积,可用来改善服务间通信的规则,从而生成更有效、更可靠的服务请求。

例如,如果某个服务失败,服务网格可以收集有关在重试成功前所花时间的数据。随着某服务故障持续时间的数据不断积累,开发人员可编写相应的规则,以确定在重试该服务前的最佳等待时间,从而确保系统不会因不必要的重试而负担过重。


规划未来

在构建微服务时,您可能会预见到某些需求,例如快速扩展和添加新的功能以满足业务需求。与刚刚启动时相比,一年后的微服务架构很可能大不相同。首先,微服务中构建的库,在处理服务间通信时有望将操作中断次数降至最低。要想发挥微服务的潜力,单纯通过增加规模和功能绝非长久之计。随着时间推移,服务会遭遇请求超载,开发人员需要花费越来越多的时间为每项服务编写请求逻辑,所以各种问题也随之而来。

借助服务网格:

  • 开发人员可以专注于增加业务价值,不再在连接服务上消耗精力
  • 请求逻辑与服务一起,构建出一目了然的基础架构层,更便于识别和诊断问题
  • 应用更容易抵御停机影响,因为服务网格可以从发生故障的服务中重新路由请求
  • 性能指标可给出方法建议,从而优化运行时环境中的通信

服务网格,大有可为