从单体到微服务:使用服务网格迁移 Snap 的架构

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 经过两年的架构演进,Snap 从单体迁移到了云托管的微服务,这使得计算成本降低了 65%,同时减少了冗余并提升了客户的可靠性,所有的这些迁移都满足了安全性和隐私合规性的需求。

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!

经过两年的架构演进,Snap 从单体迁移到了云托管的微服务,这使得计算成本降低了 65%,同时减少了冗余并提升了客户的可靠性,所有的这些迁移都满足了安全性和隐私合规性的需求。

面向服务架构为工程师提供了可扩展性和所有权。开源的边缘(edge)代理 Envoy 是核心的构建块,能够为服务间通信创建一致的层。内部的 Web 应用 Switchboard 构成了 Snap服务网格的控制平面,它为服务的所有者提供了一个地方来管理他们的服务依赖。

在过去的两年间,云基础设施不断演化,Snap 已经从 Google App Engine 中的单体应用转变成了 Kubernetes 中的微服务,其中 Kubernetes 可以跨 Amazon Web Services 和 Google Cloud。

从零开始实现基于微服务的系统时,会面临一些挑战,包括对现有底层基础设施的考虑,如网络拓扑、认证、云资源供应、部署、日志和监控、流量路由、限速以及 staging 与生产环境。

正如 Snap 的工程博客中所描述的,为了找到一个可行的方案,他们也考虑了 Snapchatters 当前的经验。文中也指出,他们没有一个专门的团队,因此没有时间实现这项计划。

Snap 没有从头开始,而是决定使用开源的边缘代理服务 Envoy,实现其服务网格设计模式。

Envoy 提供了很多特性,比如支持 gRPC 和 HTTP/2、客户端负载均衡、可插拔的过滤器、借助一组动态管理 API(如 xDS)所实现的数据平面和控制平面的清晰分离。随着 AWS 和 Google Cloud 都提供了可用的 Envoy,于是 Envoy 就成为了 Snap 中服务与服务间的通信层。在 Snap,每个 Envoy 代理都连接一个自定义的控制平面,通过 xDS API 接收服务发现和详细的流量管理配置。

在使用服务网格的过程中,很重要的一点就是解决 Envoy 中关于移动客户端通信的问题。除此之外,当在 AWS 和 Google Cloud 上同时运行时,工程师要站在安全的角度管理他们的 Envoy 配置。

由此,形成了 Snap 服务网格。Snap 有一个名为 Switchboard 的内部 Web 应用,它担任 Snap 服务唯一的控制平面,这样服务的所有者就可以管理他们的服务依赖了。

Switchboard 配置的核心是它的服务。每个服务都有一个协议和基本的元数据,如所有者、email 列表和描述。这些服务所组成的集群可以位于任意的云供应商、可用区或环境中。Switchboard 服务有它们的依赖和消费者,也就是其他的 Switchboard 服务。如果 Snap 当时把整个系统的 API 接口全部暴露给工程团队的话,那么将会有大量配置,从而导致管理上的困难。

Switchboard 的配置变更是存储在 DynamoDB 中的。服务网格上的 Envoy 代理通过一个双向的 gRPC 流连接至 xDS 控制平面。当某个服务的 Envoy 配置生成时,控制平面会发送更新后的配置给一小部分 Envoy 代理,并且在测定它们的健康状况之后,才将变更提交至整个网格。

与此同时,服务的所有者可以直接通过 Switchboard 供应和管理 Kubernetes 集群,还可以通过金丝雀发布、健康检查端点和分区滚动更新生成 spinnaker 管道。

为了将暴露给互联网的服务数量降至最低,Snap 为其微服务设计了一个共享的、内部的、分区的网络。将会有一个 API 网关暴露到互联网上,这样的话,没有外部流量可以直接与内部网络进行通信。

这个 API 网关上运行的 Envoy 镜像和微服务上运行的 Envoy 镜像是一样的,连接到相同的控制面板。除此之外,还有自定义的 Envoy 过滤器,用来处理 Snapchat 的认证模式以及限速和负载 shedding 功能。

统一的 Snap 服务网格架构图如下所示:

untitled

Snap 的服务网格目前运行在 AWS 和 Google Cloud 的七个可用区上,网格上有 300 多个生产环境的服务。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/zhibo

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-05-07
本文作者:A Kulkrani
本文来自:“InfoQ”,了解相关信息可以关注“InfoQ

相关文章
|
1月前
|
弹性计算 API 持续交付
后端服务架构的微服务化转型
本文旨在探讨后端服务从单体架构向微服务架构转型的过程,分析微服务架构的优势和面临的挑战。文章首先介绍单体架构的局限性,然后详细阐述微服务架构的核心概念及其在现代软件开发中的应用。通过对比两种架构,指出微服务化转型的必要性和实施策略。最后,讨论了微服务架构实施过程中可能遇到的问题及解决方案。
|
1月前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
161 69
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
28天前
|
缓存 Kubernetes 容灾
如何基于服务网格构建高可用架构
分享如何利用服务网格构建更强更全面的高可用架构
|
1月前
|
设计模式 负载均衡 监控
探索微服务架构下的API网关设计
在微服务的大潮中,API网关如同一座桥梁,连接着服务的提供者与消费者。本文将深入探讨API网关的核心功能、设计原则及实现策略,旨在为读者揭示如何构建一个高效、可靠的API网关。通过分析API网关在微服务架构中的作用和挑战,我们将了解到,一个优秀的API网关不仅要处理服务路由、负载均衡、认证授权等基础问题,还需考虑如何提升系统的可扩展性、安全性和可维护性。文章最后将提供实用的代码示例,帮助读者更好地理解和应用API网关的设计概念。
68 8
|
2月前
|
消息中间件 运维 Kubernetes
后端架构演进:从单体到微服务####
本文将探讨后端架构的演变过程,重点分析从传统的单体架构向现代微服务架构的转变。通过实际案例和理论解析,揭示这一转变背后的技术驱动力、挑战及最佳实践。文章还将讨论在采用微服务架构时需考虑的关键因素,包括服务划分、通信机制、数据管理以及部署策略,旨在为读者提供一个全面的架构转型视角。 ####
41 1
|
1月前
|
Cloud Native API 持续交付
云原生架构下的微服务治理策略与实践####
本文旨在探讨云原生环境下微服务架构的治理策略,通过分析当前面临的挑战,提出一系列实用的解决方案。我们将深入讨论如何利用容器化、服务网格(Service Mesh)等先进技术手段,提升微服务系统的可管理性、可扩展性和容错能力。此外,还将分享一些来自一线项目的经验教训,帮助读者更好地理解和应用这些理论到实际工作中去。 ####
42 0
|
2月前
|
Cloud Native Devops 云计算
云计算的未来:云原生架构与微服务的革命####
【10月更文挑战第21天】 随着企业数字化转型的加速,云原生技术正迅速成为IT行业的新宠。本文深入探讨了云原生架构的核心理念、关键技术如容器化和微服务的优势,以及如何通过这些技术实现高效、灵活且可扩展的现代应用开发。我们将揭示云原生如何重塑软件开发流程,提升业务敏捷性,并探索其对企业IT架构的深远影响。 ####
50 3
|
2月前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
2月前
|
Dubbo Java 应用服务中间件
服务架构的演进:从单体到微服务的探索之旅
随着企业业务的不断拓展和复杂度的提升,对软件系统架构的要求也日益严苛。传统的架构模式在应对现代业务场景时逐渐暴露出诸多局限性,于是服务架构开启了持续演变之路。从单体架构的简易便捷,到分布式架构的模块化解耦,再到微服务架构的精细化管理,企业对技术的选择变得至关重要,尤其是 Spring Cloud 和 Dubbo 等微服务技术的对比和应用,直接影响着项目的成败。 本篇文章会从服务架构的演进开始分析,探索从单体项目到微服务项目的演变过程。然后也会对目前常见的微服务技术进行对比,找到目前市面上所常用的技术给大家进行讲解。
62 1
服务架构的演进:从单体到微服务的探索之旅
|
2月前
|
负载均衡 Java 持续交付
深入解析微服务架构中的服务发现与负载均衡
深入解析微服务架构中的服务发现与负载均衡
85 7

相关产品

  • 服务网格