边缘计算的学习

文章目录

    • 概要
      • 何为边缘计算?
      • 现阶段,企业使用边缘计算
      • 相对云计算
    • 整体架构流程
      • 边缘网络组件
      • 边缘计算与云安全
    • 研究方向结合
    • 引用

概要

edge

何为边缘计算?

边缘计算(英语:Edge computing),是一种分布式计算的架构,将应用程序、数据资料与服务的计算,由网络中心节点,移往网络逻辑上的边缘节点来处理。边缘计算将原本完全由中心节点处理大型服务加以分解,切割成更小与更容易管理的部分,分散到边缘节点去处理。边缘节点更接近于用户终端设备,可以加快资料的处理与发送速度,减少延迟。在这种架构下,资料的分析与知识的产生,更接近于数据资料的来源,因此更适合处理大数据。[1]
在这里插入图片描述

现阶段,企业使用边缘计算

作为一种战略,边缘计算会将统一的环境从核心数据中心一直扩展到用户和数据附近的物理位置。通过采用混合云战略,企业可以在自己的数据中心和公共云基础架构(如 Amazon Web Services、Microsoft Azure 或 Google Cloud )上运行相同的工作负载,同样地,边缘战略则将云环境扩展到更多地方。

如今,边缘计算已广泛用于许多行业,包括电信、制造、运输、公用事业等。同样地,企业实施边缘计算的原因也各不相同。[2]
在这里插入图片描述

边缘计算3.0
在这里插入图片描述

相对云计算

✔其实如果说云计算是集中式大数据处理,边缘计算则可以理解为边缘式大数据处理。

但不同的是,只是这一次,数据不用再传到遥远的云端,在边缘侧就能解决。

✔边缘计算更适合实时的数据分析和智能化处理,相较单纯的云计算也更加高效而且安全!

边缘计算和云计算两者实际上都是处理大数据的计算运行的一种方式。

边缘计算更准确的说应该是对云计算的一种补充和优化![3]

整体架构流程

edge

边缘网络组件

边缘网络(Edge Network)的组件可以根据其功能和用途进行分类,通常包括以下主要部分:

  1. 边缘节点(Edge Nodes)

    • 边缘节点是位于靠近数据源或用户的设备,负责处理和存储数据,以减少延迟并优化带宽。边缘节点可能是边缘服务器、路由器、网关、物联网设备、智能传感器等。
  2. 边缘网关(Edge Gateway)

    • 边缘网关用于在边缘节点和云端之间实现数据通信和协议转换。它连接本地设备和更大范围的网络,提供数据聚合、协议转换和安全管理功能。
  3. 网络设备(Network Devices)

    • 这些设备包括交换机、路由器、负载均衡器等,负责网络流量的管理和数据的路由。在边缘网络中,网络设备负责管理边缘节点之间和边缘与云端之间的数据传输。
  4. 边缘计算平台(Edge Computing Platform)

    • 边缘计算平台是用于在边缘设备上运行应用程序和分析任务的软件平台。这些平台可以包括边缘计算框架(如K3s、KubeEdge)和其他边缘计算软件,以便在靠近数据源的位置进行数据处理。
  5. 存储组件(Storage Components)

    • 边缘存储设备用于本地存储数据,以减轻云存储的压力。它可以包括固态硬盘(SSD)、硬盘驱动器(HDD)等,以快速访问和处理数据。
  6. 安全组件(Security Components)

    • 边缘网络的安全组件负责对数据传输和存储的保护,包括防火墙、入侵检测和防御系统、虚拟专用网络(VPN)等,以防止数据泄漏和攻击。
  7. 边缘应用(Edge Applications)

    • 边缘应用程序在边缘节点上运行,以提供更快的用户响应和本地处理功能。典型的边缘应用包括物联网(IoT)数据分析、视频处理、智能制造控制等。
  8. 边缘控制器(Edge Controllers)

    • 边缘控制器通常用于管理和协调边缘节点的计算资源与任务调度。边缘控制器可以根据不同任务的需求在边缘网络中动态分配计算和存储资源。

这些组件共同作用,提供边缘计算能力,将计算和存储资源下沉至靠近数据源的位置,从而优化网络性能、降低延迟和减轻中心云端的负载。

边缘计算与云安全

边缘安全是对存储或处理在网络边缘的数据的保护。
数据通常存储在一个集中的位置,如数据中心或云。而在边缘计算中,数据被处理并保持在更接近收集地点的位置。这有几个优点,例如减少延迟和增加可靠性和弹性。然而,它也带来了新的安全挑战。这些风险包括:

● 数据丢失:作为与边缘计算相关的最大风险之一,如果设备丢失或被盗,或者损坏或损坏,则可能会发生数据丢失。

● 数据泄露:如果设备没有妥善保护或被黑客攻击,就可能发生数据泄露。

● 性能问题:如果没有足够的可用带宽,或者有太多的设备访问相同的数据,就会出现性能问题。

研究方向结合

边缘安全参考框架
在这里插入图片描述

结合SDN(软件定义网络)与机器学习的边缘计算是一个非常热门的研究方向。通过利用机器学习的能力,SDN 可以更智能地控制网络流量,优化资源利用,并提高网络服务的质量。以下是一个简单的 Python 示例,演示如何结合 SDN 和机器学习来做一些智能化的网络流量优化:

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER, set_ev_cls
from ryu.ofproto import ofproto_v1_3

class SDN_MachineLearning_Controller(app_manager.RyuApp):
    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

    def __init__(self, *args, **kwargs):
        super(SDN_MachineLearning_Controller, self).__init__(*args, **kwargs)
        # Load or generate dataset
        self.dataset = pd.read_csv("network_traffic_data.csv")
        self.model = self.train_ml_model()

    def train_ml_model(self):
        # Prepare dataset for training
        features = self.dataset[['src_ip', 'dst_ip', 'packet_count', 'byte_count']]
        labels = self.dataset['traffic_class']
        X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)
        
        # Train a random forest regressor model
        model = RandomForestRegressor(n_estimators=100, random_state=42)
        model.fit(X_train, y_train)
        return model

    @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
    def packet_in_handler(self, ev):
        msg = ev.msg
        datapath = msg.datapath
        ofproto = datapath.ofproto
        parser = datapath.ofproto_parser
        
        # Extract information from packet-in message
        pkt = msg.data
        src_ip, dst_ip = self.extract_ip(pkt)
        packet_count = len(pkt)
        byte_count = msg.total_len

        # Prepare data for prediction
        feature_data = np.array([[src_ip, dst_ip, packet_count, byte_count]])
        predicted_class = self.model.predict(feature_data)
        
        # Install flow rule based on predicted class
        if predicted_class == 1:  # Example: if traffic class indicates high priority
            actions = [parser.OFPActionOutput(ofproto.OFPP_HIGH_PRIORITY)]
        else:
            actions = [parser.OFPActionOutput(ofproto.OFPP_NORMAL)]

        match = parser.OFPMatch(in_port=msg.match['in_port'], eth_dst=dst_ip)
        self.add_flow(datapath, match, actions)
        
        # Forward packet to the appropriate port
        out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id, in_port=msg.match['in_port'],
                                  actions=actions, data=msg.data)
        datapath.send_msg(out)

    def add_flow(self, datapath, match, actions):
        ofproto = datapath.ofproto
        parser = datapath.ofproto_parser
        
        # Add a flow entry with specific match and actions
        inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions)]
        mod = parser.OFPFlowMod(datapath=datapath, priority=1, match=match, instructions=inst)
        datapath.send_msg(mod)
    
    def extract_ip(self, packet):
        # Extract source and destination IP from packet
        # Placeholder for demonstration
        return "192.168.1.1", "192.168.1.2"

if __name__ == "__main__":
    # This script is meant to be run as part of a Ryu controller instance
    # Use Ryu's `ryu-manager` to run this file
    print("Starting SDN Machine Learning Controller")

如果需要同时支持IPV4和IPV6的数据包

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from ryu.base import app_manager
from ryu.controller import ofp_event
from ryu.controller.handler import MAIN_DISPATCHER, set_ev_cls
from ryu.ofproto import ofproto_v1_3
from ryu.lib.packet import packet, ethernet, ipv4, ipv6, tcp, udp
import joblib

class SDN_MachineLearning_Controller(app_manager.RyuApp):
    OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION]

    def __init__(self, *args, **kwargs):
        super(SDN_MachineLearning_Controller, self).__init__(*args, **kwargs)
        # Load or generate dataset
        self.dataset = pd.read_csv("network_traffic_data.csv")
        self.model = self.train_ml_model()
        self.datapaths = {}

    def train_ml_model(self):
        # Prepare dataset for training
        features = self.dataset[['src_ip', 'dst_ip', 'packet_count', 'byte_count', 'protocol']]
        labels = self.dataset['traffic_class']
        X_train, X_test, y_train, y_test = train_test_split(features, labels, test_size=0.2, random_state=42)
        
        # Train a random forest classifier model
        model = RandomForestClassifier(n_estimators=100, random_state=42)
        model.fit(X_train, y_train)
        y_pred = model.predict(X_test)
        accuracy = accuracy_score(y_test, y_pred)
        self.logger.info("Model training complete. Accuracy: %.2f%%", accuracy * 100)
        
        # Save the trained model for future use
        joblib.dump(model, 'traffic_classifier_model.pkl')
        return model

    @set_ev_cls(ofp_event.EventOFPSwitchFeatures, MAIN_DISPATCHER)
    def switch_features_handler(self, ev):
        datapath = ev.msg.datapath
        ofproto = datapath.ofproto
        parser = datapath.ofproto_parser

        # Install the default flow to handle unmatched packets
        match = parser.OFPMatch()
        actions = [parser.OFPActionOutput(ofproto.OFPP_CONTROLLER, ofproto.OFPCML_NO_BUFFER)]
        self.add_flow(datapath, 0, match, actions)
        self.datapaths[datapath.id] = datapath

    @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER)
    def packet_in_handler(self, ev):
        msg = ev.msg
        datapath = msg.datapath
        ofproto = datapath.ofproto
        parser = datapath.ofproto_parser
        in_port = msg.match['in_port']

        pkt = packet.Packet(msg.data)
        eth = pkt.get_protocol(ethernet.ethernet)
        ip_pkt_v4 = pkt.get_protocol(ipv4.ipv4)
        ip_pkt_v6 = pkt.get_protocol(ipv6.ipv6)
        tcp_pkt = pkt.get_protocol(tcp.tcp)
        udp_pkt = pkt.get_protocol(udp.udp)

        # Ignore LLDP packets
        if eth.ethertype == 0x88cc:
            return

        if ip_pkt_v4:
            src_ip = ip_pkt_v4.src
            dst_ip = ip_pkt_v4.dst
            protocol = ip_pkt_v4.proto
            eth_type = eth.ethertype
        elif ip_pkt_v6:
            src_ip = ip_pkt_v6.src
            dst_ip = ip_pkt_v6.dst
            protocol = ip_pkt_v6.nxt
            eth_type = eth.ethertype
        else:
            return

        packet_count = len(pkt.protocols)
        byte_count = msg.total_len

        # Prepare data for prediction
        feature_data = pd.DataFrame([[src_ip, dst_ip, packet_count, byte_count, protocol]],
                                    columns=['src_ip', 'dst_ip', 'packet_count', 'byte_count', 'protocol'])
        try:
            predicted_class = self.model.predict(feature_data)[0]
        except ValueError as e:
            self.logger.error("Prediction error: %s", str(e))
            return

        # Install flow rule based on predicted class
        if predicted_class == 1:  # Example: if traffic class indicates high priority
            actions = [parser.OFPActionOutput(ofproto.OFPP_TABLE)]
            priority = 10
        elif predicted_class == 2:  # Example: medium priority
            actions = [parser.OFPActionOutput(ofproto.OFPP_NORMAL)]
            priority = 5
        else:  # Low priority
            actions = [parser.OFPActionOutput(ofproto.OFPP_LOW_PRIORITY)]
            priority = 1

        match = parser.OFPMatch(in_port=in_port, eth_type=eth_type, ipv4_src=src_ip if ip_pkt_v4 else None, ipv4_dst=dst_ip if ip_pkt_v4 else None,
                                ipv6_src=src_ip if ip_pkt_v6 else None, ipv6_dst=dst_ip if ip_pkt_v6 else None)
        self.add_flow(datapath, priority, match, actions)

        # Forward packet to the appropriate port
        out = parser.OFPPacketOut(datapath=datapath, buffer_id=msg.buffer_id, in_port=in_port,
                                  actions=actions, data=msg.data)
        datapath.send_msg(out)

    def add_flow(self, datapath, priority, match, actions, idle_timeout=0, hard_timeout=0):
        ofproto = datapath.ofproto
        parser = datapath.ofproto_parser
        
        # Add a flow entry with specific match and actions
        inst = [parser.OFPInstructionActions(ofproto.OFPIT_APPLY_ACTIONS, actions)]
        mod = parser.OFPFlowMod(datapath=datapath, priority=priority, match=match,
                                instructions=inst, idle_timeout=idle_timeout, hard_timeout=hard_timeout)
        datapath.send_msg(mod)

    def extract_ip(self, packet):
        # Extract source and destination IP from packet
        ip_pkt_v4 = packet.get_protocol(ipv4.ipv4)
        ip_pkt_v6 = packet.get_protocol(ipv6.ipv6)
        if ip_pkt_v4:
            return ip_pkt_v4.src, ip_pkt_v4.dst
        elif ip_pkt_v6:
            return ip_pkt_v6.src, ip_pkt_v6.dst
        return None, None

if __name__ == "__main__":
    # This script is meant to be run as part of a Ryu controller instance
    # Use Ryu's `ryu-manager` to run this file
    print("Starting SDN Machine Learning Controller")

引用

cite

[1]维基百科-边缘计算
[2]一文看懂什么是边缘计算
[3]边缘计算入门指南
[4]边缘安全白皮书

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

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

相关文章

Spring Boot实现文件上传与OSS集成:从基础到应用

目录 前言1. 文件上传的基础实现1.1 前端文件上传请求1.2 后端文件接收与保存 2. 集成第三方OSS服务2.1 准备工作2.2 编写OSS集成代码2.3 修改Controller实现文件上传至OSS 3. 文件上传的扩展:多文件上传与权限控制结语 前言 随着互联网应用的快速发展,…

万字长文解读深度学习——卷积神经网络CNN

推荐阅读: 卷积神经网络(CNN)详细介绍及其原理详解 CNN笔记:通俗理解卷积神经网络 文章目录 🌺深度学习面试八股汇总🌺主要组件输入层卷积层 (Convolutional Layer)批归一化层(Batch Normalizat…

07 Oracle数据库恢复基础解析:从检查点到归档,一步步构建数据安全防线

文章目录 Oracle数据库恢复基础解析:从检查点到归档,一步步构建数据安全防线一、检查点(Checkpoint)1.1 检查点定义1.2 检查点重要性1.3 检查点工作原理1.4 手动触发检查点 二、日志(Redo Log)2.1 日志定义…

css | padding vs margin

前置知识 height是作用域内容(content)区域的 padding和margin用百分比的时候是怎么算的?父元素的宽度。注意,不是根据父元素相应的属性,就是父亲的width 自身的height是0 以下代码,外面盒子是100x10的,里面的widt…

Linux平台C99与C++11获取系统时间

源码: #include <iostream> #include <chrono> #include <ctime> #include <thread>using namespace std; int main() {cout << "===使用C99方式获取系统时间===" << endl;time_t now = time(nullptr);struct tm *tm_c99 = lo…

pwn学习笔记(11)--off_by_one

pwn学习笔记&#xff08;11&#xff09;–off_by_one ​ 在处理for循环或者while循环的时候&#xff0c;有的可能会遇到如下情况&#xff1a; #include<stdio.h>int main(){char buf[0x10];for (int i 0 ; i < 0x10 ; i ){buf[i] getchar();}puts(buf);}​ 多次输…

基于Java Web的传智播客crm企业管理系统的设计与实现

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【Vue】Vue3.0(十七)Vue 3.0中Pinia的深度使用指南(基于setup语法糖)

上篇文章&#xff1a; 【Vue】Vue3.0&#xff08;十一&#xff09;Vue 3.0 中 computed 计算属性概念、使用及示例 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Vue专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月10日15点23分 文章…

常用的c++新特性-->day03

断言和异常 断言断言的基本使用 静态断言静态断言的基本使用 异常异常基本使用c98异常案例 noexceptnoexcept简单案例 断言 断言的基本使用 #include <iostream> #include <cassert>// >>>>>>>>>>>>>>>> 断言的…

11月7日星期四今日早报简报微语报早读

11月7日星期四&#xff0c;农历十月初七&#xff0c;早报#微语早读。 1、河南&#xff1a;旅行社组织1000人次境外游客在豫住宿2夜以上&#xff0c;可申请激励奖补&#xff1b; 2、主播宣称下播后商品恢复原价构成欺诈&#xff0c;广州市监&#xff1a;罚款5万元&#xff1b;…

数据结构-并查集专题(1)

一、前言 因为要开始准备年底的校赛和明年年初的ACM、蓝桥杯、天梯赛&#xff0c;于是开始按专题梳理一下对应的知识点&#xff0c;先从简单入门又值得记录的内容开始&#xff0c;并查集首当其冲。 二、我的模板 虽然说是借用了jiangly鸽鸽的板子&#xff0c;但是自己也小做…

【dvwa靶场:XSS系列】XSS (Stored)低-中-高级别,通关啦

更改name的文本数量限制大小&#xff0c; 其他我们只在name中进行操作 【除了低级可以在message中进行操作】 一、低级low <script>alert("假客套")</script> 二、中级middle 过滤了小写&#xff0c;咱们可以大写 <Script>alert("假客套…

【spark面试】spark的shuffle过程

概述 所有的shuffle的过程本质上就是一个task将内存中的数据写入磁盘&#xff0c;然后另一个task将磁盘中的数据读入内存的过程。 对于mapreduce来说&#xff0c;我们将内存中的数据写入磁盘成为maptask&#xff0c;将磁盘中的数据读入内存称为reducetask。 而对于spark来说&…

MySQL —— Innodb 索引数据结构

文章目录 不用平衡二叉树或红黑树作为索引B树适合作为索引比B树更适合作为索引的结构——B树总结 MySQL 使用 B树索引数据结构&#xff08;因为默认使用 innodb 存储引擎&#xff09; B树&#xff1a;有序数组 平衡多叉树&#xff1b;B树&#xff1a;有序数组链表 平衡多叉树…

shell中执行hive指令以及hive中执行shell和hdfs指令语法

0. 简介 主要介绍了三种环境命令执行语法&#xff1a; shell中执行hive指令hive中执行shell指令hive中执行hdfs指令 1. shell中执行hive指令 语法&#xff1a;hive [-hiveconf xy]* [<-i filename>]* [<-f filename> | <-e query-string>] [-S] 说明&…

MySQL系列之如何在Linux只安装客户端

导览 前言Q&#xff1a;如何安装一个Linux环境下的MySQL客户端一、准备文件1. 确认Server版本2. 选择Client安装文件 二、下载并安装1. 下载1.1 寻找文件1.2 文件说明 2. 安装2.1 上传至Linux服务器2.2 执行安装 三、连接验证1. 确认远程授权2. 建立远程连接 结语精彩回放 前言…

C++20 概念与约束(3)—— 约束的进阶用法

1、再谈约束主句与从句 上一篇文章中提到过约束可以无限嵌套。末尾也提到不考虑嵌套约束的情况下&#xff0c;模板因为 SFINAE 规则的存在&#xff0c;其中 requires 子句只要存在返回值&#xff0c;只有可能是 true 这一种结果。在非模板中&#xff0c;如果 requires 子句中的…

进程启动时,main 函数是如何被找到的?

Linux中一个进程是如何被启动起来的&#xff1f; 一、进程是怎么启动的&#xff1f;二、进程内存空间分段三、进程的入口函数四、总结 一、进程是怎么启动的&#xff1f; 当一个程序被执行时&#xff0c;怎么看出进程的运行呢&#xff1f;一个进程是怎么启动的&#xff1f;为什…

关于 el-table 的合计行问题

目录 一.自定义合计行 二.合计行不展示&#xff0c;只有缩放/变大窗口或者F12弹出后台时才展示 三.合计行出现了表格滚动条下方 四.合计行整体样式的修改 五.合计行单元格样式修改 1.css 2.jsx方式 六.合计行单元格合并 一.自定义合计行 通过 show-summary 属性开启合计…

十三:java web(5)-- Spring数据持久层

目录 Spring 数据持久层 1. Spring 与 JDBC 1.1 使用 Spring 管理数据库连接 1.1.2 Apache Commons DBCP 基于配置文件xml 使用 1.1.3 Apache Commons DBCP 基于配置类使用 1.1.4 HikariCP 基于配置文件xml 使用 推荐使用 Spring Boot 默认连接池 1.1.5 HikariCP 基于配置…