微服务之旅:从Netflix OSS到 Istio Service Mesh
在这篇文章中,我们从Netflix开始,通过Envoy和Istio的崛起,快速浏览微服务的历史.
微服务是具有边界上下文的松散耦合服务,使您能够独立开发,部署和扩展服务。它还可以定义为构建独立开发和部署的分布式系统的架构模式。 在微服务架构中处理服务之间的通信是一项挑战,因为它们需要在不可靠的网络中相互通信。
1. 微服务架构的复杂性
分布式应用的一个问题是它们通过网络进行通信 - 这是不可靠的。因此,您需要以容错的方式设计您的微服务,并能够优雅地处理故障。 在您的微服务架构中,可能有很多服务相互通信。 您需要确保一个服务宕机了,不会导致整个架构崩溃。
微服务架构中有许多组件,因此这会带来更多的故障点。 故障可能由多种原因引起 - 代码中的错误和异常,新代码的发布,部署问题,硬件故障,数据中心故障,不良的架构,缺乏单元测试,不可靠的网络通信,服务的依赖, 等等
2. Netflix OSS to the Rescue
Netflix是最早采用微服务的公司之一。 为了跟上其增长速度,Netflix决定从庞大而单一的数据中心转向基于云的微服务架构,以实现高可用,大规模和速度。基于其成功案例,Netflix开源了许多工具/技术,为微服务架构提供支持。这些工具和组件已经成为许多企业从单体应用架构到微服务架构的驱动力。
Netflix OSS是Netflix开源的一组库和框架,用于解决设计大规模分布式系统的问题。 阅读有关Netflix开源软件中心的更多信息here.
Spring Boot可以轻松创建独立的、生产级的基于Spring的应用程序。 阅读更多有关信息here.
通过一些简单的注释,您可以快速启用和配置应用程序内的通用模块,并使用经过实战考验的Netflix组件构建大型分布式系统。 提供的模块包括服务发现(Eureka), 断路器 (Hystrix), 智能路由(Zuul)和客户端负载平衡(Ribbon)。
2.1. Netflix OSS的问题
- Netflix库与Java平台紧密耦合,如果您在Java平台中开发服务,它们非常适合。但是,在多语言架构中,您需要查找Netflix之外的库来处理服务之间的通信。
- Netflix库需要嵌入到每一个微服务中,并附带业务功能。这会导致应用程序膨胀,因为您需要在所有服务中复制类似的代码。
- 同时具有业务逻辑和基础架构逻辑会增加整体应用程序的复杂性。
- 由于您现在需要处理Netflix组件的修补/升级,因此也增加了操作复杂性。
- 需要额外的工具来提高微服务体系结构的监控性。
3. 什么是Sidecar设计模式
sidecar 设计模式在云原生社区中越来越受欢迎并得到更广泛的采用。 构建具有高度可扩展性,弹性,安全性和可监控性的微服务架构具有挑战性。 Service Mesh架构的发展已经改变了游戏规则。它将与微服务架构相关的复杂性转移到单独的基础架构层,并提供许多功能,如负载平衡,服务发现,流量管理,断路,遥测,故障注入等。
3.1. 使用Sidecar模式的好处
- 通过抽象与基础架构相关的常见功能到不同的层,降低了微服务代码的复杂性。
- 减少微服务架构中的代码重复,因为您不需要在每个微服务中编写配置代码。
- 提供应用程序代码和底层平台之间的松散耦合。
3.2. 如何实现Service Mesh
要实现服务网格,您可以在服务旁边部署代理。这也被称为Sidecar
模式.。Sidecars从应用程序中抽象出复杂性,并处理服务发现,流量管理,负载平衡,断路器等功能。
来自Lyft的Envoy是为云原生应用程序设计的最流行的开源代理。 Envoy与每项服务并行运行,并以平台无关的方式提供必要的功能。服务的所有流量都通过Envoy代理流通。
4. Istio 架构
Istio是一个非常受欢迎的Service Mesh框架,它默认使用Lyft的Envoy作为sidecar代理。Sidecar与每个服务实例一起部署,它提供了一个界面来处理服务发现,负载平衡,流量管理,内部服务通信,监控等功能。Service Mesh为您提供了不再将服务与服务之间的通信作为你应用程序代码的一部分的自由。您可以让Service Mesh为您处理这种复杂性,而不是使您的微服务具有类似的功能。
Istio Service Mesh由两个主要组件组成:
- 控制面板的职责是管理和配置sidecar代理以实施策略并收集遥测数据。
- 数据面板的职责是处理服务之间的通信,并负责服务发现,负载均衡,流量管理,健康检查等功能。
请参阅我的其他博客文章,了解有关Istio控制平面和数据平面的更多信息:
作者:Samir Behara
微服务之旅:从Netflix OSS到 Istio Service Mesh的更多相关文章
- 【微服务技术专题】Netflix动态化配置服务-微服务配置组件变色龙Archaius
前提介绍 如果要设计开发一套微服务基础架构,参数化配置是一个非常重要的点,而Netflix也开源了一个叫变色龙Archaius的配置中心客户端,而且Archaius可以说是比其他客户端具备更多生产级特 ...
- 微服务架构 | 3.1 Netflix Eureka 注册中心
目录 前言 1. Eureka 基础知识 1.1 Eureka 模型中的服务器与客户端 1.2 Eureka 的 30s 启动机制 1.3 Eureka 为什么注册服务的 IP ,而不是主机名 1.4 ...
- AspNet Core Api Restful 实现微服务之旅 (一)
(一)了解微服务(二)搭建VS项目框架 (三)创建AspNet Core Api VS2017 安装包 链接:https://pan.baidu.com/s/1hsjGuJq 密码:ug59 创 ...
- golang微服务框架go-micro 入门笔记2.4 go-micro service解读
本章节阐述go-micro 服务发现原理 go-micro架构 下图来自go-micro官方 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go- ...
- 揭开服务网格~Istio Service Mesh神秘的面纱
目录 一.写在前面 二.微服务与K8S 三.服务网格与K8S 四.常见的产品 五.Istio架构 六.Istio的核心资源介绍 6.1.VirtualService 6.2.Destination R ...
- AspNet Core Api Restful +Swagger 发布IIS 实现微服务之旅 (二)
上一步我们创建好CoreApi 接下来在框架中加入 Swagger 并发布 到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore 比 ...
- AspNet Core Api Restful +Swagger 实现微服务之旅 (三)
(1) 访问Rest ful接口时 Token验证 返回数据格式封装 (一)访问时Token验证 返回数据格式封装 1.1访问Api接口 方法 实现 1.1.1 创建访问Rest ...
- AspNet Core Api Restful +Swagger 实现微服务之旅(四)
这几天没更新,项目框架也是在发展阶段,这几天学习配置了一遍Apollo和RabbitMQ 等到放到框架上之后我整理一下到时候把心得写出来相互学习. 接着上一篇的内容 (2) 程序错误时 返回数据格 ...
- Spring Cloud正式移除Hystrix、Zuul等Netflix OSS组件
1. 前言 2020-12-22日Spring官方博客宣布,Spring Cloud 2020.0.0正式发布.2020.0.0是第一个使用新的版本号命名方案的Spring Cloud发行版本.在此之 ...
随机推荐
- poj 3693 Maximum repetition substring 重复次数最多的连续子串
题目链接 题意 对于任意的字符串,定义它的 重复次数 为:它最多可被划分成的完全相同的子串个数.例如:ababab 的重复次数为3,ababa 的重复次数为1. 现给定一字符串,求它的一个子串,其重复 ...
- django+vue+nginx生产环境部署配置
部署环境: 1. linux redhat 7.1 2.python 3.6.3 3. vue 4. nginx 5. gunicorn 6. supervisord 安装: 一. 基础环境安装 1. ...
- git的使用学习(七)githup和码云的使用
1.使用GitHub 我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的.其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开 ...
- iOS 动画笔记 (二)
有它们俩你就够了! 说明:下面有些概念我说的不怎么详细,网上实在是太多了,说了我觉得也意义不大了!但链接都给大家了,可以自己去看,重点梳理学习写动画的一个过程和一些好的博客! 一:说说这两个三方库,C ...
- python 编程模型
数据模型(译) image.png 1 对象(object).类型(type)和值(value) python中所有的数据都是通过对象(object)或者对象之间的关系来表示 每个对象(objec ...
- Java Servlet Filter
做web开发的人对于Filter应该不会陌生,一直在很简单的使用,但是一直没有系统的总结一下,随着年纪的慢慢长大,喜欢总结一些事情,下面说说我对Filter的理解,官方给出的Filter的定义是在请求 ...
- ScutSDK 0.9版本发布
ScutSDK简介: ScutSDK是和Scut游戏服务器引擎,简化客户端开发的配套SDK,她彻底打通了Scut开源游戏服务器引擎与客户端引擎(如Cocos2d-x/Quick-x/Unity3D)项 ...
- gitbook简单安装和使用
1.gitbook是用来写书的,支持markdown等 2.在线写 gitbook最新版地址:https://www.gitbook.com/account/ 免费用户只能有一个public和一个pr ...
- MFC中 CString转换为char
网上好多方法,比如强制转换: CString strTest = _T(“abcd”); char *buf = (LPSTR)(LPCTSTR)strTest; 可是都只得到了第一个字符. 后来,找 ...
- zabbix学习系列之触发器
触发器的简介 监控项仅负责收集数据,而通常收集数据的目的还包括在某指标对应的数据超出合理范围时给相关人员发送告警信息,"触发器"正式 用于为监控项所收集的数据定义阈值 每一个触发器 ...