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仪表盘

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

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

相关文章

智能驾驶规划控制理论学习06-基于优化的规划方法之数值优化基础

目录 一、优化概念 1、一般优化问题 2、全局最优和局部最优 二、无约束优化 1、无约束优化概述 2、梯度方法 通用框架 线性搜索 回溯搜索 3、梯度下降 基本思想 实现流程 ​4、牛顿法 基本思想 实现流程 5、高斯牛顿法 6、LM法(Le…

实践航拍小目标检测,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建无人机航拍场景下的小目标检测识别分析系统

关于无人机相关的场景在我们之前的博文也有一些比较早期的实践,感兴趣的话可以自行移步阅读即可: 《deepLabV3Plus实现无人机航拍目标分割识别系统》 《基于目标检测的无人机航拍场景下小目标检测实践》 《助力环保河道水质监测,基于yolov…

高级货,极大提高效率,个人非常喜欢

软件简介: 软件【下载地址】获取方式见文末。注:推荐使用,更贴合此安装方法! FileConverter中文版是一款免费软件,具有强大的功能。它支持多种文件格式的转换,包括视频、音频、文档等。您可以批量转换文件…

bert 相似度任务训练简单版本,faiss 寻找相似 topk

目录 任务 代码 train.py predit.py faiss 最相似的 topk 数 任务 使用 bert-base-chinese 训练相似度任务,参考:微调BERT模型实现相似性判断 - 知乎 参考他上面代码,他使用的是 BertForNextSentencePrediction 模型,Bert…

Tomcat概念、安装及相关文件介绍

目录 一、web技术 1、C/S架构与B/S架构 1.1 http协议与C/S架构 1.2 http协议与B/S架构 2、前端三大核心技术 2.1 HTML(Hypertext Markup Language) 2.2 css(Cascading Style Sheets) 2.3 JavaScript 3、同步和异步 4、…

Node.js与Webpack笔记(一)

这里使用的16.19.0版本,官网和github没找到,去黑马2023年课程里找 篇幅较大会卡,此篇幅不写Webpack部分,留着下一篇 初识 1.什么是Node.js? Node.js 是一个独立的 JavaScript 运行环境,能独立执行 JS 代码&#xff…

【Linux】Linux原生异步IO:AIO

1、IO模型 1.1 简述 相信大家在搜索的时候,都会看到下面这张图,IO的使用场景:同步、异步、阻塞、非阻塞,可以组合成四种情况: 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可…

向微队列添加任务的四种方式

向微队列添加任务的四种方式 关于微任务,微队列,事件循环,可参考:深入:微任务与 Javascript 运行时环境 - Web API 接口参考 | MDN (mozilla.org) 先说答案, 四种方法: Promise.resolve().then();Mutation…

【Web前端入门学习】——HTML

目录 HTML简介HTML文件结构常用文本标签标题标签段落标签有序列表和无序列表表格标签 HTML属性a标签—超链接标签图片标签 HTML区块块元素与行内元素 HTML表单 HTML简介 HTML全称是Hypertext Markup Language超文本标记语言。 HTML的作用: 为网页提供结构&#xff…

数据库管理-第158期 Oracle Vector DB AI-09(20240304)

数据库管理158期 2024-03-04 数据库管理-第158期 Oracle Vector DB & AI-09(20240304)1 创建示例表2 添加过滤条件的向量近似查询示例1示例2示例3示例4示例5示例6示例7 总结 数据库管理-第158期 Oracle Vector DB & AI-09(20240304&a…

C#插入排序算法

插入排序实现原理 插入排序算法是一种简单、直观的排序算法,其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。 具体实现步骤如下 首先咱们假设数组长度为n,从第二个元素开始,将当前元素存储在临时变量temp中。 从当前元素的前一…

iOS 17.0 UIGraphicsBeginImageContextWithOptions 崩溃处理

在升级到iOS17后你会发现,之前版本运行的很好,这个版本突然会出现一个运行闪退。报错日志为*** Assertion failure in void _UIGraphicsBeginImageContextWithOptions(CGSize, BOOL, CGFloat, BOOL)(), UIGraphics.m:410 跟踪到具体的报错位置如下所示&a…

第4章 HSA运行时

HSA运行时是一种精简的用户模式应用程序编程接口API,它提供了主机将计算内核启动到可用HSA代理程序所必须的接口。它可以分为两类:核心和扩展。HSA核心运行时API旨在支持HSA系统平台体系结构规范所需的操作,并且必须得到任何符合HSA的系统的支…

Java多线程导入Excel示例

在导入Excel的时候,如果文件比较大,行数很多,一行行读往往速度比较慢,为了加快导入速度,我们可以采用多线程的方式 话不多说直接上代码 首先是Controller import com.sakura.base.service.ExcelService; import com.s…

智慧城市中的数字孪生:数字孪生技术助力智慧城市提高公共服务水平

目录 一、引言 二、数字孪生技术概述 三、数字孪生技术在智慧城市中的应用 1、智慧交通管理 2、智慧能源管理 3、智慧环保管理 4、智慧公共安全 四、数字孪生技术助力智慧城市提高公共服务水平的价值 五、挑战与前景 六、结论 一、引言 随着信息技术的飞速发展&…

【LeetCode】升级打怪之路 Day 13:优先级队列的应用

今日题目: 23. 合并 K 个升序链表 | LeetCode378. 有序矩阵中第 K 小的元素 | LeetCode373. 查找和最小的 K 对数字 | LeetCode703. 数据流中的第 K 大元素 | LeetCode347. 前 K 个高频元素 | LeetCode 目录 Problem 1:合并多个有序链表 【classic】LC 2…

【蓝牙协议栈】【BR/EDR】【AVDTP】音视频分布传输协议

1. AVDTP概念 AVDTP即 AUDIO/VIDEO DISTRIBUTION TRANSPORT PROTOCOL(音视频分配传输协议),主要负责 A/V stream的协商、建立及传输程序,还指定了设备之前传输A/V stream的消息格式. AVDTP的传输机制和消息格式是以 RTP为基础的。RTP由 RTP Data Transfer Protocol (RTP)和…

【软考高项】【计算专题】- 5 - 进度类 - 横道图/甘特图

一、知识点 1、基本定义 甘特图(Gantt chart )又称为横道图、条状图(Bar chart),通过条状图来显示项目各活动的进 度情况。以提出者亨利劳伦斯甘特( Henry Laurence Gantt)先生的名字命名。 目前许多文档工具都可以画甘特图。 (1)我的举例 …

07. Nginx进阶-Nginx负载均衡

简介 负载均衡 什么是负载均衡? 负载均衡,英文名称为Load Balance,其含义就是指将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行。 Nginx负载均衡 什么是Nginx负载均衡? Nginx负载均衡可以大…

计算机网络-典型网络组网架构

前面基本网络知识已经能够满足中小企业的需要了,今天来看下一些基本网络组网架构。 首先网络是分层架构,从接入层到汇聚层再到核心层,然后接入运营商出口。内部包括有线网络、无线网络,出口一般可以使用路由器或者防火墙进行安全防…