SpringCloud(19)之Skywalking应用上篇

一、Skywalking概述

        

        随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消 息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布式网络。 

        思考以下几个问题:

1.一个请求经过了这些服务之后出现了一个调用失败的问题,如何定位问题发生的地方?

2.如何计算每一个节点访问流量?

3.流量波动的时候,增加了哪些节点集群服务?

        这些问题想要得到解决,一定是有数据支撑,绝不是靠开发人员或者运维人员的直觉。所以为了解决分布式应用、微服务系统面临的这些挑战,APM系统运营而生。

1.1微服务系统监控的三要素

      

  • Logging:就是记录系统行为的离散事件,例如,服务在处理某个请求时打印的错误日志,我们可以将这些日志信息记录到 ElasticSearch 或是其他存储中,然后通过 Kibana 或是其他工具来分析   这些日志了解服务的行为和状态。大多数情况下,日志记录的数据很分散,并且相互独立,比如错 误日志、请求处理过程中关键步骤的日志等等。
  • Metrics:是系统在一段时间内某一方面的某个度量,例如,电商系统在一分钟内的请求次数。我们 常见的监控系统中记录的数据都属于这个范畴,例如 PromethusOpen-Falcon 等,这些监控系  统最终给运维人员展示的是一张张二维的折线图。  Metrics 是可以聚合的,例如,为电商系统中每  HTTP 接口添加一个计数器,计算每个接口的 QPS,之后我们就可以通过简单的加和计算得到    系统的总负载情况。
  • Tracing:即我们常说的分布式链路追踪。在微服务架构系统中一个请求会经过很多服务处理,调用 链路会非常长,要确定中间哪个服务出现异常是非常麻烦的一件事。通过分布式链路追踪,运维人 员就可以构建一个请求的视图,这个视图上展示了一个请求从进入系统开始到返回响应的整个流程。这样,就可以从中了解到所有服务的异常情况、网络调用,以及系统的性能瓶颈等。

1.2 什么是链路追踪

        谷歌在 2010 4 月发表了一篇论文《Dapper, a Large-Scale Distributed Systems Tracing

Infrastructure》介绍了分布式追踪的概念,之后很多互联网公司都开始根据这篇论文打造自己的分布 式链路追踪系统。前面提到的 APM 系统的核心技术就是分布式链路追踪。

        OpenTracing提供了一个标准的、与供应商无关的框架,这意味着如果开发者想要尝试一种不同的分布 式追踪系统,开发者只需要简单地修改Tracer配置即可,而不需要替换整个分布式追踪系统。

        现在OpenTracing API目前支持的语言众多:

1.2.1 链路追踪

         下面通过官方的一个示例简单介绍说明什么是 Tracing,Tracing学完后,更有助于大家运用Skywalking UI进行数据分析。

        在一个分布式系统中,追踪一个事务或者调用流程,可以用下图方式描绘出来。这类流程图可以看清各 组件的组合关系,但它并不能看出一次调用触发了哪个组件调用、什么时间调用、是串行调用还是并行调用。

         

        一种更有效的展现方式就是下图这样,这是一个典型的 trace视图,这种展现方式增加显示了执行时间 的上下文,相关服务间的层次关系,进程或者任务的串行或并行调用关系。这样的视图有助于发现系统 调用的关键路径。通过关注关键路径的执行过程,开发团队就可以专注于优化路径中的关键服务,最大 幅度的提升系统性能。例如下图中,我们可以看到请求串行的调用了授权服务、订单服务以及资源服务,在资源服务中又并行的执行了三个子任务。我们还可以看到,在这整个请求的生命周期中,资源服 务耗时是最长的。

1.2.2 OpenTracing

        学好OpenTracing,更有助于我们运用Skywalking UI进行数据分析。

Trace 

        一个Trace代表一个事物、请求或者是流程在分布式系中的执行过程。 OpenTracing 中的一条 Trace 认为是一个由多个 Span 组成的有向无环图(  DAG ),一个 Span 代表系统中具有开始时间和执行时 长的逻辑单元,Span一般会有一个名称,一条 Trace Span 是首尾连接的。

Span

      Span 代表系统中具有开始时间和执行时长的逻辑单元,Span 之间通过嵌套或者顺序排列建立逻辑因果 关系。换句话就是到某个服务,这个服务的为一个span。

          每个 Span 中可以包含以下的信息:

1.操作名称:例如访问的具体 RPC 服务,访问的 URL 地址等;

2.起始时间;

3.结束时间;

4.Span Tag:一组键值对构成的Span标签集合,其中键必须为字符串类型,值可以是字符串、  bool 值或者数字;

5 Span Log :一组 Span 的日志集合;

6.SpanContextTrace 的全局上下文信息;

7.ReferencesSpan 之间的引用关系,下面详细说明 Span 之间的引用关系;

         在一个 Trace 中,一个 Span 可以和一个或者多个 Span 间存在因果关系。目前,OpenTracing 定义了 ChildOf FollowsFrom 两种 Span 之间的引用关系。这两种引用类型代表了子节点和父节点间的直接 因果关系。

1.ChildOf 关系 :一个 Span 可能是一个父级 Span 的孩子,即为 ChildOf 关系。下面这些情况会构 ChildOf 关系;

1.1:一个 HTTP 请求之中,被调用的服务端产生的 Span,与发起调用的客户端产生的 Span,就 构成了 ChildOf 关系;

1.2: 一个 SQL Insert 操作的 Span,和 ORM save 方法的 Span 构成 ChildOf 关系。

      很明显,上述 ChildOf 关系中的父级 Span 都要等待子 Span 的返回,子 Span 的执行时间影响了其所   在父级 Span 的执行时间,父级 Span 依赖子 Span 的执行结果。除了串行的任务之外,我们的逻辑中   还有很多并行的任务,它们对应的 Span 也是并行的,这种情况下一个父级 Span 可以合并所有子 Span 的执行结果并等待所有并行子 Span 结束。   

        FollowsFrom 关系:在分布式系统中,一些上游系统(父节点)不以任何方式依赖下游系统(子节点)的执行结果,例如,上游系统通过消息队列向下游系统发送消息。这种情况下,下游系统对应的子 Span 和上游系统对应的父级 Span 之间是 FollowsFrom关系。

1.3 常见的APM系统

        我们前面提到了APM系统,APM 系统(Application Performance Management,即应用性能管理) 是对企业的应用系统进行实时监控,实现对应用性能管理和故障定位的系统化解决方案,在运维中常用。

  • CAT(开源):由国内美团点评开源的,基于Java开发,目前提供 JavaC/C++ Node.js PythonGo 等语言的客户端,监控数据会全量统计。国内很多公司在用,例如美团点评、携程、 拼多多等。  CAT 需要开发人员手动在应用程序中埋点,对代码侵入性比较强。
  • ZipKin(开源):由 Twitter 公司开发并开源,Java 语言实现。侵入性相对于 CAT 要低一点,需 要对web.xml 等相关配置文件进行修改,但依然对系统有一定的侵入性。Zipkin 可以轻松与Spring Cloud 进行集成,也是 Spring Cloud 推荐的 APM 系统。
  • Pinpoint(开源):韩国团队开源的 APM 产品,运用了字节码增强技术,只需要在启动时添加    启动参数即可实现 APM 功能,对代码无侵入。目前支持 Java PHP 语言,底层采用 HBase 存储数据,探针收集的数据粒度非常细,但性能损耗较大,因其出现的时间较长,完成度也很高,文档也较为丰富,应用的公司较多。

  •  SkyWalking(开源):国人开源的产品,2019 4 17 SkyWalking Apache 基金会的 孵化器毕业成为顶级项目。目前 SkyWalking 支持 Java.Net Node.js 等探针,数据存储支持  MySQL ElasticSearch等。

  • 还有很多不开源的APM系统,例如:淘宝鹰眼、华为云APM等;


1.4 Skywalking 介绍 

        Skywalking是一个可观测性分析平台和应用性能管理系统,它也是基于OpenTracing规范、开源的AMP 系统。 Skywalking提供分布式跟踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。支持Java .Net Core, PHP, NodeJS, Golang, LUA, c++代理。支持Istio +特使服务网格

         SkyWalking 核心功能:

  • 服务、服务实例、端点指标分析;
  • 服务拓扑图分析;
  • 服务、服务实例喝端点SLA分析;
  • 慢查询检测
  • 告警

SkyWalking 特点:

  • 多语言自动探针,支持Java、.NET等多种语言;
  • 为多种开源项目提供了插件,为tomcat、HttpClient、Spring、RabbitMQ、Mysql等常见基础设施提供了自动探针;
  • 微内核+插件的架构,存储、集群关丽丽、使用插件集合都可以进行自行选择;
  • 支持告警;
  • 优秀的可视化效果 

 Skywalking架构图:

         SkyWalking 分为三个核心部分:

Agent(探针)  Agent 运行在各个服务实例中,负责采集服务实例的 Trace  Metrics 数据, 然后通过 gRPC 方式上报给 SkyWalking 后端。

OAPSkyWalking 的后端服务,其主要责任有两个,一个是负责接收 Agent 上报上来的 Trace Metrics 等数据,交给 Analysis Core  (涉及SkyWalking OAP 中的多个模块)进行流式分析,最终将分析得到的结果写入持久化存储中。SkyWalking 可以使用 ElasticSearch H2 MySQL 等作为其持久化存储,一般线上使用 ElasticSearch 集群作为其后端存储。另一个是负责响应 SkyWalking UI 界面发送来的查询请求,将前面持久化的数据查询出来, 组成正确的响应结果返回给 UI 界面进行展示。

 UI 界面 SkyWalking 前后端进行分离,该 UI 界面负责将用户的查询操作封装为 GraphQL 请求 提交给 OAP 后端触发后续的查询操作,待拿到查询结果之后会在前端负责展示。

1.4.1 Skywalking 安装 

         Skywalking数据存储方式有2种,分别为H2(内存)elasticsearch,如果数据量比较大,建议使用后 者,工作中也建议使用后者。

        Skywalking自身提供了UI管理控制台,我们安装的组件:

1:elasticsearch,建议使用elasticsearch7.x

2:elasticsearch-hq,elasticsearch的管理工具,更方便管理elasticsearch

3:Skywalking

4:Skywalking-UI

1.4.2 elasticsearch安装

 1)系统资源配置修改     

        elasticsearch占用系统资源比较大,我们需要修改下系统资源配置,这样才能很好的运行 elasticsearch,修改虚拟机配置,  vi /etc/security/limits.conf ,追加内容:

* soft nofile 65535
* hard nofile 65535

 修改 vi /etc/sysctl.conf ,追加内容 :

vm.max_map_count=655360

 让配置立即生效:

/sbin/sysctl -p

 

 2)安装elasticsearch

         建议安装elasticsearch7.x ,我们这里选择7.6.2,并且采用容器的安装方式,安装如下:

docker run --name elasticsearch -p 9200:9200  -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms84m -Xmx512m" -d elasticsearch:7.6.2

        此时就会从远程镜像仓库中拉取对应的镜像。

 3)elasticsearch跨域配置

         elasticsearch默认是没有开启跨域,我们需要配置跨域,并配置集群节点名字:

#进入容器
docker exec -it elasticsearch /bin/bash

         修改容器中 /usr/share/elasticsearch/config/elasticsearch.yml 文件,添加配置如下:

cluster.name: "elasticsearch"
http.cors.enabled: true
http.cors.allow-origin: "*"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1

         参数说明:

cluster.name:集群服务名字

http.cors.enabled:开启跨域

http.cors.allow-origin: 允许跨域域名,*代表所有域名

network.host: 外部访问的IP

discovery.zen.minimum_master_nodes: 最小主节点个数

 安装完成后,重启容器 docker restart elasticsearch ,再访问 http://ip:9200/ 效果如下:

 

安装 ElasticSearch管理界面elasticsearch-hq 

docker run -d --name elastic-hq -p 5000:5000 --restart always elastichq/elasticsearch-hq

 安装完成后,访问控制台地址 http://IP:5000/#!/clusters/elasticsearch

 

1.4.3 Skywalking安装 

         Skywalking的安装我们也采用Docker安装方式,同时我们需要为Skywalking指定存储服务:

##通过docker安装skywalking
docker run --name skywalking -d -p 1234:1234 -p 11800:11800 -p 12800:12800 --restart always --link elasticsearch:elasticsearch -e SW_STORAGE=elasticsearch7 - e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200 apache/skywalking-oap-server

 参数说明:

--link elasticsearch:elasticsearch:存储服务使用elasticsearch

-e SW_STORAGE=elasticsearch7:存储服务elasticsearch的版本

-e SW_STORAGE_ES_CLUSTER_NODES=elasticsearch:9200:存储服务elasticsearch的链接地址

 接下来安装Skywalking-UI,需要指定Skywalking服务名字:

docker run --name skywalking-ui -d -p 8080:8080 --link skywalking:skywalking -e SW_OAP_ADDRESS=skywalking:12800 --restart always apache/skywalking-ui

         安装完成后,我们接下来访问Skywalking控制台: http://ip:8080

1.5 Skywalking的使用 

         相关术语:

skywalking-collector:链路数据归集器,数据可以落地ElasticSearch/H2

skywalking-ui:web可视化平台,用来展示落地的数据

skywalking-agent:探针,用来收集和发送数据到归集器

1.5.1 agent下载

         Skywalking-agent,它简称探针,用来收集和发送数据到归集器,我们先来学习下探针使用,探针对应 jar包在Skywalking源码中,我们需要先下载源码。

        Skywalking源码下载地址:  Index of /dist/skywalking   ,我们当前使用的版本是 8.3.0 ,选择下载对应版本。

 agent目录结构如下:

 目录结构说明:

activations 当前skywalking正在使用的功能组件。

agent.config 文件是 SkyWalking Agent 的唯一配置文件。

plugins 目录存储了当前 Agent 生效的插件。

optional-plugins 目录存储了一些可选的插件(这些插件可能会影响整个系统的性能或是有版权问 ),如果需要使用这些插件,需将相应 jar 包移动到 plugins 目录下。

skywalking-agent.jar  Agent 的核心 jar 包, 由它负责读取 agent.config 配置文件,加载 上述插件 jar 包,运行时收集到  Trace  Metrics 数据也是由它发送到 OAP 集群的。

1.5.2 agent应用

      项目使用agent,如果是开发环境,可以使用IDEA集成,如果是生产环境,需要将项目打包上传到服务 器。为了使用agent,我们同时需要将下载的 apache-skywalking-apm-bin文件包上传到服务器上去。 不过无论是开发环境还是生产环境使用agent ,对项目都是无侵入式的。

1.5.3 应用名配置

       我们需要用到 agent ,此时需要将 agent/config/agent.config配置文件拷贝到每个需要集成

Skywalking工程的resource目录下,我们将 agent.config拷贝到 工程\hailtaxi-parent 的每个子工 程目录下,并修改其中的 agent.service_name ,修改如下:

hailtaxi-gateway:

agent.service_name=${SW_AGENT_NAME:hailtaxi-gateway}

hailtaxi-driver:

agent.service_name=${SW_AGENT_NAME:hailtaxi-driver}

hailtaxi-order:

agent.service_name=${SW_AGENT_NAME:hailtaxi-order}

         agent.config 是一个 KV 结构的配置文件,类似于  properties 文件,value 部分使用 "${}" 包裹, 其中使用冒号  ":" 分为两部分,前半部分是可以覆盖该配置项的系统环境变量名称,后半部分为默 认值。例如这里的 agent.service_name 配置项,如果系统环境变量中指定了 SW_AGENT_NAME (注意,全是大写),则优先使用环境变量中指定的值,如果环境变量未指定,则使用 hailtaxi-driver这个默认值。

1.5.4 生产环境中使用agent

       生产环境使用,因此我们需要将agent和每个项目的jar包上传到服务器上,上传apache-skywalking-apm-bin至 /usr/local/server/skywalking ,再将工程hailtaxi-parent 中的项目打包,并分别上 传到服务器上,如下三个工程:

hailtaxi-order-1.0-SNAPSHOT.jar

hailtaxi-gateway-1.0-SNAPSHOT.jar

hailtaxi-driver-1.0-SNAPSHOT.jar

1)启动hailtaxi-gateway         

java -javaagent:/usr/local/server/skywalking/apache-skywalking-apm-
bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=hailtaxi-gateway -jar hailtaxi-gateway-1.0-SNAPSHOT.jar &

        我只就是指定对应的agent包,以及覆盖skywalking的服务名称 ,大家在生产环境中可以在挂在目录中存放agent包,然后存放统一的config文件,然后再通过命令行覆盖对应的服务名就好了。

 1.6Rocketbot

         前面我们已经完成了SkyWalking环境搭建和项目应用agent使用,我们来看如何使用 SkyWalking 提供 UI 界面—— Skywalking Rocketbot

        OAP服务和Rocket(其实就是个web项目)均已启动。

 1.6.1Rockerbot仪表盘

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Julia语言及R语言进行格拉布斯检验

在日常的计量检测工作中经常会处理各种数据,在处理数据之前会提前使用格拉布斯准则查看数据中是否存在异常值,如果存在异常值的话应该重新进行计量检测,没有异常值则对数据进行下一步操作。判断异常值常用的格拉布斯方法基于数据来自正态分布…

深度学习系列61:在CPU上运行大模型

1. 快速版 1.1 llamafile https://github.com/Mozilla-Ocho/llamafile 直接下载就可以用,链接为:https://huggingface.co/jartine/llava-v1.5-7B-GGUF/resolve/main/llava-v1.5-7b-q4.llamafile?downloadtrue 启动:./llava-v1.5-7b-q4.lla…

shell 小数比较大小

shell 小数比较大小 #!/bin/bash num15.9 result$(echo "$num1 > 5" | bc) #$num1 > 5 时返回0&#xff0c;$num1 < 5 时返回1 echo $result if [ $result -gt 0 ]; then echo ">>>>>>> $1 $2 数据异常: $hive_num" else e…

适用于 Windows 的 5 款最佳免费数据恢复软件榜单

每个计算机用户都曾经历过数据丢失的情况。很容易错误地删除重要的文件和文件夹&#xff0c;当发生这种情况时&#xff0c;可能会导致不必要的心痛和压力。值得庆幸的是&#xff0c;可以恢复 Windows PC 上丢失的数据。在本文中&#xff0c;我们将分享您可以使用的五种最佳 Win…

HTML+CSS:花式加载

效果演示 实现了一个动态加载文本效果&#xff0c;通过定义变量和应用动画效果来实现文本的动态展示。 Code <div class"container"><h1>loading...</h1> </div>:root {--text-color: orangered; /* 定义文本颜色变量为橙红色 */--inner-st…

【鸿蒙 HarmonyOS 4.0】登录流程

一、背景 登录功能在应用中是一个常用模块&#xff0c;此次使用 HarmonyOS 实现登录流程&#xff0c;包含页面呈现与网络请求。 二、页面呈现 三、实现流程 3.1、创建项目 构建一个ArkTS应用项目(Stage模型)&#xff0c;今天创建流程可查看官网教程&#xff1a;文档中心 目…

Serial studio 入门教程(安装+使用)

最近有一个朋友推荐了一个嵌入式调试工具 serial studio 用了一下很方便 今天记录一下过程 介绍 serial studio 支持多种协议和可自己定制的界面 安装 Serial Studio 国内下载地址&#xff1a; serial studio 国内镜像 安装时出现以下界面 点更多 就可以继续安装了 使用 …

新手想玩硬件,买单片机还是树莓派好?

新手想玩硬件&#xff0c;买单片机还是树莓派好&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#x…

7.1.3 Selenium的用法2

目录 1. 切换 Frame 2. 前进后退 3. 对 Cookies 操作 4. 选项卡管理(了解) 5. 异常处理 6. 反屏蔽 7. 无头模式 1. 切换 Frame 我们知道网页中有一种节点叫作 iframe&#xff0c;也就是子 Frame&#xff0c;相当于页面的子页面&#xff0c;它的结构和外部网页的结构完全…

6、聊聊cors漏洞

文章目录 1、小结1.1、存在漏洞的情况&#xff1a;1.2、常见的cors设置&#xff08;php举例&#xff09; 2、漏洞复现2.1、无需cookie2.2、需要cookie2.3、需要cookie的方式利用限制 3、补充与疑惑 1、小结 cors漏洞在20230404基本无了 估计很多乙方工作得同学都拿这个漏洞凑…

jmeter 生成html报告及解读

当前版本&#xff1a; jmeter 5.6.3mysql 5.7.39 简介 JMeter 支持在测试完成后自动生成报告&#xff0c;也支持使用结果数据文件转换成html报告&#xff08;使用 -l 文件.jtl&#xff09;。本篇文章主要介绍如何生成报告&#xff0c;以及报告的基本解读。 文章目录如下 1. 生…

06. Nginx进阶-Nginx代理服务

proxy代理功能 正向代理 什么是正向代理&#xff1f; 正向代理&#xff08;forward proxy&#xff09;&#xff0c;一个位于客户端和原始服务器之间的服务器。 工作原理 为了从原始服务器获取内容&#xff0c;客户端向代理发送一个请求并指定目标&#xff08;即原始服务器…

window10 安装配置docker

前言&#xff08;重要&#xff09;&#xff1a;确认window10版本已经更新到最新版 随着时间推移&#xff0c;docker对window版本的支持也在变&#xff0c;截至2024年3月份&#xff0c;支持win10最低版本号&#xff1a;22H2,操作系统最低版本&#xff1a;19045.2965&#xff0c…

基于springboot+vue的新闻资讯系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

科技云报道:阿里云降价,京东云跟进,谁能打赢云计算价格战?

科技云报道原创。 就在大家还在回味2月29日阿里云发布“史上最大降价”的惊喜时&#xff0c;京东云连夜发布降价消息&#xff0c;成为第一家跟进的云服务商&#xff0c;其“随便降&#xff0c;比到底&#xff01;”的口号&#xff0c;颇有对垒的意味&#xff0c;直接吹响了云计…

Python采集学习笔记-request的get请求和post请求

使用http://httpbin.org测试,一个简单的 HTTP 请求和响应服务。(需联网)1.导入requests包 import requests 2.测试get请求 url http://httpbin.org/get par {key1: value1, key2: value2} # 不带参数请求 r1 requests.get(url) # 带参数请求 r2 requests.get(url, paramspa…

【数据结构和算法初阶(C语言)】带环链表问题详解(快慢指针的烧脑应用)

目录 1.铺垫-----带环链表基本了解 2. 题目&#xff1a;环形链表 3.环形链表|| ​编辑 3.1题解1 3.2 题解2 4.总结 1.铺垫-----带环链表基本了解 环形链表题目启迪&#xff1a; 环形链表特点&#xff1a;遍历链表会出现一模一样的地址 2. 题目&#xff1a;环形链表 给…

Scrapy与分布式开发(2.3):lxml+xpath基本指令和提取方法详解

lxmlxpath基本指令和提取方法详解 一、XPath简介 XPath&#xff0c;全称为XML Path Language&#xff0c;是一种在XML文档中查找信息的语言。它允许用户通过简单的路径表达式在XML文档中进行导航。XPath不仅适用于XML&#xff0c;还常用于处理HTML文档。 二、基本指令和提取…

爬虫入门到精通_实战篇10(使用Redis+Flask维护动态代理池)

1 目标 为什么要用代理池 许多网站有专门的反爬虫措施&#xff0c;可能遇到封IP等问题。互联网上公开了大量免费代理&#xff0c;利用好资源。通过定时的检测维护同样可以得到多个可用代理。 代理池的要求 多站抓取&#xff0c;异步检测定时筛选&#xff0c;持续更新提供接…

12 状态优先级

概念 cpu需要执行很多进程&#xff0c;有很多进程排在队列中&#xff0c;每个进程加载后运行一定的时间段&#xff0c;然后切换下一个进程。cpu如何判断进程需不需要加载&#xff0c;什么时候加载&#xff0c;依靠进程的状态和优先级属性来判断&#xff0c;进程调度&#xff0…