ServiceMesh介绍(一)_service mesh

最全的Linux教程,Linux从入门到精通

======================

  1. linux从入门到精通(第2版)

  2. Linux系统移植

  3. Linux驱动开发入门与实战

  4. LINUX 系统移植 第2版

  5. Linux开源网络全栈详解 从DPDK到OpenFlow

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

第一份《Linux从入门到精通》466页

====================

内容简介

====

本书是获得了很多读者好评的Linux经典畅销书**《Linux从入门到精通》的第2版**。本书第1版出版后曾经多次印刷,并被51CTO读书频道评为“最受读者喜爱的原创IT技术图书奖”。本书第﹖版以最新的Ubuntu 12.04为版本,循序渐进地向读者介绍了Linux 的基础应用、系统管理、网络应用、娱乐和办公、程序开发、服务器配置、系统安全等。本书附带1张光盘,内容为本书配套多媒体教学视频。另外,本书还为读者提供了大量的Linux学习资料和Ubuntu安装镜像文件,供读者免费下载。

华为18级工程师呕心沥血撰写3000页Linux学习笔记教程

本书适合广大Linux初中级用户、开源软件爱好者和大专院校的学生阅读,同时也非常适合准备从事Linux平台开发的各类人员。

需要《Linux入门到精通》、《linux系统移植》、《Linux驱动开发入门实战》、《Linux开源网络全栈》电子书籍及教程的工程师朋友们劳烦您转发+评论

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

1.3 集群化负载均衡架构

用户量越来越大,就意味着需要更多的小型机,但是小型机价格昂贵,操作维护成本高。
此时更优的选择是采用多台PC机部署同一个应用的方案,但是此时就需要对这些应用做负载均衡,因为客户端不知道请求会落到哪一个后端PC应用上的。

负载均衡可以分为硬件层面和软件层面。
硬件层面:F5
软件负载层面:LVS、Nginx、Haproxy
负载均衡的思想:对外暴露一个统一的接口,根据用户的请求进行对应规则转发,同时负载均衡还可以做限流等等

有了负载均衡之后,后端的应用可以根据流量的大小进行动态扩容,我们称为"水平扩展"

阿里巴巴在2008提出去“IOE”,也就是IBM小型机、Oracle数据库,EMC存储,全部改成集群化负载均衡架构,在2013年支付宝最后一台IBM小型机下线

优点:应用跟应用解耦,系统容错提高了,也解决了独立应用发布的问题,同时可以水平扩展来提供应用的并发量

1.4 服务化改造架构

虽然系统经过了垂直拆分,但是拆分之后发现在论坛和聊天室中有重复的功能,比如,用户注册、发邮件等等,一旦项目大了,集群部署多了,这些重复的功能无疑会造成资源浪费,所以会把重复功能抽取出来,名字叫"XX服务(Service)"

为了解决服务跟服务如何相互调用,需要一个程序之间的通信协议,所以就有了远程过程调用(RPC),作用就是让服务之间的程序调用变得像本地调用一样的简单

优点:在前面的架构之上解决了业务重用的问题

1.5 服务治理

随着业务的增大,基础服务越来越多,调用网的关系由最初的几个增加到几十上百,造成了调用链路错综复杂,需要对服务进行治理。

服务治理要求:
1、当我们服务节点数几十上百的时候,需要对服务有动态的感知,引入了注册中心
2、当服务链路调用很长的时候如何实现链路的监控
3、单个服务的异常,如何能避免整条链路的异常(雪崩),需要考虑熔断、降级、限流
4、服务高可用:负载均衡

典型框架比如有:Dubbo,默认采用的是Zookeeper作为注册中心。

1.6 微服务时代

分布式微服务时代

微服务是在2012年提出的概念,微服务的希望的重点是一个服务只负责一个独立的功能。

拆分原则,任何一个需求不会因为发布或者维护而影响到不相关的服务,一切可以做到独立部署运维。

比如传统的“用户中心”服务,对于微服务来说,需要根据业务再次拆分,可能需要拆分成“买家服务”、“卖家服务”、“商家服务”等。

典型代表:Spring Cloud,相对于传统分布式架构,SpringCloud使用的是HTTP作为RPC远程调用,配合上注册中心Eureka和API网关Zuul,可以做到细分内部服务的同时又可以对外暴露统一的接口,让外部对系统内部架构无感,此外Spring Cloud的config组件还可以把配置统一管理。

马丁大师对微服务的定义:Microservices

微服务真正定义的时间是在2014年

The term “Microservice Architecture” has sprung up over the last few years to describe a particular way of designing software applications as suites of independently deployable services. While there is no precise definition of this architectural style, there are certain common characteristics around organization around business capability, automated deployment, intelligence in the endpoints, and decentralized control of languages and data.

大概意思:可独立部署服务,服务会越来越细

spring cloud地址:Spring Cloudhttps://spring.io/projects/spring-cloud

1.7 服务网格新时期 (service mesh)

1.7.1 背景

早期

我们最开始用Spring+SpringMVC+Mybatis写业务代码

微服务时代

微服务时代有了Spring Cloud就完美了吗?不妨想一想会有哪些问题?

(1)最初是为了业务而写代码,比如登录功能、支付功能等,到后面会发现要解决网络通信的问题,虽然有 Spring Cloud里面的组件帮我们解决了,但是细想一下它是怎么解决的?在业务代码里面加上spring cloud maven依赖,加上spring cloud组件注解,写配置,打成jar的时候还必须要把非业务的代码也要融合在一起,称为“侵入式框架”;

(2)微服务中的服务支持不同语言开发,也需要维护不同语言和非业务代码的成本;

(3)业务代码开发者应该把更多的精力投入到业务熟悉度上,而不应该是非业务上,Spring Cloud虽然能解决微服务领域的很多问题,但是学习成本还是较大的;

(4)互联网公司产品的版本升级是非常频繁的,为了维护各个版本的兼容性、权限、流量等,因为Spring

Cloud是“代码侵入式的框架”,这时候版本的升级就注定要让非业务代码一起,一旦出现问题,再加上多语言之间的调用,工程师会非常痛苦;

(5)其实我们到目前为止应该感觉到了,服务拆分的越细,只是感觉上轻量级解耦了,但是维护成本却越高了,那么怎么 办呢?

我们不是说spring cloud不好,只是为了引出service mesh, 目前spring cloud微服务还是比较主流的, 我们指出spring cloud的不好也只是为了突出service mesh的优点

问题解决思路

  • 本质上是要解决服务之间通信的问题,不应该将非业务的代码融合到业务代码中
  • 也就是从客户端发出的请求,要能够顺利到达对应的服务,这中间的网络通信的过程要和业务代码尽量无关

服务通信无非就是服务发现、负载均衡、版本控制等等

在很早之前的单体架构中,其实通信问题也是需要写在业务代码中的,那时候怎么解决的呢?

解决方案:把网络通信,流量转发等问题放到了计算机网络模型中的TCP/UDP层,也就是非业务功能代码下沉,把这些网络的问题下沉到计算机网络模型当中,也就是网络七层模型
网络七层模型:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层

思考:

我们是否也可以把每个服务配置一个代理,所有通信的问题都交给这个代理去做,就好比大家熟悉的nginx,haproxy其实它们做反向代理把请求转发给其他服务器,也就为 Service Mesh的诞生和功能实现提供了一个解决思路

1.7.2 SideCar

它降低了与微服务架构相关的复杂性,并且提供了负载平衡、服务发现、流量管理、电路中断、遥测、故障注入等功能特性。
Sidecar模式是一种将应用功能从应用本身剥离出来作为单独进程的方式。该模式允许我们向应用无侵入添加多种功能,避免了为满足第三方组件需求而向应用添加额外的配置代码。

很多公司借鉴了Proxy模式,推出了Sidecar的产品,比如像Netflix的Prana,蚂蚁金服的SofaMesh

服务业务代码与Sidecar绑定在一起,每个服务都配置了一个Sidecar代理,每个服务所有的流量都经过sidecar,sidecar帮我们屏蔽了通信的细节,我的业务开发人员只需要关注业务就行了,而通信的事情交给sidecar处理

总结:可以理解成是代理,控制了服务的流量的进出,sidecar是为了通用基础设施而设计,可以做到与公司框架技术无侵入性

SideCar的探索之路还在继续

很多公司借鉴了Proxy模式,推出了Sidecar的产品,比如像Netflix的Prana,蚂蚁金服的SofaMesh
2014年 Netflix发布的Prana
2015年 唯品会发布local proxy
2016年 Twitter的基础设施工程师发布了第一款Service Mesh项目:Linkerd (所以下面介绍Linkerd)

1.7.3 Linkerd

2016年1月,离开Twitter的基础设施工程师打造的一个服务网格项目,第一个Service Mesh项目由此诞生,解决通用性。
Linkerd很好地结合了Kubernetes所提供的功能,以此为基础,在每个Kubernetes Node上都部署运行一个Linkerd实例,用代理的方式将加入Mesh的Pod通信转接给Linkerd,这样Linkerd就能在通信链路中完成对通信的控制和监控。

Linkerd设计思想

Linderd的思想跟sidecar很类似,目标也是屏蔽网络通信细节

Linkerd除了完成对Service Mesh的命名,以及Service Mesh各主要功能的落地,还有以下重要创举:

  • 无须侵入工作负载的代码,直接进行通信监视和管理;
  • 提供了统一的配置方式,用于管理服务之间的通信和边缘通信;
  • 除了支持Kubernetes,还支持多种底层平台。

总结:

  • 跟我们前面sidecar很类似,以前的调用方式都是服务来调用服务,在Linkerd思想要求所有的流量都走sidecar,Linkerd帮业务人员屏蔽了通信细节,通信不需要侵入到业务代码内部了,这样业务开发者就专注于业务开发的本身
  • Linkerd在面世之后,迅速获得用户的关注,并在多个用户的生产环境上成功部署、运行。2017年,Linkerd加入CNCF,随后宣布完成对千亿次生产环境请求的处理,紧接着发布了1.0版本,并且具备一定数量的商业用户,一时间风光无限,一直持续到Istio横空出世。

问题: 在早期的时候又要部署服务,又要部署sidecar,对于运维人员来说比较困难的,所以没有得到很好的发展,其实主要的 问题是Linkerd只是实现了数据层面的问题,但没有对其进行很好的管理。

数据层面:通过sidecar解决了数据处理的问题

打开github:搜索linkerd,是由scala语言编写的

1.7.4 istio

由Google、IBM和Lyft共同发起的开源项目

打开github:搜索istio,是由go语言编写的

什么是istio?

地址:https://istio.io/docs/concepts/what-is-istio/#why-use-istio

Istio makes it easy to create a network of deployed services with load balancing, service-to-service authentication, monitoring, and more, with few or no code changes in service code. You add Istio support to services by deploying a special sidecar proxy throughout your environment that intercepts all network communication between microservices, then configure and manage Istio using its control plane functionality
翻译:
通过Istio,可以轻松创建带有负载平衡,服务到服务的身份验证,监视等功能的已部署服务网络,使得服务中的代码更改很少或没有更改。 通过在整个环境中部署一个特殊的sidecar代理来拦截微服务之间的所有网络通信,然后使用其控制平面功能配置和管理,可以为服务添加Istio支持。

注意这句话:

使得服务中的代码更改很少或没有更改

这句描述非常重要,如果我们用的是spring cloud通信功能,是不是要加依赖、加注解、改配置

什么是控制平面?

控制平面就是来管理数据平面,也就是管理sideCar

所以istio既有数据平面也有控制平面

istio能干什么?

Automatic load balancing for HTTP, gRPC, WebSocket, and TCP traffic.
Fine-grained control of traffic behavior with rich routing rules, retries, failovers, and fault injection.
A pluggable policy layer and configuration API supporting access controls, rate limits and quotas.
Automatic metrics, logs, and traces for all traffic within a cluster, including cluster ingress and egress.
Secure service-to-service communication in a cluster with strong identity-based authentication and authorization.
翻译:
1.HTTP、gRPC、WebSocket和TCP流量的自动负载平衡。
2.路由、重试、故障转移和故障注入对流量行为进行细粒度控制。
3.支持访问控制、速率限制、配置API。
4.集群内所有流量的自动衡量、日志和跟踪,包括集群入口和出口。
5.使用基于身份验证和授权来保护集群中服务跟服务之间的通信。

**总结:**很明显Istio不仅拥有“数据平面(Data Plane)”,而且还拥有“控制平面(Control Plane),也就是拥有了数据 接管与集中控制能力。

1.7.5 什么是服务网格

服务网格:指的是微服务网络应用之间的交互,随着规模和复杂性增加,服务跟服务调用错综复杂

如下图所示

如果每一个格子都是一个sidecar数据平面,然后sidecar进行彼此通信,那么servicemech就是来管理每个格子的控制平面,这就是服务网格,从架构层面看起来跟网格很像

特点:
基础设施:服务网格是一种处理服务之间通信的基础设施层。
支撑云原生:服务网格尤其适用于在云原生场景下帮助应用程序在复杂的服务间可靠地传递请求。
网络代理:在实际使用中,服务网格一般是通过一组轻量级网络代理来执行治理逻辑的。
对应用透明:轻量网络代理与应用程序部署在一起,但应用感知不到代理的存在,还是使用原来的方式工作。

1.7.6 什么是Service Mesh

istio官网 也对什么是service mesh给出了定义

地址: https://istio.io/docs/concepts/what-is-istio/#what-is-a-service-mesh

Istio addresses the challenges developers and operators face as monolithic applications transition towards a distributed microservice architecture. To see how, it helps to take a more detailed look at Istio’s service mesh.
翻译:
解决开发与运维部署分布式微服务面临的问题

The term service mesh is used to describe the network of microservices that make up such applications and the interactions between them. As a service mesh grows in size and complexity, it can become harder to understand and manage. Its requirements can include discovery, load balancing, failure recovery, metrics, and monitoring. A service mesh also often has more complex operational requirements, like A/B testing, canary rollouts, rate limiting, access control, and end-to-end authentication.
翻译:
也是解决微服务之间服务跟服务之间通信的问题,可以包括服务发现、负载平衡、故障恢复、度量和监视,服务网格通常还具有更复杂的操作需求,如A/B测试、速率限制、访问控制和端到端身份验证

1.7.7 CNCF云原生组织发展和介绍

云原生发展历史时间轴

微服务:马丁大师在2014年定义了微服务

Kubernetes:从2014年6月由Google宣布开源,到2015年7月发布1.0这个正式版本并进入CNCF基金会,再到2018年3月从CNCF基金会正式毕业,迅速成为容器编排领域的标准,是开源历史上发展最快的项目之一

Linkerd:

Scala语言编写,运行在JVM中,Service Mesh名词的创造者 
2016年01月15号,0.0.7发布 
2017年01月23号,加入CNCF组织 
2017年04月25号,1.0版本发布

Envoy:

envoy是一个开源的服务代理,为云原生设计的程序,由C++语言编程[Lyft] 
2016年09月13号,1.0发布 
2017年09月14号,加入CNCF组织

Istio:

Google、IBM、Lyft发布0.1版本
Istio是开源的微服务管理、保护和监控框架。Istio为希腊语,意思是”起航“。

CNCF介绍 :

CNCF 是一个开源软件基金会,致力于使云原生计算具有普遍性和可持续性。 云原生计算使用开源软件技术栈将应用程序部署为微服务,将每个部分打包到自己的容器中,并动态编排这些容器以优化资源利用率。 云原生技术使软件开发人员能够更快地构建出色的产品。

CNCF解决了什么问题

  • 统一基础平台:kubernetes
  • 如果我们需要日志监控:Prometheus
  • 需要代理:Envoy
  • 需要分布式链路跟踪:Jaeger

地址:Cloud Native Computing Foundation

1.7.8 国内兴起的服务网格

前面提到,在Service Mesh这个概念得到具体定义之前,实际上已经有很多厂商开始了微服务新的尝试,这一动作势必引发对微服务治理的强劲需求。在Service Mesh概念普及之后,有的厂商意识到自身产品也具备Service Mesh的特点,也有厂商受其启发,将自有的服务治理平台进行完善和改造,推出自己的Service Mesh产品。例如,蚂蚁金服、腾讯和华为都推出自己的网格产品,华为的产品甚至已被投入公有云进行商业应用。

02 Istio 基本介绍

2.1 什么是Istio

地址:https://istio.io/

服务网格是一个独立的基础设施层,用来处理服务之间的通信。现代的云原生应用是由各种复杂技术构建的服务体系,服务网格负责在这些组成部分之间进行可靠的请求传递。目前典型的服务网格通常提供了一组轻量级的网络代理,这些代理会在应用无感知的情况下,同应用并行部署、运行。

前面提到,Istio出自名门,由Google、IBM和Lyft在2017年5月合作推出,它的初始设计目标是在Kubernetes的基础上,以非侵入的方式为运行在集群中的微服务提供流量管理、安全加固、服务监控和策略管理等功能。

Istio有助于降低部署的复杂性,并减轻开发团队的压力。它是一个完全开放源代码的服务网格,透明地分层到现有的分布式应用程序上。它也是一个平台,包括允许它集成到任何日志平台、遥测或策略系统中的api。Istio的多种功能集使我们能够成功、高效地运行分布式微服务体系结构,并提供一种统一的方式来保护、连接和监视微服务。

传统的spring cloud微服务项目

基于Istio架构微服务项目

Istio是基于Sidecar模式、数据平面和控制平台、是主流Service Mesh解决方案。

2.2 Istio特征

地址:https://istio.io/zh/

  • 连接:对网格内部的服务之间的调用所产生的流量进行智能管理,并以此为基础,为微服务的部署、测试和升级等操作提供有力保障。
  • 安全:为网格内部的服务之间的调用提供认证、加密和鉴权支持,在不侵入代码的情况下,加固现有服务,提高其安全性。
  • 策略:在控制平面定制策略,并在服务中实施。
  • 观察:对服务之间的调用进行跟踪和测量,获取服务的状态信息。

下面对这些特性展开详细描述。

2.2.1 连接

微服务错综复杂,要完成其业务目标,连接问题是首要问题。连接存在于所有服务的整个生命周期中,用于维持服务的运行,算得上重中之重。
相对于传统的单体应用,微服务的端点数量会急剧增加,现代的应用系统在部分或者全部生命周期中,都存在同一服务的不同版本,为不同的客户、场景或者业务提供不同的服务。同时,同一服务的不同版本也可能有不同的访问要求,甚至产生了在生产环境中进行测试的新方法论。错综复杂的服务关系对开发者来说都是很严峻的考验。

针对目前的常见业务形态,这里画一个简单的示意图来描述Service Mesh的连接功能

从不同的外部用户的角度来看,他们访问的都是同一服务端口,但实际上会因为不同的用户识别,分别访问服务A的不同版本;在网格内部,服务A的版本1可能会访问服务B的两个版本,服务A的版本2则只会访问服务B的版本1;服务B的版本1需要访问外部的云服务,版本2则无此需求。
在这个简化的模型中,包含了以下诉求:
◎ 网格内部的调用(服务A→服务B);
◎ 出站连接(服务B→外部云服务);
◎ 入站连接(用户→服务A);
◎ 流量分割(A服务跟B服务只负责与自己相关流量请求);
◎ 按调用方的服务版本进行路由(服务A的版本1分别调用了服务B的版本1和版本2);
◎ 按用户身份进行路由。

这里除了这些问题,还存在一些潜在需求,如下所述。
(1)在网格内部的服务之间如何根据实际需要对服务间调用进行路由,条件可能包括:
 ◎ 调用的源和目的服务;
 ◎ 调用内容;
 ◎ 认证身份。
(2)如何应对网络故障或者服务故障。
(3)如何处理不同服务不同版本之间的关系。
(4)怎样对出站连接进行控制。
(5)怎样接收入站连接来启动后续的整个服务链条。

这些当然不是问题的全部,其中,与流量相关的问题还引发了几个关键的功能需求,如下所述。
(1)服务注册和发现:要求能够对网格中不同的服务和不同的版本进行准确标识,不同的服务可以经由同一注册机构使用公认的方式互相查找。
(2)负载均衡策略:不同类型的服务应该由不同的策略来满足不同的需要。
(3)服务流量特征:在服务注册发现的基础之上,根据调用双方的服务身份,以及服务流量特征来对调用过程进行甄别。
(4)动态流量分配:根据对流量特征的识别,在不同的服务和版本之间对流量进行引导。

连接是服务网格应用过程中从无到有的最重要的一个环节。

2.2.2 安全

安全也是一个常谈常新的话题,在过去私有基础设施结合单体应用的环境下,这一问题并不突出,然而进入容器云时代之后,以下问题出现了。
(1)有大量容器漂浮在容器云中,采用传统的网络策略应对这种浮动的应用是比较吃力的。
(2)在由不同的语言、平台所实现的微服务之间,实施一致的访问控制也经常会因为实现的不一致而困难重重。
(3)如果是共享集群,则服务的认证和加密变得尤为重要,例如:
    ◎ 服务之间的通信要防止被其他服务监听;
    ◎ 只有提供有效身份的客户端才可以访问指定的服务;
    ◎ 服务之间的相互访问应该提供更细粒度的控制功能。

总之,要提供网格内部的安全保障,就应具备服务通信加密、服务身份认证和服务访问控制(授权和鉴权)功能。
上述功能通常需要数字证书的支持,这就隐藏了对CA的需求,即需要完成证书的签发、传播和更新业务。
除了上述核心要求,还存在对认证失败的处理、外部证书(统一 CA)的接入等相关支撑内容。

2.2.3 策略

Istio 通过可动态插拔、可扩展的策略实现访问控制、速率限制、配额管理等功能使得资源在消费者之间公平分配

在Istio中使用Mixer作为策略的执行者,Envoy的每次调用,在逻辑上都会通过Mixer进行事先预检和事后报告,这样Mixer就拥有了对流量的部分控制能力;在Istio中还有为数众多的内部适配器及进程外适配器,可以和外部软件设施一起完成策略的制定和执行。

组件简单介绍,后面会详细讲解

  • Mixer: Mixer 在整个服务网格中执行访问控制和策略执行,并从 Envoy 代理和其他服务收集遥测数据。
  • Envoy: 在istio框架中使用Envoy作为代理,使用的是C++开发的软件,用于为服务网格中的所有服务提供所有的入站和出站流量,唯一一个与数据平面打交道的
2.2.4 观察

随着服务数量的增加,监控和跟踪需求自然水涨船高。在很多情况下,可观察的保障都是系统功能的重要组成部分,是系统运维功能的重要保障。
随着廉价服务器(相对于传统小型机)的数量越来越多,服务器发生故障的频率也越来越高,人们开始产生争论:我们应该将服务器视为家畜还是宠物?家畜的特点:是有功能、无个性、可替换;而宠物的特点:是有功能、有个性、难替换。
我们越来越倾向于将服务器视为无个性、可替换的基础设施,如果主机发生故障,那么直接将其替换即可;并且,我们更加关注的是服务的总体质量。因此,微服务系统监控,除了有传统的主机监控,还更加重视高层次的服务健康监控。
服务的健康情况往往不是非黑即白的离散值,而是一系列连续状态,例如我们经常需要关注服务的调用成功率、响应时间、调用量、传输量等表现。
而且,面对数量众多的服务,我们应该能对各种级别和层次的指标进行采样、采集及汇总,获取较为精密、翔实的运行数据,最终通过一定的方法进行归纳总结和展示。
与此同时,服务网格还应提供分布式跟踪功能,对服务的调用链路进行跟踪。

观察性:动态获取服务运行数据和输出,提供强大的调用链、监控和调用日志收集输出的能力。配合可视化工具,可方便运维人员了解服务的运行状况,发现并解决问题。

2.3 Istio与服务治理

Istio是一个服务治理平台,治理的是服务间的访问,只要有访问就可以治理,不在乎这个服务是不是是所谓的微服务,也不要求跑的代码是微服务化的。单体应用不满足微服务用Istio治理也是完全可以的。提起“服务治理”,大家最先想到的一定是“微服务的服务治理”,就让我们从微服务的服务治理说起。

2.3.1服务治理的三种形态

服务治理的演变至少经过了以下三种形态。

第1种形态:在应用程序中包含治理逻辑

在微服务化的过程中,将服务拆分后会发现一堆麻烦事儿,连基本的业务连通都成了问题。在处理一些治理逻辑,比如怎么找到对端的服务实例,怎么选择一个对端实例发出请求,都需要自己写代码来实现。这种方式简单,对外部依赖少,但会导致存在大量的重复代码。所以,微服务越多,重复的代码越多,维护越难;而且,业务代码和治理逻辑耦合,不管是对治理逻辑的全局升级,还是对业务的升级,都要改同一段代码。

如下图所示

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

观察性:动态获取服务运行数据和输出,提供强大的调用链、监控和调用日志收集输出的能力。配合可视化工具,可方便运维人员了解服务的运行状况,发现并解决问题。

2.3 Istio与服务治理

Istio是一个服务治理平台,治理的是服务间的访问,只要有访问就可以治理,不在乎这个服务是不是是所谓的微服务,也不要求跑的代码是微服务化的。单体应用不满足微服务用Istio治理也是完全可以的。提起“服务治理”,大家最先想到的一定是“微服务的服务治理”,就让我们从微服务的服务治理说起。

2.3.1服务治理的三种形态

服务治理的演变至少经过了以下三种形态。

第1种形态:在应用程序中包含治理逻辑

在微服务化的过程中,将服务拆分后会发现一堆麻烦事儿,连基本的业务连通都成了问题。在处理一些治理逻辑,比如怎么找到对端的服务实例,怎么选择一个对端实例发出请求,都需要自己写代码来实现。这种方式简单,对外部依赖少,但会导致存在大量的重复代码。所以,微服务越多,重复的代码越多,维护越难;而且,业务代码和治理逻辑耦合,不管是对治理逻辑的全局升级,还是对业务的升级,都要改同一段代码。

如下图所示

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以点击这里获取!

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值