热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

istiosidecar流量接管_服务网格框架初探:Istio、Linkerd和SOFAmesh

点击“博云技术社区”,获取最新技术分享导读2018年,ServiceMesh在国内大热,有多家公司推出自己的ServiceMesh产品和方

07546f8f7bf0ab5ce8b3813b3cd60682.gif 点击“博云技术社区”,获取最新技术分享

导读

2018年,Service Mesh在国内大热,有多家公司推出自己的Service Mesh产品和方案。本篇文章结合Service Mesh领域内关注度较高的几种开源方案,从架构层面出发,进行初步解读。

服务网格(ServiceMesh)是什么?

Willian Morgan——Bouyant CEO给出的 Service  Mesh 定义:

服务网格是一个用于处理服务间通信的基础设施层,它负责为构建复杂的云原生应用传递可靠的网络请求。在实践中,服务网格通常实现一组和应用程序部署在一起的轻量级的网络代理,但对应用程序来说是透明的。

具体来说,Service Mesh 是服务的前置代理层的实现,采用 sidecar 设计模式,用来管理 inbound 和 outbound 流量,并且针对拦截的流量和具体配置,实现路由转发,策略控制,认证授权,数据监测等功能。将与业务服务紧密结合的外围支撑组件从服务组件中剥离,形成独立的基础设施层,进而让服务回归业务本身,不再考虑外围支撑,实现真正的服务无关性、无侵入式治理。

由于目前社区对 Service Mesh 实现都基于容器之上实现,因此本文中重点介绍 基于Kubernetes 的 Service Mesh 方案,并对其中的优劣势做出对比说明。目前社区比较活跃的 Service Mesh 实现主要有3个:Linkerd2、Istio、SOFAMesh。

服务网格对比

Linkerd2

Linkerd是基于 Kubernetes 和其他框架的服务网格。它通过为你提供运行时调试,可观察性,可靠性和安全性,使运行服务更容易,更安全,而无需对代码进行任何更改。

Istio

Istio 有助于降低这些部署的复杂性,并减轻开发团队的压力。它是一个完全开源的服务网格,可以透明地分层到现有的分布式应用程序上。它也是一个平台,包括允许它集成到任何日志记录平台、遥测或策略系统的 API。Istio的多样化功能集使你能够成功高效地运行分布式微服务架构,并提供保护、连接和监控微服务的统一方法。

SOFAMesh

SOFAMesh 是基于 Istio 改进和扩展而来的 Service Mesh 大规模落地实践方案 。

架构

Linkerd2

66dcf918191065ebb6eada1c4c389815.png

Linkerd2  整体上分为数据平面和控制平面两部分。为了能够更好的契合Kubernetes 容器环境,基于 Rust 和 Golang 重写 Linkerd 所有功能组件,主要包括控制器,管理控制台,数据采集器,数据展示平台。

控制器(Controller)

控制器部分有多个容器(public-api,tap,destination,proxy-api)组成,这些容器提供了控制平面的大部分功能。

管理控制台(Web)

提供 Linkerd2 对外呈现的 Dashboard,方便运维人员以可视化的方式实时查看服务运行状态。

数据采集器(Prometheus)

Linkerd2 中 Prometheus 组件和开源 Prometheus 组件区别在于,Linkerd2中 Prometheus 针对 Linkerd2 的特殊实现,Linkerd2 中公开的所有监测指标都通过 Prometheus 进行操作,并且完成数据的持久化存储。

数据展示平台(Grafana)

Grafana 与 Prometheus 集成,作为 Linkerd2 收集的性能监测数据可视化展示平台。

Istio

e5b787de300d655373a71f5f1000e85f.png

Istio 在架构上同样分为数据平面和控制平面。数据平面有 Proxy 代理,具体有 Envoy 实现,用于协调所有服务的 inbound 和 outbound 流量。控制层面由Pilot,Mixer,Citadel,Galley 组成。用来管理和配置代理理由策略,同时通过 Mixer 用来实时策略和收集遥测数据。

Envoy 

Envoy 被部署为 sidecar,和对应服务在同一个 Kubernetes pod 中,管理管理所有服务的入站和出站流量,提供服务发现,负载均衡,熔断,故障注入,超时等功能。同时由于和服务处于同一个 pod 中,Istio 能够将大量流量行为信号作为属性提取出来,这些属性可以和 Mixer 关联,并且发送给监控系统,提供整个服务网格行为的信息。

Pilot 

Pilot  将平台特定的服务发现机制抽象化并提炼出数据平面  API,屏蔽与sidecar 的直接对接,进一步实现配置管理的标准化。这样的抽象行为确保 Istio能够在多种环境下运行(例如 Kubernetes,Consul,Nomad),同时保持用于流量管理的相同操作界面。

Mixer

Mixer 是独立于平台的组件,可以在部署的时候选择性部署。负责在服务网格上执行访问控制和使用策略,并从 Envoy 代理和其他服务收集遥测数据。Mixer同时提供了可插拔式的插件模型,使得能够对接各种主机和基础设施后端。

Citadel

Citadel 通过内置身份和凭证管理赋能服务间和最终用户的身份认证。

Galley(暂时接触少)

Galley 代表其他的 Istio 控制平面组件,用来验证用户编写的 Istio API 配置。随着时间的推移,Galley 将接管 Istio 获取配置、处理和分配组件的顶级责任。

SOFAMesh

94eb11d76373f52e8b49b8db9885b97d.png

从 SOFAMesh 架构图可以看出,SOFAMesh 源自 Istio,区别在于 SOFAMesh 在继承 Istio 强大的功能和丰富特性的基础上,根据阿里的实践经验做了以下增强:

  • 采用 Golang 编写的 MOSN(Modular Observable Smart Net-stub)取代 Enovy,同时保证完全兼容 Envoy  API;

  • 合并 Istio 中 Mixer 组件的 check  policy 功能到数据平面,有效解决大规模服务部署情况下,Mixer 一级缓存在进行策略检查时引发的“笛卡尔积问题”,同时保留 Mixer 中遥测数据上报的功能。

  • 针对客户的实际使用情况,增强 Pilot 的服务发现能力,在保留原有能力基础上,增加对 Dubbo,SOFA  Registry 的支持,后续将进一步增加对 Zookeeper 支持;

  • 增加数据同步模块,实现多个服务注册中心数据同步;

  • 增加 Open ServiceRegistry  API,提供标准化的服务注册功能;

  • 支持更多的协议处理(SOFA  RPC、DUBBO  RPC 等)。

428e21caca512ecb7597c24b6788790b.png




推荐阅读
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 本文总结了一次针对大厂Java研发岗位的面试经历,探讨了面试中常见的问题及其背后的原因,并分享了一些实用的面试准备资料。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • Juval Löwy主张,每个类都应被视为服务,这并非是为了让服务无处不在,而是因为微服务是经过深思熟虑后系统分解的自然结果。在他的设计和构建的系统中,这种理念有助于提高模块化、可维护性和扩展性。通过将每个类视为独立的服务,系统能够更好地应对复杂性,实现更灵活的部署和更高的性能。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • 如题:2017年10月分析:还记得在没有智能手机的年代大概就是12年前吧,手机上都会有WAP浏览器。当时没接触网络原理,也不 ... [详细]
  • RTThread线程间通信
    线程中通信在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取& ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 面试题总结_2019年全网最热门的123个Java并发面试题总结
    面试题总结_2019年全网最热门的123个Java并发面试题总结 ... [详细]
  • 直播带货系统中的推流技术详解
    本文介绍了RTMP(实时消息传输协议)及其在直播带货系统中的应用,并详细探讨了带货直播系统的连麦方案,包括服务端合流和客户端合流的优势与劣势。 ... [详细]
  • 微服务优雅上下线的最佳实践
    本文介绍了微服务上下线的正确姿势,避免使用 kill -9 等粗暴手段,确保服务的稳定性和可靠性。 ... [详细]
  • 本文最初发表在Thorben Janssen的Java EE博客上,每周都会分享最新的Java新闻和动态。 ... [详细]
author-avatar
Karson2012
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有