从单体到微服务:使用服务网格迁移 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

相关文章
|
13天前
|
缓存 监控 API
探索微服务架构中的API网关模式
【10月更文挑战第5天】随着微服务架构的兴起,企业纷纷采用这一模式构建复杂应用。在这种架构下,应用被拆分成若干小型、独立的服务,每个服务围绕特定业务功能构建并通过HTTP协议协作。随着服务数量增加,统一管理这些服务间的交互变得至关重要。API网关作为微服务架构的关键组件,承担起路由请求、聚合数据、处理认证与授权等功能。本文通过一个在线零售平台的具体案例,探讨API网关的优势及其实现细节,展示其在简化客户端集成、提升安全性和性能方面的关键作用。
47 2
|
19天前
|
Cloud Native Java API
聊聊从单体到微服务架构服务演化过程
本文介绍了从单体应用到微服务再到云原生架构的演进过程。单体应用虽易于搭建和部署,但难以局部更新;面向服务架构(SOA)通过模块化和服务总线提升了组件复用性和分布式部署能力;微服务则进一步实现了服务的独立开发与部署,提高了灵活性;云原生架构则利用容器化、微服务和自动化工具,实现了应用在动态环境中的弹性扩展与高效管理。这一演进体现了软件架构向着更灵活、更高效的方向发展。
|
17天前
|
存储 缓存 监控
探索微服务架构中的API网关模式
【10月更文挑战第1天】探索微服务架构中的API网关模式
51 2
|
3天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型加速的今天,云原生技术以其高效、灵活、可扩展的特性成为企业IT架构转型的首选。本文深入探讨了云原生环境下微服务治理的策略与实践路径,旨在为读者提供一个系统性的微服务治理框架,涵盖从服务设计、部署、监控到运维的全生命周期管理,助力企业在云端构建更加稳定、高效的业务系统。 ####
|
3天前
|
运维 监控 Cloud Native
云原生架构下,微服务治理的艺术与实践####
【10月更文挑战第14天】 在数字化转型的大潮中,云原生技术以其高效、灵活与可扩展性成为企业IT架构的首选。本文深入探讨了云原生架构的核心理念,聚焦于微服务治理的策略与实践,揭示了如何通过精细化管理提升系统的响应速度、稳定性和可维护性。不同于传统的摘要概述,本文摘要旨在直接触及读者关注的核心——即如何在复杂多变的云环境中,实现微服务的高效协同与治理,为读者提供一个清晰的行动指南。 ####
14 1
|
14天前
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
39 8
|
10天前
|
自然语言处理 监控 Cloud Native
探索微服务架构中的服务网格Service Mesh
【10月更文挑战第7天】服务网格(Service Mesh)是微服务架构中的关键组件,通过在每个服务实例旁部署Sidecar代理,实现服务间通信的管理、监控和安全增强。本文介绍了服务网格的基本概念、核心组件、优势及实施步骤,探讨了其在现代开发中的应用,并提供了实战技巧。
|
18天前
|
Kubernetes 负载均衡 安全
Istio在微服务中释放服务网格的力量
Istio在微服务中释放服务网格的力量
40 4
|
18天前
|
消息中间件 负载均衡 Cloud Native
云原生之旅:从容器到微服务的架构演变
在数字化转型的风潮中,云原生技术以其灵活性、可扩展性和弹性而备受青睐。本文将通过一个虚拟的故事,讲述一个企业如何逐步拥抱云原生,实现从传统架构向容器化和微服务架构的转变,以及这一过程中遇到的挑战和解决方案。我们将以浅显易懂的方式,探讨云原生的核心概念,并通过实际代码示例,展示如何在云平台上部署和管理微服务。
|
1月前
|
Kubernetes Go Docker
掌握微服务架构:从Go到容器化的旅程
摘要,通常简短概述文章内容,要求精炼。在本文中,我们将打破常规,采用一种故事化叙述的摘要,旨在激发读者的好奇心和探究欲: “从宁静的海滨小城出发,我们踏上了一场技术探险之旅,探索微服务架构的奥秘。我们将学习如何用Go编写微服务,以及如何通过Docker和Kubernetes将它们打包进小巧的容器中。在这场旅程中,我们将遇到挑战、收获知识,最终实现应用的快速部署与可扩展性。”

相关产品

  • 服务网格