对于实现生产环境的构建和部署的人来说,这是一场噩梦。并且假设它们共享相同的操作系统但需要隔离,或者出于可移植性原因将它们打包到单独的VM镜像中。为每个服务实现新VM非常昂贵! 阶段2:容器化 通过利用Linux中的cgroups和命名空间,新的操作系统级虚拟化技术通过共享相同的主机操作系统来实现应用程序的隔离环境。Docker是最受欢迎的容器运行时。 因此,为每个微服务创建并发布了一个镜像。现在,应用程序被隔离,快速,便宜地启动新容器,所有这些都可以通过一个操作系统实现! 容器化解决了构建和部署问题。我们还没有完善的监控解决方案! 我们还有其他问题吗? 管理容器! 使用容器运行可靠的基础架构需要注意一些关键事项。
阶段3:容器编排 Kubernetes是最受欢迎的集装箱协调器,它彻底改变了我们对基础设施的看法。 Kubernetes负责健康检查,可用性,负载平衡,服务发现,可扩展性,跨VM的调度容器等。太棒了! 那真是吗? 不是,请记住,我们尚未解决微服务阶段的监控/可观察性问题。那只是冰山一角。微服务是分布式的管理微服务,但是不是那么简单。 我们需要考虑一些最佳实践来方便地运行微服务。
像Netflix这样的公司提出了几种工具,并经过了微服务运行的实践考验。
满足这些最佳实践的方法是在每个微服务上使用客户端库来解决每个问题。 微服务增加了多个库! 但服务A是用Java编写的,其他服务呢? 如果我找不到其他语言的等效库怎么办? 如何让所有团队使用/维护/升级库版本? 我的公司有几百个服务我应该修改它们以便使用上面的库吗? 你现在看到问题了吗? 自微服务出现以来,这一直是一个问题。 阶段4:服务网格 Envoy,Linkerd和Nginx 等多个代理为Mesh提供解决方案。但是这篇文章只关注Envoy Mesh。Envoy是服务代理,设计为管理微服务产生的所有运营问题。 Envoy可以作为边车与每个应用程序一起运行并抽象网络。当基础设施中的所有服务流量通过Envoy网格流动时,通过统一的可观察界面可以很容易地显示问题区域。 Envoy拥有许多方便的功能
还有很多! 因此,通过从服务中抽象整个网络并与Envoy形成网格,因为它的数据面板允许我们控制上面列出的能力。