当前位置:首页 > 经验 >

分布式微服务架构详解(各种微服务架构图解)

来源:原点资讯(www.yd166.com)时间:2022-10-28 06:26:25作者:YD166手机阅读>>

图1-12

1.5.3 阻塞的整体原理分析

操作系统为了支持多任务处理,所以实现了进程调度功能,运行中的进程表示获得了CPU的使用权,当进程(线程)因为某些操作导致阻塞时,就会释放CPU使用权,使得操作系统能够多任务的执行。

当多个进程是运行状态等待CPU调度时,这些进程会保存到一个可运行队列中,如图1-13所示。

分布式微服务架构详解,各种微服务架构图解(13)

图1-13 当进程A执行创建Socket语句时,在Linux操作系统中会创建一个由文件系统管理的Socket对象,这个Socket对象包含发送缓冲区、接收缓冲区、等待队列等,其中等待队列是非常重要的结构,它指向所有需要等待当前Socket事件的进程,如图1-14所示。

当进程A调用poll()方法阻塞时,操作系统会把当前进程A从工作队列移动到Socket的等待队列中(将进程A的指针指向等待队列,后续需要进行唤醒),此时A被阻塞,CPU继续执行下一个进程。

分布式微服务架构详解,各种微服务架构图解(14)

图1-14

当Socket收到数据时,等待该Socket FD的进程会收到被唤醒,如图1-15所示,计算机通过网卡接收到客户端传过来的数据,网卡会把这个数据写入到内存,然后再通过中断信号通知CPU有数据到达,于是CPU开始执行中断程序。

当发生了中断,就意味着需要操作系统的介入,开展管理工作。由于操作系统的管理工作(如进程切换、分配IO设备)需要使用特权指令,因此CPU要从用户态转换为核心态。中断就可以使CPU从用户态转换为核心态,使操作系统获得计算机的控制权。因此,有了中断,才能实现多道程序并发执行。

此处的中断程序主要有两项功能,先将网络数据写入到对应 Socket 的接收缓冲区里面(步骤 ④),再唤醒进程 A(步骤 ⑤),重新将进程 A 放入工作队列中。

分布式微服务架构详解,各种微服务架构图解(15)

图1-15

1.5 Linux中的select/poll模型本质

前面在1.4节中讲的其实是Recv()方法,它只能监视单个Socket。而在实际应用中,这种单Socket监听很明显会影响到客户端连接数,所以我们需要寻找一种能够同时监听多个Socket的方法,而select/poll就是在这个背景下产生的,其中poll方法在前面的案例中就讲过,默认情况下使用poll模型。

先来了解一下select模型,由于在前面的分析中我们知道Recv()只能实现对单个socket的监听,当客户端连接数较多的时候,会导致吞吐量非常低,所以我们想,能不能实现同时监听多个socket,只要任何一个socket连接存在IO就绪事件,就触发进程的唤醒。

如图1-16所示,假设程序同时监听socket1和socket2这两个socket连接,那么当应用程序调用select方法后,操作系统会把进程A分别指向这连个个socket的等待队列中。当任何一个Socket收到数据后,中断程序会唤醒对应的进程。

当进程 A 被唤醒后,它知道至少有一个 Socket 接收了数据。程序只需遍历一遍 Socket 列表,就可以得到就绪的 Socket。

分布式微服务架构详解,各种微服务架构图解(16)

栏目热文

分布式事务一致性解决方案(springcloud分布式事务)

分布式事务一致性解决方案(springcloud分布式事务)

事务想必大家并不陌生,比如经常被人提起的ACID,但是为了后续的分布式事务的内容,我们先来聊聊 ACID,然后再介绍下什...

2022-10-28 06:21:22查看全文 >>

微服务与分布式区别(微服务与分布式的优势)

微服务与分布式区别(微服务与分布式的优势)

分布式架构是分布式计算技术的应用和工具,目前成熟的技术包括J2EE, CORBA和.NET(DCOM),这些技术牵扯的内...

2022-10-28 05:59:47查看全文 >>

架构解密从分布式到微服务(微服务和分布式最大区别)

架构解密从分布式到微服务(微服务和分布式最大区别)

深入Kubernetes微服务平台Kubernetes的概念与功能架构师普遍有这样的愿景:在系统中有ServiceA、S...

2022-10-28 06:22:00查看全文 >>

微服务单体和分布式(微服务第一单体架构)

微服务单体和分布式(微服务第一单体架构)

昨晚睡觉前,顺手撸了几个群聊的聊天记录。发现一个很有意思的名词“分布式单体”,顺藤摸瓜看了一下之前的聊天记录,由于内容骂...

2022-10-28 05:56:11查看全文 >>

java分布式和微服务有什么区别(java不适合微服务吗)

java分布式和微服务有什么区别(java不适合微服务吗)

一、微服务简介1. 微服务的诞生微服务是基于分而治之的思想演化出来的。过去传统的一个大型而又全面的系统,随着互联网的发展...

2022-10-28 05:53:48查看全文 >>

分布式和微服务项目(微服务分布式方案)

分布式和微服务项目(微服务分布式方案)

微服务架构的演变微服务架构的技术体系、社区目前已经越来越成熟。在最初系统架构的搭建,或者当现有架构已到达瓶颈需要进行架构...

2022-10-28 06:21:12查看全文 >>

分布式微服务架构的优缺点(微服务架构缺点)

分布式微服务架构的优缺点(微服务架构缺点)

【51CTO.com原创稿件】伴随着业务的快速的发展、越来越高的业务复杂度,几乎每个公司的系统都会从单体走向分布式,特别...

2022-10-28 06:13:15查看全文 >>

什么是分布式架构和微服务架构(微服务架构优缺点)

什么是分布式架构和微服务架构(微服务架构优缺点)

单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包部署 优点: 架构简单 部署成本低 缺点: 耦合度高(维护困...

2022-10-28 06:39:26查看全文 >>

golabel标签编辑软件基础操作教程(golabel批量打印方法)

golabel标签编辑软件基础操作教程(golabel批量打印方法)

本节要点 - 掌握Label 和 GOTO 指令的使用 - 要点解析 (1)Label 指令。 Label 指令——标签...

2022-10-28 06:34:33查看全文 >>

golabel软件使用方法(golabel软件怎么打印标签)

golabel软件使用方法(golabel软件怎么打印标签)

今天我们要讨论的是C语言中相对比较冷门的知识关键字goto!goto关键字基础知识关键字goto表示无条件跳转的意思,类...

2022-10-28 06:35:07查看全文 >>

文档排行