软考 系统架构设计师系列知识点之云原生架构设计理论与实践(18)

news/2024/7/4 8:00:41 标签: 系统架构, 云原生

接前一篇文章:软考 系统架构设计师系列知识点之云原生架构设计理论与实践(17)

所属章节:

第14章. 云原生架构设计理论与实践

          第3节 云原生架构相关技术

14.3.4 服务网格

1. 技术特点

2. 主要技术

  • Istio

2017年发起的服务网格Isio开源项目,清晰定义了数据平面(由开源软件Enovt承载)和管理平面(Istio自身的核心能力)。Istio为微服务架构提供了流量管理机制,同时亦为其它增值功能(包括安全性、监控、路由、连接管理与策略等)创造了基础。Istio利用久经考验的LyftEnvoy代理进行构建,可在无需对应用程序代码作出任何改动的前提下,实现可视性与控制能力。2019年Istio所发布的1.12版本已达到小规模集群上线生产环境水平,但其性能仍然受业界诟病。开源社区正试图通过架构层面的演进改善这一问题。由于Istio是构建于Kubernetes技术之上的,所以它当然可运行于提供Kubernetes容器服务的云厂商环境中,同时,Istio成为了发部分云厂商默认使用的服务网格方案。

  • Linkerd与Consul

除了Istio外,也有Linkerd、Consul这样相对小众的ServiceMesh解决方案。Linkerd在数据平面采用了Rust编程语言实现了linkerd-proxy,控制平面与Istio一样采用Go语言编写。最新的性能测试数据显示,Linkerd在时延、资源消耗方面比Istio更具优势。Consul在数据平面上可以选择性地使用Envoy,在控制平面上直接使用ConsulServer。与Istio不同的是,Linkerd和Consul在功能上不如Istio完整。

  • Conduit

Conduit作为Kubernetes的超轻量级ServiceMesh,其目标是成为最快、最轻、最简单且最安全的ServiceMesh。它使用Rust构建了快速、安全的数据平面,用Go开发了简单而强大的控制平面,总体设计围绕着性能、安全性和可用性进行。它能透明底管理服务之间的通信,提供可测性、可靠性、安全性和弹性的支持。虽然与Linkerd相仿,数据平面是在应用代码之外运行的轻量级代理,控制平面是一个高可用的控制器,但是与Linkerd不同的是,Conduit的设计更加倾向于Kubernetes中的低资源部署。

知识补强 —— 云原生Istio基本介绍

参考:

云原生Istio基本介绍

什么是 Istio? | IBM

1. 什么是Istio

Istio是一个可配置的开源服务网格层,用于连接、监控和保护Kubernets集群中的容器。 在本文撰写之时,Istio仅以原生方式与 Kubernetes一起使用,但其开源性质使任何人都可以编写扩展,从而使Istio能够在任何集群软件上运行。

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

Istio主页:

Istio

2. Istio特征

  • 连接

对网格内部的服务之间的调用所产生的流量进行智能管理,并以此为基础,为微服务的部署、测试和升级等操作提供有力保障。

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

  • 安全

为网格内部的服务之间的调用提供认证、加密和鉴权支持,在不侵入代码的情况下,加固现有服务,提高其安全性。

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


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

  • 策略

在控制平面定制策略,并在服务中实施。

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

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

  • 观察

对服务之间的调用进行跟踪和测量,获取服务的状态信息。

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

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

至此,“14.3.4 服务网格”的全部内容就讲解完了。“14.3 云原生架构相关技术”的全部内容也都讲解完了。


http://www.niftyadmin.cn/n/5479705.html

相关文章

拯救鲨鱼!Helping wireshark!wireshark未响应解决方法

前言 做题的的时候 在用wireshark解密tls秘钥的时候 我的小鲨鱼突然未响应了 然后我多次尝试无果 并且殃及池鱼 我电脑上所有的流量包都打不开了?!!! 于是乎 尝试删了重下 还是未响应 开始怀疑电脑 重启电脑两次 还是打…

SQLite数据库在Linux系统上的使用

SQLite是一个轻量级的数据库解决方案,它是一个嵌入式的数据库管理系统。SQLite的特点是无需独立的服务器进程,可以直接嵌入到使用它的应用程序中。由于其配置简单、支持跨平台、服务器零管理,以及不需要复杂的设置和操作,SQLite非…

SVM向量支持机

1.通俗理解 svm:support vector machine目标:利用超平面将两类数据分割开来,这个超平面就是我们要设计的对象 如何设计?我们设计之后会有间隔,间隔越大分类效果就越好;距离决策边界最近的点我们成为支持向…

rust学习(recursive mutex 实现)

问题: 编写如下代码的时候出现死锁: pub fn test_double_lock() {let t Arc::new(Mutex::new(1));let t1 t.clone();let t2 t.clone();let h std::thread::spawn(move || {println!("hello trace1");let l1 t1.lock().unwrap();println…

书生浦语第五次课

LMDeploy环境部署 InternStudio开发机创建conda环境 由于环境依赖项存在torch,下载过程可能比较缓慢。InternStudio上提供了快速创建conda环境的方法。打开命令行终端,创建一个名为lmdeploy的环境: studio-conda -t lmdeploy -o pytorch-2…

网络协议学习——IP协议

目录 ​编辑 一,IP协议 二,协议字段 三,IP层传输数据的问题 1,如何将报头和有效载荷分离 2,向上协议选择 3,局域网 四,IP问题 1,IP的组成 2,IP的划分 3&#…

OSPF数据报文格式

OSPF协议是跨层封装的协议,跨四层封装,直接将应用层的数据封装在网络层协议后面,IP协议包中协议号字段对应的数值为——89 OSPF的头部信息: ——所有数据包公有的信息 版本:OSPF版本 在IPV4中一般使用OSPFV2&#xf…

MyBatis源码介绍

文章目录 MyBatis的核心流程介绍SqlSessionFactory的理解MyBatis中的Executor的源码理解Spring中是如何解决MySQL的SqlSession的线程安全问题MyBatis面向Mapper编程工作原理Mybatis动态sql执行原理Mybatis的一级、二级缓存实现原理Mybatis的插件运行原理以及如何编写一个插件my…