0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于能力的完整 COA 系统架构解析

454398 来源:博客园 作者:阿里巴巴云原生 2020-09-18 14:50 次阅读

前言

很高兴有这个机会和大家分享我们总结的关于边缘计算的架构模式,也就是我们所说的基于能力的系统架构 —— COA。

什么是 COA 呢?我想通过一个很普遍的问题——电源问题来解释。电源问题一直是移动电脑,特别是手机用户体验的一个关键问题。我想每个人都有过因为手机电量低而带来不便的经历,有的人甚至告诉我,光看到这张图片,就会引起某种不适。

那么我们是怎么解决这个问题的呢?获得持续的电力供应,是手机运转的一个基本要求。

我想每个人对上面这些图片都不会陌生,机场的充电站、五花八门的充电宝以及各种各样的共享电源。解决手机的供电是一个问题,那为什么我们有这么多不同的方案呢?这是因为手机获得持续电源供应的能力,是一个关键能力,我们必须用各种手段来保证,在各种场景下对手机的持续供电。

手机需要持续的电力供应

如果把这个问题抽象来看,我们可以看到手机获得持续电力供应的能力,是有很多不同的方案来支持的。

比如手机集成的电池,这是基本方案,如果没有,手机也就不是手机了,就变成座机了;充电宝是一个本地方案,因为你手机需要连接在本地的充电宝实例上;而电源插座是基于服务架构的解决方案,你把手机插在插座上,这个插座就是你访问电力公司电力供应服务的接口;而在更极端的情况下,你可能还会用其他的替代电源,比如太阳能板,甚至手摇发电机。

这个例子说明什么呢?它说明对于系统所需的关键能力,比如获得持续电力的能力,我们经常需要多个替代方案来确保能力的存在。比如您的手机没电了,你会在乎你的电源插头插在哪里吗?你会在乎充电宝的形状和颜色吗?这些都不是关键。你需要的就是供电的能力,至于这个能力是不是基于服务的架构,以及这个能力是如何提供的,这都不那么关键。

这个例子让我们思考,在设计程序的时候,能不能提供一种设计语言,让开发者表述系统所需的能力,比如供电,而不是考虑系统能力的交付方式。无论这个能力是通过远程的服务调用本地的容器,或者是局域网的服务代理实现的功能,这些都不重要,这些都是运维的问题,而不是系统设计和开发的问题。我们希望可以总结出一套设计模式,并在此基础上建立一个工具和服务的生态系统,这就是我们提出 COA 这个概念的初衷。需要说明一下,COA 这个概念虽然是我们提出的,但是这种架构并不是我们发明的,COA 是我们基于对现有系统的观察总结,在此基础上,我们定义了 COA 的一些基本部件,以及这些部件可能实施的方式。

智能应用需要持续的人工智能能力

我们再用另外一个例子对 COA 的意义进行说明,这次我们考虑一个需要人工智能支持的程序。人工智能比如脸部识别,交互的方法也很多,您可以用固化或者半固化的硬件,比如 ASIC 或者 FPGA;您也可以通过调用已有程序库或 SDK,比如在进程中调用 url 来进行物品识别;当然您还可以用进程外的方式,比如调用一个本地的 Docker 容器;最后您也可以调用云平台上的服务,比如微软的机器视觉服务等等。

在这个场景中,获得 AI 的能力,比如脸部识别的能力是你所关心的,而这个能力是怎么交付给你的?这也应该是运维的问题。而且 AI 的模型层出不穷,对系统的需求也不一样,把能力交付转化成运维问题,允许您的程序可以被动地甚至主动地调解本身的行为,来适应不同的部署场景。比如我们曾经有一个智能交通灯的系统,在缺省情况下,它把高清晰的视频传到云上进行识别,当发现人行道上有轮椅,它就会延长绿灯的时间,以保证残障人士有充足的时间过马路。但是如果网络带宽不允许,它就会转换成低分辨率的图像,而且如果网络断开了,它就会转到一个本地的模型,本地模型精度差一些,但是还是可以提供持续识别功能的。那么对于这个系统来讲,轮椅的识别是一个必要的能力,这个能力具体是怎么交付的,甚至在运行的过程中是怎么选择的,这个就应该是一个运维问题。

基于能力的系统架构

COA 的理念,就是把运维问题从开发者角度分离,所以 COA 的核心,就是让开发者专注于能力,而不是能力的交付。如果我们有一个对能力的通用的描述、发现和使用的系统,那么我们很多的系统就可以做到平台无关、位置无关、甚至技术无关。以手机充电问题为例:

平台无关:你连到国内的插座和国外的插座这是无关的,至于对不同国家插座的电源、电压以及插座样式的适配,这是运维问题;

位置无关:你用哪个插座哪个充电宝,你的手机在哪,与你程序的设计及开发也是无关的;

技术无关:你的电源是电池,还是火电、水电、核电、太阳能……,这些都无关。

COA 就是把这些能力的实施和交互的方式,彻底地从开发者这里分离出来。

我们从另外一个角度看——运营方面,运营也会有更灵活和更精确的控制。比如你随便选择了一家数据库公司,然后用这个公司的 SDK 来进行开发,结果公司倒闭了,这就是个问题。而 COA 允许你在选择能力供应商时,同时考虑功能性和非功能性的需求。而作为运维,您可以独立评估选择供应商,然后根据不同的部署场景,选择不同的能力供应商。它可能是本地的,也可能是远程的,甚至是人工的,这都不影响程序的架构和代码,同时您也可以灵活选择部署方案。另外您可以用创新性的替代方案来取代原来的方案,回到人工智能问题,大概在一年前,谷歌的 BERT 还很厉害,但现在微软的 GPT-3展现出了无与伦比的能力,有了 COA 您就可以在运营过程中对这个模型进行选择,甚至综合多方的结果提供一个更佳的方案,这些都是一个运维的问题,而不是开发的问题。

能力代理

实现基于能力的系统架构,需要几个重要的系统部件,第一个就是能力代理。能力代理是指通过代理的方式,把能力供应者的细节封装起来。能力代理具有如下功能:

第一,根据环境的变化选取能力的提供者。比如上文提到的轮椅检测方案,根据网络带宽的情况和网络连接的情况,能力代理可以动态地选择不同的能力提供者,然后能力提供者在此基础上可以提供更多的优化功能。

第二,提供本地缓存,不需要所有的服务都是远程调用;它可以批处理,把分散的处理做成小的批次,然后统一提交给服务器;甚至它还可以做一些其他的,例如压缩、加密等中间件的功能。

第三,在本地环境里,比如在一个局域网内,如果能力代理之间可以相互发现,我们就可以实现更高级的功能——伙伴间的动态调用。例如,在智能家居环境中,用普通的手机进行比较复杂的图形计算时,我可以把这个能力临时代理给我的游戏机,通过游戏机的 GPU 功能来进行图像处理,就可以实现伙伴间的动态调用过程。

第四,基于功能性和非功能性需求动态发现提供者。能力代理的发现功能和我们普通所说的服务发现的过程不太一样。因为在发现能力的过程中,我们可以同时考虑功能性和非功能性的需求。比如在发现一个能力供应商的时候,我们不但要考虑系统的性能、表现,甚至供应商本身的资质也是我们考虑的要素。

能力发现

说到能力发现,还要解释它和服务发现有什么不同。传统范畴的服务发现,是基于语法的发现,比如说我要做一个相加的服务,我可能通过服务发现的模式,找到一个相加的服务,它有相加的名字,但是我无法知道相加服务是不是真的在进行加法的计算。

而能力发现模式是由用户来提交他所要实现能力的意图,然后系统根据意图进行语义上的发现,通过发现的过程可以真正发现一个可以进行相加计算的服务。然后我们可以把非功能性的因素也考虑进来,比如它的 SLA、安全性、供应商资质等,所以能力发现实际上是一个比较复杂的系统。

我认为,能力发现应该是一个基于多向量(包括功能性和非功能性向量)的几率发现系统。但是在生产部署环境中,基于几率的发现系统,很可能是不能满足需要的。因此,我们就设计了,在发现之后可以通过一个固化过程,把所发现的供应商,提供成一个特定的能力组合,在能力组合的基础上,您可以提供比较明确的版本的控制和供应商的控制。能力发现也需要我们提供表达用户意图的方式,通过一个通用的词库,基于自然语言的方式来实现对于用户意图的解析。

示例:lets 系统

在 COA 的基础上,我们设想了一个系统——lets,上图展示了用 lets 进行编程的一些示例。

脸部识别:我们可以通过 lets 命令行:lets detect face→输入图片→输出图片,系统就可以对输入图片进行脸部识别,然后再输出图片上叠加脸部的方框;

物品追踪:在 python 里进行物品追踪,需要导入 lets 程序包,然后 lets track orange,在 cameraStream1 的视频流上进行橙子的追踪;

文字总结:比如用 C# 编程的时候,用 lets class 来调用 summarize(方法:lets summarize 输入文本→产生输出文本),对一段文字进行总结。

这就是我们设想的 lets 系统在使用时在开发者上的体验。大家可以看到,我们把 AI 的能力完全封装在 proxy 的后面,对于开发者来说, AI 的能力到底是远程的服务,还是本地的容器,还是本地的 SDK,这些都不重要。你所需要的就是描述你程序所要实现的功能,然后通过 COA 的 proxy 把这些功能呈现给你的程序。作为运维来说,它可以根据具体的部署场景来选择功能具体的交付方式。

完整 COA 系统架构

完整的 COA 系统,可能还需要很多其他组件,由于篇幅原因,本文只提到了 COA 系统架构的部分组件。COA 并不是我们的发明,而是我们对一些现有程序,特别是一些基于边缘计算的系统模式的总结,我们希望可以和大家一起创建一个比较通用的 COA 架构系统,来实现我们所设想的通用模块,可以使 COA 的应用程序更容易地开发和使用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1625

    文章

    21638

    浏览量

    601349
  • asic
    +关注

    关注

    34

    文章

    1183

    浏览量

    120251
  • 人工智能
    +关注

    关注

    1791

    文章

    46700

    浏览量

    237215
收藏 人收藏

    评论

    相关推荐

    鸿蒙跨端实践-JS虚拟机架构实现

    类似的框架,我们需要自行实现以确保核心基础能力完整。 鸿蒙虚拟机的开发经历了从最初 ArkTs2V8 到 JSVM + Roma新架构方案 。在此过程中,我们实现了完整的鸿蒙版的“J
    的头像 发表于 09-30 14:42 2309次阅读
    鸿蒙跨端实践-JS虚拟机<b class='flag-5'>架构</b>实现

    把信号完整性设计落到实处

    的方法和操作步骤,帮助工程师有效实施设计,避免失败。课程要点解析1信号完整性概述:信号完整性涉及信号在传输过程中保持其质量的能力。影响信号质量的因素包括传输线特性、信
    的头像 发表于 08-30 12:29 270次阅读
    把信号<b class='flag-5'>完整</b>性设计落到实处

    水雨情自动化测报系统完整解决方案

    详细阐述水雨情自动化测报系统完整解决方案,包括系统架构、功能特点、应用场景以及实施效果等方面。二、系统介绍水雨情自动化测报
    的头像 发表于 08-19 15:11 831次阅读
    水雨情自动化测报<b class='flag-5'>系统</b><b class='flag-5'>完整</b>解决方案

    GPU云服务器架构解析及应用优势

    GPU云服务器作为一种高性能计算资源,近年来在人工智能、大数据分析、图形渲染等领域得到了广泛应用。它结合了云计算的灵活性与GPU的强大计算能力,为企业和个人用户提供了一种高效、便捷的计算解决方案。下面我们将从架构解析和技术优势两
    的头像 发表于 08-14 09:43 305次阅读

    深度神经网络(DNN)架构解析与优化策略

    堆叠多个隐藏层,逐步提取和转化输入数据的特征,最终实现复杂的预测和分类任务。本文将对DNN的架构进行详细解析,并探讨其优化策略,以期为相关研究和应用提供参考。
    的头像 发表于 07-09 11:00 1389次阅读

    龙芯CPU统一系统架构规范及参考设计下载

    *附件:LoongArch 系统调用(syscall)ABI.pdf *附件:龙芯 CPU 统一系统架构规范(适用于 LA 架构通用 PC、服务器系列)-v4.1.0.pdf *附件:
    发表于 06-20 14:42

    水库大坝安全监测系统完整解决方案

    介绍水库大坝安全监测系统完整解决方案,包括系统架构、监测内容、主要产品以及应用案例等方面。二、系统架构
    的头像 发表于 06-14 14:13 481次阅读
    水库大坝安全监测<b class='flag-5'>系统</b><b class='flag-5'>完整</b>解决方案

    RISC-­V架构的特点

    。RISC-V 指令集完全开源,设计简单,易于移植Unix系统,模块化设计,完整工具链,同时有大量的开源实现和流片案例,得到很多芯片公司的认可。RISC-V 架构的起步相对较晚,但发展很快。它可以根据具体场景
    发表于 05-24 08:01

    鸿蒙OpenHarmony开发板解析:【系统能力配置规则】

    SysCap(SystemCapability,系统能力)是部件向开发者提供的接口的集合。
    的头像 发表于 05-11 10:10 442次阅读
    鸿蒙OpenHarmony开发板<b class='flag-5'>解析</b>:【<b class='flag-5'>系统</b><b class='flag-5'>能力</b>配置规则】

    构建系统思维:信号完整性,看这一篇就够了!

    信号完整性(Signal Integrity,SI)在电子工程领域中具有极其重要的意义,也是现代电子设计的核心考量因素之一,尤其在高速PCB设计、集成电路设计、通信系统设计等领域,对保证系统
    发表于 03-05 17:16

    一文解析电源完整性和电力电子

    我们都知道,完整的电源系统包括了VRM、PCB、去耦电容器件、封装寄生参数和Sink的寄生参数。
    发表于 02-23 10:04 510次阅读
    一文<b class='flag-5'>解析</b>电源<b class='flag-5'>完整</b>性和电力电子

    ArkTS语言基础类库-解析

    ArkTS语言基础类库是HarmonyOS系统上为应用开发者提供的常用基础能力,主要包含能力如下图所示。 图1 ArkTS语言基础类库能力示意图 提供[异步并发和多线程并发]的
    发表于 02-20 16:44

    Linux内核内存管理架构解析

    内存管理子系统可能是linux内核中最为复杂的一个子系统,其支持的功能需求众多,如页面映射、页面分配、页面回收、页面交换、冷热页面、紧急页面、页面碎片管理、页面缓存、页面统计等,而且对性能也有很高
    的头像 发表于 01-04 09:24 621次阅读
    Linux内核内存管理<b class='flag-5'>架构</b><b class='flag-5'>解析</b>

    基于NFC的电池管理系统(BMS)架构解析

    ,并提供统一的架构。通过NFC技术,系统能够将电池组的日耗电量从毫瓦降低到微瓦,有效提高了电池组的使用效率。电池寿命管理变得越来越重要,即使电池不再满足车辆需求,仍可用于其他用途。电池的健康状态(SoH
    的头像 发表于 12-04 12:30 1136次阅读
    基于NFC的电池管理<b class='flag-5'>系统</b>(BMS)<b class='flag-5'>架构</b><b class='flag-5'>解析</b>

    什么是走线的拓扑架构?怎样调整走线的拓扑架构来提高信号的完整性?

    什么是走线的拓扑架构?怎样调整走线的拓扑架构来提高信号的完整性? 走线的拓扑架构是指电子设备内部的信号线路布局方式。它对信号传输的完整性和稳
    的头像 发表于 11-24 14:44 639次阅读