如果不懂Service mesh,就不要谈微服务了

提到微服务,spring cloud等经典框架被使用的最为广泛,但是在2016年才被提起的Service Mesh,已经被Paypal、Lyft、Ticketmaster和Credit Karma等等一些大流量平台所使用,在生产应用中添加了Service mesh。今年随着Linkerd传入国内,Service mesh才在国内的技术社区里出现,而与此同时,2017年1月份Service mesh成为CNFC的官方项目。

那么,什么是Service mesh

Service mesh被用来处理服务间通讯的专用基础设施层,通过复杂的拓扑结构让请求传递的过程变得更可靠,这些服务成为新一代云原生应用程序。

在实际应用中,Service mesh通常作为一组轻量级高性能网络代理,这些代理和程序代码部署在一起,但是应用程序不需要对代理有任何动作。

Service mesh作为单独层的概念与云原生应用程序的大规模普及有关。 在云原生模型中,单个应用程序可能包含数百个服务; 每个服务可能又包含数千个实例;并且这些实例中的每一个都可能处于不断变化的状态,因为它们是由像Kubernetes这样的服务协调程序动态调度的。世界上的服务通讯不仅极其复杂,而且是运行时行为(runtime behavior)的一个普遍和基本的组成部分。管理好它对于确保端到端性能和可靠性是至关重要的。

Service mesh是网络模型

Service mesh是一个网络模型,它是位于TCP/IP之上的抽象层。它假定底层的L3/L4网络是真实存在的,并且能够点对点地传递字节。(它还假定了这个网络像运行环境的其他方面一样,是不可靠的; 因此,Service mesh必须能够处理网络故障。)

Service mesh在某些方面其实是类似于TCP/IP。就像TCP栈抽象出了网络端点之间可靠传递字节的机制一样,Service mesh在服务之间可靠地传递请求的机制也是抽象的。与TCP相同的是,Service mesh并不关心实际的有效负载,也不关心它的编码问题。应用程序有一个高级目标(“从A到B发送一些数据”), Service mesh的职责,和TCP一样,是在这个数据的发送过程中解决故障并圆满完成数据发送。

但与TCP不同的是,Service mesh具有更高的性能,它的使命超越了“仅仅让它可以工作”, 并且有一个更重要的目标: 它提供了统一的、应用广泛的观点,应用程序在运行操作时具有可视性和可控性。Service mesh的明确目标是将服务通讯从不可见的、隐含的基础设施中抽离出来,在云原生系统中扮演重要的一级成员的角色,从而可对系统进行监控,管理和控制。

Service mesh能做什么

在云原生应用中可靠地传递请求可能非常复杂。 像Linkerd这样的Service mesh,通过一系列强大技术来管理这种复杂性: 链路熔断、延迟感知、负载均衡,eventually consistent (“advisory”) 服务发现,服务续约及下线与剔除。这些功能必须协同工作,而这些功能与它们所操作的复杂环境之间的交互作用是非常微妙的。

为什么要使Service mesh

Service mesh最终并不是引入一项新功能,而是功能定位的转变。Web应用程序总是必须管理服务间通信的复杂性。要想了解Service mesh模型的起源, 我们可以追溯过去15年以来的这些应用程序的发展历程。

你可以思考下2000年的中型web应用程序的典型架构: 三层应用程序。 在这个模型中,应用程序逻辑、web服务逻辑和存储逻辑都是单独的一层。 层之间的通信虽然复杂,但这种复杂性是限定在一定范围内,因为毕竟只有两个跳转。这里没有“网格”,但是在每个层的代码中处理的跳转之间有通信逻辑。

当这种架构方式在面对应用程序内部逻辑越来越复杂化的情形时,它就开始崩溃了。 像Google、Netflix和Twitter这样的公司无时无刻都面临着巨大的流量需求,它们实现了云原生方案的前身: 应用层被分解成许多服务(有时称为“微服务”),层级间则形成了一个拓扑结构。 在这些系统中,广义的通讯层突然变得相关起来, 但通常以“胖客户端”的库集(library)形式出现, 比如twitter的Finagle,Netflix的Hystrix,以及Google的Stubby就是这样的例子。

从很多方面上来讲,像Finagle, Stubby和Hystrix这些库集其实是Service mesh的雏形。虽然它们受其周围环境的细节影响,并且需要使用特定的语言和框架,但是它们是用于管理服务到服务间通信的专用基础设施,并且(在开源Finagle和 Hystrix库集的情形下)可以在其公司之外使用。

到了云原生应用时期, 云原生模型本身结合了许多小型服务的微服务方法和两个额外的因素:容器(例如Docker),它提供了资源隔离和依赖关系管理,以及一个编排层(例如Kubernetes),它将底层硬件抽象出了一个同质池。

这三个组件支持应用程序在负载下可弹性伸缩的自然机制, 并能够处理云平台环境中存在的部分故障。

但面对数百个服务或数千个实例,和随时在重新安排实例的编排层,单个请求经由服务拓扑的路径可能非常复杂, 而由于容器使每个服务用不同的语言写入处理变得更容易了,库集方法也就不再可行了。

这种复杂性和关键性的结合,激发了对服务到服务间通信的专用基础层的需求,这个专用层与应用程序代码分离出来,并能够捕捉底层环境的高度动态特性。就是这一专用层我们称之为Service mesh。

学习Service mesh有哪些资料?

1.入门级资料

什么是Service Mesh(服务网格)

https://jimmysong.io/posts/what-is-a-service-mesh/

Pattern: Service Mesh

//philcalcado.com/2017/08/03/pattern_service_mesh.html

中文翻译:

//www.infoq.com/cn/articles/pattern-service-mesh

What is Istio? It’s a service mesh. Great. What’s a service mesh?

https://www.mirantis.com/blog/what-is-istio-its-a-service-mesh-whats-a-service-mesh

https://www.slideshare.net/dbryant_uk/oreilly-2017-introduction-to-service-meshes

Google、IBM和Lyft开源的微服务管理框架Istio简介

//dockone.io/article/2397

2.Service mesh热点文章

万字解读:Service Mesh服务网格新生代--Istio https://zhuanlan.zhihu.com/p/29586032

再谈 Kubernetes,微服务以及 Service Mesh

//baijiahao.baidu.com/s?id=1579758778464216551

系列文章:A SERVICE MESH FOR KUBERNETES

1.Top-line service metrics https://buoyant.io/a-service-mesh-for-kubernetes-part-i-top-line-service-metrics/

2.Pods are great, until they’re not https://buoyant.io/a-service-mesh-for-kubernetes-part-ii-pods-are-great-until-theyre-not/

3.Encrypting all the things https://buoyant.io/a-service-mesh-for-kubernetes-part-iii-encrypting-all-the-things/

4.Continuous deployment via traffic shifting

5.Dogfood environments, ingress, and edge routing

6.Staging microservices without the tears

7.Distributed tracing made easy

8.Linkerd as an ingress controller

9.gRPC for fun and profit

10.The Service Mesh API

11.Egress (this article) https://buoyant.io/2017/06/20/a-service-mesh-for-kubernetes-part-xi-egress/

12.Retry budgets, deadline propagation, and failing gracefully

13.Autoscaling by top-line metrics

部分中文翻译:

Kubernetes的service mesh——第一部分:Service的重要指标

//blog.csdn.net/hty46565/article/details/78179005

Kubernetes的service mesh——第二部分:以DaemonSet方式运行linkerd

//blog.csdn.net/hty46565/article/details/78188434

Kubernetes的service mesh——第三部分:将一切加密

//blog.csdn.net/hty46565/article/details/78210626

Kubernetes与云原生应用概览

//www.infoq.com/cn/articles/kubernetes-and-cloud-native-app-overview

NGINX 发布微服务平台、OpenShift Ingress Controller 和Service Mesh预览版

//www.infoq.com/cn/news/2017/09/nginx-platform-service-mesh

3.Service mesh可以参考的项目

Istio

https://istio.io/

IBM、Google、Lyft支持的一个开源的微服务连接、管理平台,并给微服务提供安全管理,支持Kubernetes、Mesos等容器管理工具,其底层依赖于Envoy。

Linkerd

https://linkerd.io/

Buoyant开发,基于Twitter的Fingle,经过长期的实际产线运行经验及验证,支持Kubernetes、DC/OS容器管理平台,也是CNCF官方支持的项目之一。据说其CEO就是service mesh概念的提出者,官方博客有很多高质量的文章,几篇网络热文均出自他们。

Envoy

https://www.envoyproxy.io/

Lyft开发,7层代理及通信总线,支持7层HTTP路由、TLS、gRPC、服务发现以及健康监测等。

原文:http://dy.163.com/v2/article/detail/D2AKGNHU0518NIIT.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用AspectCore动态代理

前言 最近越来越多的同学关注到AspectCore,并且提出不少中肯的建议,其中最多的提议是希望能够看到更多的关于AspectCore使用方式的文章和Demo。那么在这篇文章里,我们就来聊聊AspectCore核心之一的动态代理。 动态代理 在.NET平台中&#xff…

已经安装完成mysql后wamp怎么配置

如果之前安装过mysql,然后想要安装wamp,那么怎么配置呢 先安装好wamp,然后在以下目录中修改my.ini 将密码改为自己的mysql密码即可 这时你发现启动wamp还是黄的 不要慌,因为你已经安装过了wamp,所以wamp自己的mys…

通过 Visual Studio 的“代码度量值”来改进代码质量

1 软件度量值指标 1.1 可维护性指数 表示源代码的可维护性,数值越高可维护性越好。该值介于0到100之间。绿色评级在20到100之间,表明该代码具有高度的可维护性;黄色评级在10到19之间,表示该代码适度可维护;红色评级在0…

php如何接收前端返回的各种类型的数据

之前学习node后端的时候,因为始终无法在网上找到接收json数据的函数,所以后来就放弃了。最近又心血来潮,想学习php. 这次已经有了之前学习php的基础,所以直接入手thinkphp5.0 这次php的学习,主要是为了解决之前遗留的问…

ASP.NET Core 认证与授权[5]:初识授权

经过前面几章的姗姗学步,我们了解了在 ASP.NET Core 中是如何认证的,终于来到了授权阶段。在认证阶段我们通过用户令牌获取到用户的Claims,而授权便是对这些的Claims的验证,如:是否拥有Admin的角色,姓名是否…

uni-app打包h5

如果我们想打包成直接浏览的h5,我们需要配置manifest.json这个文件,在其中的h5配置中加入publicPath配置,配置如下: 代码为: "h5" : {"publicPath": "./"},配置好这个后,以后…

[52ABP实战系列] .NET CORE实战入门视频课程出来啦

“ .NET CORE实战入门视频,要是有讲的不好的地方,还请留言。” 早安! 各位道友好,.NET CORE入门视频的第一章已经录制完毕了。视频会放在传课网、网易云课堂及segment fault。 本来想的是第一章合计6个小节就可以播放完毕的&#…

ASP.NET Core缓存静态资源

背景 缓存样式表,JavaScript或图像文件等静态资源可以提高您网站的性能。在客户端,总是从缓存中加载一个静态文件,这样可以减少对服务器的请求数量,从而减少获取页面及其资源的时间。在服务器端,由于它们的请求较少&am…

【程序员】保持一颗虚心好学的心态去敲代码

最近,我感觉是自己突破最大的一段时间,为什么呢?主要是打通了接口这一块,就是用postman发送各种数据,我都能用后端接受到相关数据,并且解析出来。 在这之前我尝试过spring boot 和node,前者是太…

跟着老桂学ASP.NET Core 2.0

.net core作为微软开发技术中跨平台的利器,2.0的发布已经有一段时间了,asp.net core是新一代微软的BS开发框架,同时兼容.net core和.net framework,它的出现,使基于微软体系的BS开发迎来新的契机,开源&…

如何安装并启动django

这里我用的是pip3,一般没装两个版本的用pip就行了 安装 pip3 install django如何检测 python3 -m django --version显示版本号即可 如何创建并启动项目 创建 django-admin startproject HelloWorld启动 然后cd到HelloWorld目录里 python manage.py runserver…

ASP.NET Core 认证与授权[6]:授权策略是怎么执行的?

在上一章中ASP.NET Core 认证与授权[5]:初识授权,详细介绍了 ASP.NET Core 中的授权策略,在需要授权时,只需要在对应的Controler或者Action上面打上[Authorize]特性,并指定要执行的策略名称即可,但是,授权策…

.net core2.0下使用Identity改用dapper存储数据

前言、 已经好多天没写博客了,鉴于空闲无聊之时又兴起想写写博客,也当是给自己做个笔记。过了这么些天,我的文笔还是依然那么烂就请多多谅解了。今天主要是分享一下在使用.net core2.0下的实际遇到的情况。在使用webapi时用了identity做用户验…

如何解决vuepress部署出现样式问题

以前在安装hexo的时候出了样式问题,现在用vuepress也出现了相同的问题。 本地测试完全可以 然而打包之后就彻底乱了 即使是自己本地打包成dist之后也会出现相同的问题 有点困扰,应该是打包配置的问题 通过修改index.html里的内容。将/改为./ 发现部…

想使用Docker容器?先看看这些注意事项

Docker容器无疑是最近十年来最引人注目的技术之一,因为有了它,对我们思考设计、开发和运维软件的方式产生了非常有益的影响。 但是就像每一个开发工具一样,为了充分利用这些工具,需要注意一些使用中问题,Docker容器也是…

Vs Code如何自定义设置一键代码补全

有时候是不是看到别人输入一个vue就能打印整个代码,感觉很神奇,本文就以vue为案例教你如何使用这种骚操作!!! 点击文件->首选项->用户代码片段 输入vue.json(如果没有则新建代码片段) &…

Realm发布Realm .NET,扩展支持.NET技术栈

继去年夏天Realm引入对.NET Core的支持,使开发者可以用C#来构建移动应用之后,Realm发布了Realm .NET。Realm .NET是一个可以让开发者更好地集成他们的.NET技术栈的新组件集。 其中一个组件,是针对.NET的Global Notifier,可以实现大…

居中对齐

自绝父相 现在有一个父盒子和一个子盒子 要想让子盒子相对父盒子居中很简单,在子盒子上加上属性即可 margin: 0 auto;如果说要变成水平垂直居中呢,加上两个auto?结果肯定是不行的 得这样 用到所谓得子绝父相 首先父亲要相对定位 然后儿子设置成这样 l…

IdentityServer4(10)- 添加对外部认证的支持之QQ登录

前言 前面我们提到过IdentityServer4是可以添加外部认证的,如果外部认证支持OAuth2,那么添加到IdentityServer4是非常简单的,在ASP.NET Core下提供了非常多的外部认证实现,比如Google,Facebook,Twitter&…

springboot 多数据源mybatis的两种整合方法

转载自 springboot-mybatis多数据源的两种整合方法 简介: 随着并发量的不断增加,显然单个数据库已经承受不了高并发带来的压力。一个项目使用多个数据库(无论是主从复制- - 读写分离还是分布式数据库结构)的重要性变得越来越明显…