在这种情况下和云计算中,我读到有关“服务网格”和/或“无服务器网格”的信息,但我并不完全了解它是什么。你能解释一下吗?

#1 楼

“网格”的隐喻是“许多相互联系的事物”。我们可以将TCP / IP描述为“网格技术”,因为它是连接许多事物并执行有用的服务的技术,例如重新发送丢失的数据包和适应可用带宽的变化。

现代“服务网格”技术使您可以编写基本代码,然后将其包装在现成的东西中,以进行插件发现(定位资源),相互TSL,协议升级(最新的HTTP或更高版本),应用安全性策略,容错(例如重试错误),减载,断路器,分布式跟踪(标头设置和流量采样),高级负载平衡等。

想象一下,互联网只有UDP协议。您可以发送一个数据包,但您不知道它到了那里。您可能需要在应用程序中编写一堆代码来检测丢失的消息并请求重新发送。您可以编写一个库来做到这一点。您可以针对以不同语言(PHP,Java,C,Perl等)编写的此类库编译所有应用程序。那太可怕了。您可能希望有人发明只为您做的TCP / IP。然后,您可以编写简单的代码,“仅连接并发送”,“ TCP / IP服务网格”将发挥作用,并确保数据尽快处理丢弃的消息和变化的带宽条件。

如今,编写微服务的开发人员不得不使用库来进行发现,相互TSL,协议升级(较旧的HTTP或更新的HTTP或更高版本的HTTP),安全策略,容错,减载,断路器,分布跟踪,先进的负载平衡,这太糟糕了,对吧?我们是否应该能够部署介于A->BA之间的新技术,并确保所有流量B具有所有这些功能?您需要一个服务网格。

在kubernetes世界中,诸如Linkerd和Envoy之类的事物提供了基础技术。他们是聪明的代理人。您不用A->B,而是不要A->B,其中A->P=>P->B是本地连接。服务具有由智能代理提供的数据平面(移动数据)和管理控制平面(通过将配置推送到智能代理来应用所需的策略)。

使用Linkerd,您可以将其作为恶魔集(每个容器主机一个)运行。使用Envoy,它足够小,可以将其部署为Sidecar容器。因此,您可以将“本地哑连接”保留在VM主机内。 VM主机之间的所有流量都是智能代理流量,具有您希望策略应用的所有新功能。

发现(定位资源)是服务网格所做的事情。所有容器仅连接到智能本地代理。智能代理查看连接的标头以查看您要连接的服务的逻辑名称。然后,它使用在控制平面上分布的自己的动态配置来确定将流量代理到哪个物理位置。更有趣的是,它可以对通过网络发送的流量执行所有非常聪明的操作。这些是附加的技术服务。所有的互连都是网格。高级服务将应用于网状网络中的流量。因此,它是一个服务网格。

如果要在此空间中查看某些内容,请访问istio.io

#2 楼

服务发现的概念是这样的:


当服务器(例如数据库)启动时,它会与中央注册表联系并说“嗨,我是数据库”,这些是我的连接详细信息。
然后,当客户端启动时,它会与注册表联系并说“嗨,我需要一个数据库,注册表会回复”这是连接详细信息,客户端直接连接到数据库。

任何人唯一需要的配置就是注册表的位置。网格的概念对此应用了一层抽象。每个主机都运行网状代理,没有中央注册表。现在该场景如下所示:


数据库服务器启动,并告知其本地网状代理已准备就绪。然后,该本地代理会在网格周围复制此信息。代理之间不断进行通信。
客户端启动,并告诉其本地网状代理它需要数据库
,然后客户端连接到其本地网状代理,该代理将流量转发给网状代理。数据库服务器,它只是看到一个本地连接。客户端和服务器都无法真正了解彼此,也无法真正了解彼此之间的本地连接。

优点是分散性和可伸缩性-例如,您可以添加新的数据库服务器,并让网格透明地处理路由和负载平衡。无需担心中央注册表。在我们的情况下,一个客户端和一台服务器无关紧要,但是如果您疯狂并拥有10,000个微服务,那么它就变得非常重要。

缺点是“将所有鸡蛋放在一个篮子里”之一,网状结构本身必须比进行传统连接(已被证明可以使用30年)更坚固。使用传统的故障排除工具(例如,跟踪连接)也可能会很困难,因为网状结构是“黑匣子”,因此很难推断出所有连接,因为您网络上的所有流量现在都将在网状结构内,例如您不仅可以在端口X上查找连接,而且知道这是数据库。