【5G 架构】边缘计算平台是如何与3GPP网络连接的?

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接

本人就职于国际知名终端厂商,负责modem芯片研发。

在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G技术研究。

博客内容主要围绕:

5G/6G协议讲解

高级C语言讲解

Rust语言讲解

文章目录

边缘计算平台是如何与3GPP网络连接的?

ETSI参考资料地址
https://www.etsi.org/deliver/etsi_gs/MEC/001_099/003/03.01.01_60/gs_MEC003v030101p.pdf

OAI-MEC项目地址
https://gitlab.eurecom.fr/oai/orchestration/blueprints

一、边缘计算架构详述

MEC(Multi-access Edge Computing)是由欧洲电信标准协会制定的标准( European Telecommunications Standards Institute,ETSI)将云计算能力扩展到蜂窝网络的边缘。MEC是一个将计算、存储和网络资源更接近用户和终端设备的系统,可以减少延迟,提高网络效率。

MEC是5G中边缘计算的关键技术,有望支持从物联网到AR、VR和自动驾驶汽车等新型应用。MEC与5G基础设施的结合可以使服务以更高的速度和可靠性交付,这是实时应用的关键概念。ETSI设计的标准架构如下图所示:

下面是一个更加通用的参考架构:

MEC是由在运营商网络或运营商子网络内运行MEC应用所需的MEC host和MEC management组成,其中:

  • MEC host: 是一个包含MEC platform和虚拟化基础设施的实体,为运行MEC应用程序提供计算、存储和网络资源。虚拟化基础设施包括一个数据平面,它执行MEC平台的流量规则,并在应用程序、服务、DNS服务器/代理、3GPP网络、其他接入网络、本地网络和外部网络之间流量路由;

  • MEC platform: 是在特定虚拟化基础设施上运行MEC应用程序所需的基本功能的集合,并使这些应用能够提供和消费MEC服务。MEC platform也可以提供服务,更详细的功能包括:

    • 提供一个环境,在这个环境下MEC应用程序可以发现、通知、消费和提供MEC服务。如果支持,还可以在同一或不同的MEC系统中发现MEC服务;
    • 接收来自MEC platform manager、应用程序或业务的流量规则,并根据上面的规则配置数据平面。在支持的情况下,还包括将业务规则中表示UE的标记转换为特定的IP地址;
    • 从MEC platform manager接收DNS记录,并相应配置DNS代理/服务器;
    • 托管MEC服务;
    • 提供对持久存储和时间信息的访问;
  • MEC applications:基于MEC management验证的配置或请求,在MEC host的虚拟化基础设施上实例化的应用程序。MEC应用程序作为虚拟应用程序(如虚拟机或容器化应用程序)运行在MEC主机提供的虚拟化基础设施之上,可以与MEC platform交互以消费和提供MEC服务。MEC应用程序可以有一定数量的相关规则和需求,例如所需的资源、最大延迟、所需或有用的服务等。这些要求由MEC system level management进行验证,如果缺失,可以分配给默认值;

  • MEC management:包括MEC system level management和 MEC host level management:

    • MEC system level management:包括核心组件MEC orchestrator,实现对整个MEC系统的编排,Operations Support System和User application lifecycle management proxy;
      • MEC orchestrator作为核心组件,主要负责下面的功能:
        • 根据部署的MEC主机、可用的资源、可用的MEC服务和拓扑结构,维护MEC系统的整体视图;
        • 安装应用程序包,包括检查应用程序包的完整性和真实性,验证应用程序规则和要求,并在必要时调整它们以符合运营商的政策,保存安装程序包的记录,以及准备虚拟化基础设施管理人员处理应用程序;
        • 根据延迟、可用资源、可用服务等约束条件,为应用实例化选择合适的MEC主机;
        • 触发应用程序实例化和终止流程;
        • 如果支持,必要时触发应用的迁移流程;
      • Operations Support System (OSS):通过CFS门户和设备应用程序接收用于实例化或终止应用程序的请求,并决定是否授予这些请求。获得批准的请求会转交给MEO作进一步处理。在支持的情况下,OSS还可以接收设备应用程序在外部云和MEC系统之间迁移应用程序的请求;
      • User application lifecycle management proxy:用户应用生命周期管理代理允许设备应用请求加载、实例化、终止用户应用,以及在支持的情况下,将用户应用重新部署到MEC系统内外。它还允许将用户应用程序的状态通知设备应用程序;
    • MEC host level management:包括MEC platform manager和Virtualisation infrastructure
      manager,负责管理各个MEC host的MEC特定功能和运行在上面的MEC应用程序;
      • MEC platform manager主要负责下面的功能:
        • 管理应用程序的生命周期,包括通知MEO相关的应用程序相关事件;
        • 为MEC平台提供基础管理功能;
        • 管理应用规则和需求,包括服务授权、流量规则、DNS配置和冲突解决;
        • MEC平台管理器还从虚拟化基础设施管理器接收虚拟化资源故障报告和性能测量,以便进一步处理;
      • Virtualisation infrastructure manager主要负责下面的功能:
        • 分配、管理和释放虚拟化基础设施的虚拟化(计算、存储和网络)资源;
        • 准备虚拟化基础设施以运行软件映像。准备工作包括配置基础设施,还可以包括接收和存储软件镜像;
        • 收集和上报虚拟化资源的性能和故障信息;
        • 支持时,执行应用程序重定位。对于从/到外部云环境的应用程序迁移,虚拟化基础设施管理器与外部云管理器交互以执行应用程序迁移;
  • Device application:是指设备中的应用程序(例如UE、具有互联网连接的笔记本电脑),这些应用程序能够通过用户应用程序生命周期管理代理与MEC系统交互;

  • Customer facing service portal(CFS):面向客户的服务门户允许运营商的第三方客户(如商业企业)选择并订购一组满足其特定需求的MEC应用程序,并从提供的应用程序中获取服务信息;

二、MEC与3GPP的连接

下面是OAI-MEC项目的架构图,其展示了MEC与5GC的连接方式:

上面的架构中主要涉及两个参考点Mp2Mp1,大致清楚的是Mp2用于3GPP通信,Mp1连接MEC APP。我们先来看下ETSI对这两个参考点的定义(更多的参考点信息可以参阅ETSI协议gs_MEC003):

  • Mp2:MEC platform和虚拟化基础设施中数据平面之间的Mp2参考点用于指导数据平面如何在应用程序、网络、服务等之间路由流量;
  • Mp1:提供服务注册、服务发现和服务通信支持。它还提供了其他功能,如应用程序可用性、会话状态重定位支持流程、流量规则和DNS规则激活、访问持久存储和一天中的时间信息等。此参考点可用于消费服务并提供特定于服务的功能;

ETSI对Mp1的解释还是比较清楚的,但是我们还是不清楚Mp2是如何连接3GPP的,在我们继续理解Mp2时需要先了解MEC service。

三、MEC service

MEC service是由MEC platform或MEC APP提供和使用的服务。当由应用程序提供时,可以通过Mp1参考点将其注册到MEC platform的服务列表中。MEC应用程序可以订阅服务,并通过Mp1参考点对其进行授权。

3.1 Radio Network Information service(RNSI)

无线网络信息服务,会为授权的应用程序提供无线网络相关信息,包括:

  • 最新的无线网络状态信息;
  • 用户平面相关的测量和统计信息;
  • MEC host所关联基站下的终端信息(例如,终端上下文和无线接入承载);
  • MEC host所关联基站下的终端信息改变通知;

3.2 Location

位置服务在可用时为经过授权的应用程序提供位置相关的信息。这些信息可以是:

  • MEC host所关联基站下的特定终端的位置;
  • MEC host所关联基站下的所有终端的位置信息;
  • MEC host所关联基站下的特定category终端的位置;
  • 特定位置下的终端信息列表;
  • MEC host所关联的所有基站的位置信息;

四、Mp2是如何与3GPP通信的?

首先我们来看一下OAI-RNIS项目里面的介绍,下面是OAI-RNIS的架构图:

我们来看下OAI项目的解释:RNIS的主要任务是通过Mp2从3GPP网络检索信息,并通过Mp1将其暴露给第三方边缘应用程序或其他边缘服务。与3GPP网络的通信是通过两个不同的 rnisApps 进行的:

  • Core Network Wrapper Service:消费OAI-CM暴露的所有5G核心网相关事件;
  • KPIs-xApp Service:消费 xApp 从无线网络暴露的所有无线网络相关测量信息;

RNIS可以根据需要通信的节点数量来动态扩展和实例化这两个服务。

这些模块检索和处理的数据被发送到数据汇聚服务(Data Convergence Service),该服务负责合并所有信息并触发特定事件。经过处理后,这些信息对北向API和通知服务rnisApp都可用。虽然北向api通过RESTful接口公开信息,但通知服务负责通过基于http的通知服务将新事件通信给所有感兴趣的订阅者。

也就是说Mp2这个参考点,既可以与RAN连接,也可以与5GC连接。

4.1 Mp2与5GC连接

从下面的代码我们可以推断出,Mp2与5GC之间是通过类似 OpenAPI 的消息机制进行通信的。

python 复制代码
for node in configuration["coreNetwork"]["nodes"]:
       cn = CN(cn_ip=node["cnIp"],
               cn_port=int(node["cnPort"]),
               stats_endpoint=node["statsEndpoint"],
               amf_subscription_endpoint=node["amfSubscriptionEndpoint"],
               smf_subscription_endpoint=node["smfSubscriptionEndpoint"],
               storage=data_repository)
       try:
           cn.healthcheck()
           cn.subscribe_to_amf_events(['REGISTRATION_STATE_REPORT'])
           cn.subscribe_to_smf_events(['PDU_SES_EST'])
           cn_list.append(cn)
           if "pollingTimer" in node:
               cn.run(int(node["pollingTimer"]))
           else:
               cn.start_polling(int(configuration["coreNetwork"]["pollingTimer"]))
           log.info(f"[Main] A new rnis app has been registered!\n{cn.infodump()}")
       except Exception as e:
           log.error(e)

而且理论上可以与任意想采集信息的NF建立类似的事件订阅机制,当然除了需要3GPP标准定义外,还需要运营商开放订阅接口。下面是3GPP对AMF和SMF信息暴露接口的定义:

  • Namf_EventExposure service(TS 23.502-5.2.2.3);
  • Nsmf_EventExposure Service(TS 23.502-5.2.8.3);

从上面的代码可以看出,OAI-CM(Configuration Manager)与AMF和SMF建立了连接,完成事件订阅和接收事件通知功能。

4.2 Mp2与基站的连接

从上面的架构可以看出来,基站侧是需要一个xApp的程序来采集基站侧的网络信息。下面是OAI-RNIS项目里RAN侧docker compose文件(docker-compose-ran.yaml):

yaml 复制代码
version: '3.8'
services:
    oai-gnb:
        image: oaisoftwarealliance/oai-gnb:mep-compatible
        privileged: true
        container_name: rfsim5g-oai-gnb
        environment: 
            RFSIMULATOR: server
            USE_SA_TDD_MONO: 'yes'
            GNB_NAME: gnb-rfsim
            #USE_B2XX: 'yes'  #only needed when using B210
            #USE_VOLUMED_CONF: 'yes' #only needed when mounting the configuration file
            TAC: 1
            MCC: '208'
            MNC: '99'
            MNC_LENGTH: 2
            NSSAI_SST: 1
            AMF_IP_ADDRESS: 192.168.70.132
            GNB_NGA_IF_NAME: demo-oai
            GNB_NGA_IP_ADDRESS: 192.168.70.160
            GNB_NGU_IF_NAME: cn5g-access
            GNB_NGU_IP_ADDRESS: 192.168.72.160
            SDR_ADDRS: serial=XXXXXXX
            USE_ADDITIONAL_OPTIONS: --sa -E --rfsim --log_config.global_log_options level,nocolor,time   #rfsim
            #USE_ADDITIONAL_OPTIONS: --sa --continuous-tx --log_config.global_log_options level,nocolor,time,line_num,function #(B210)
        volumes:
            - shared_lib:/usr/local/lib/flexric/
            - ./conf/flexric.conf:/usr/local/etc/flexric/flexric.conf
          #  -  /dev/bus/usb/:/dev/bus/usb/ (B210)
          #  - ./gnb-n77.conf:/opt/oai-gnb/etc/mounted.conf (B210) config file should be present 
        networks:
            public_net:
                ipv4_address: 192.168.70.160
            public_net_access:
                ipv4_address: 192.168.72.160
        healthcheck:
            test: /bin/bash -c "pgrep nr-softmodem"
            interval: 10s
            timeout: 5s
            retries: 5
    oai-nr-ue:
        image: oaisoftwarealliance/oai-nr-ue:2023.w06
        privileged: true
        container_name: rfsim5g-oai-nr-ue
        environment: 
            RFSIMULATOR: 192.168.70.160
            FULL_IMSI: '208990100001120'
            FULL_KEY: 'fec86ba6eb707ed08905757b1bb44b8f'
            OPC: 'C42449363BBAD02B66D16BC975D77CC1'
            DNN: oai
            NSSAI_SST: 1
            USE_ADDITIONAL_OPTIONS: -E --sa --rfsim -r 106 --numerology 1 -C 3619200000 --nokrnmod --log_config.global_log_options level,nocolor,time
        networks:
            public_net:
                ipv4_address: 192.168.70.161
        healthcheck:
            test: /bin/bash -c "pgrep nr-uesoftmodem"
            interval: 10s
            timeout: 5s
            retries: 5
oai-flexric:
        image: oaisoftwarealliance/oai-flexric:1.0
        container_name: oai-flexric
        privileged: true
        restart: always
        command: ["/usr/local/bin/nearRT-RIC"]
        networks:
            public_net:
                ipv4_address: 192.168.70.164
        depends_on:
            - oai-gnb
        volumes:
            - shared_lib:/usr/local/lib/flexric/
            - ./conf/flexric.conf:/usr/local/etc/flexric/flexric.conf
        healthcheck:
            test: /bin/bash -c "pgrep nearRT-RIC"
            interval: 10s
            timeout: 5s
            retries: 5
    oai-rnis-xapp:
        image: oaisoftwarealliance/oai-flexric:1.0
        container_name: oai-rnis-xapp
        command: [ "python3","-u","rnisxapp.py" ] 
        privileged: true
        restart: always
        volumes:
            - shared_lib:/usr/local/lib/flexric/
            - ./conf/flexric.conf:/usr/local/etc/flexric/flexric.conf
            - ../xapps/config.ini:/flexric/build/examples/xApp/python3/config.ini
            # - ../xapps/rnisxapp.py:/flexric/build/examples/xApp/python3/rnisxapp.py #(good for debugging)
        healthcheck:
            test: /bin/bash -c "pgrep python3"
            interval: 10s
            timeout: 5s
            retries: 5
        networks:
            public_net:
                ipv4_address: 192.168.70.165
    rabbitmq:
        image: rabbitmq:3-management-alpine
        container_name: 'rabbitmq-broker'
        environment:
          RABBITMQ_DEFAULT_USER: user
          RABBITMQ_DEFAULT_PASS: password
        healthcheck:
          test: netstat -anpe | grep '5672' | grep 'LISTEN'
          interval: 5s
          timeout: 2s
          retries: 15
        ports:
          - 5672
          - 15672
        networks:
           public_net:
              ipv4_address: 192.168.70.166
volumes:
    shared_lib:
networks:
    public_net:
        driver: bridge
        name: demo-oai-public-net
        ipam:
            config:
                - subnet: 192.168.70.0/24
        driver_opts:
            com.docker.network.bridge.name: "demo-oai"
    public_net_access:
        name: oai-public-access
        ipam:
            config:
                - subnet: 192.168.72.0/24
        driver_opts:
            com.docker.network.bridge.name: "cn5g-access"

可以看到与基站同时启动的还有oai-flexricoai-rnis-xapprabbitmq,其中:

  • oai-flexric:提供实时的基站数据采集和分析工具;
  • oai-rnis-xapp:用于将 oai-flexric 获取的数据格式化成队列消息,push到队列中;
  • rabbitmq:是一个消息队列,可以实现消息的订阅功能,用于实现MEC platform上的 RNIS 程序对无线网络事件的订阅,以及接收无线网络事件通知功能;

总结

MEC通过Mp1和Mp2将边缘应用与3GPP网络(包括其他网络)连接起来。通过RNIS将网络信息同步给MEC,MEC基于网络信息确定将应用程序部署在边缘侧还是网络侧,并可以依据网络信息决定是否将应用程序迁移到边缘或者网络侧。


相关推荐
TimeFine2 小时前
Android AI解放生产力(六)实战:解放页面开发前的繁琐工作
android·架构
语落心生3 小时前
边缘AI推理计算 - StarryOS RK3588 边缘AI系统架构深度解析(二):AArch64裸机启动与内存管理
架构
元气满满-樱3 小时前
LNMP架构实验部署
架构
BuffaloBit3 小时前
5G 核心网架构入门
网络协议·5g·架构
pengkai火火火4 小时前
基于springmvc拓展机制的高性能日志审计框架的设计与实现
spring boot·安全·微服务·架构
想用offer打牌5 小时前
数据库大事务有什么危害(面试版)
数据库·后端·架构
踏浪无痕5 小时前
别再只会用 Feign!手写一个 Mini RPC 框架搞懂 Spring Cloud 底层原理
后端·面试·架构
珠海西格电力5 小时前
零碳园区边缘计算节点规划:数字底座的硬件部署与能耗控制方案
运维·人工智能·物联网·能源·边缘计算
guslegend6 小时前
第2节:项目性能优化(中)
架构