news 2026/9/15 7:36:57

大道至简 - 基于Docker的Serverless探索之旅

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
大道至简 - 基于Docker的Serverless探索之旅

近年来, 热门话题出现了一个全新的构建架构风格。新技术浪潮下不同的人, 会有不一样的解读。本文要对编程模型展开分析, 借助容器技术去打造一个最为简单的平台。

简介

随着移动互联网, 以及物联网和大数据应用迅猛发展, 人们对云计算的需求被极大促进。然而, 要让应用架构具备良好可伸缩性, 且拥有高可用性, 并非轻而易举之事。并且, 对庞大的基础架构进行运维与管控, 更是面临极大挑战。

近年来,一个新的架构风格成了热门话题。对于一个新的技术浪潮,不同人都会有不同解读。本文将分析的编程模型,并借力容器技术来打造一个最简单的平台。

概念

在 的描述了的不同定义。本文将关注于如下的定义:

跟传统架构不一样, 由开发者达成的服务端逻辑在无状态的计算容器里运行, 它被事件触发, 是短暂的, 也许只在一次请求进程中存在, 完全由第三方管理。换一种思考途径, 这就是函数服务‘as a / FaaS’。

实际上, 与FaaS是于不同维度去概括阐述此新架构的特性, 从部署运维形态这个角度而言, 着重突出其不存在需关注底层执行环境的优势, 然而FaaS所描述的是, 它是以服务化的形式来提供函数式计算能力。

AWS是此领域的先行者, 之后, 其他厂商纷纷推出自身的函数服务, 这般如Cloud以及阿里云函数服务之类的。

架构分析

基于Event的编程范型所依托的应用, 它的开发方式跟经典的Event--(ECA)极为相像, 此应用通常涵盖如下这些方面。

相对于过于带有技术范的“as a”而言, 明显地, 它更容易深入人们内心, 然而呢, 这个名词同样容易给人造成误解。应用并不是不需要把服务器当作计算的资源, 正确的理解是, 应用开发人员不需要去关注计算资源的获取以及运维, 而是由平台按照需求来分配计算资源, 并且保证应用执行的时候要满足SLA。

出于上述目标的缘故, /FaaS平台针对底层计算环境给出了特殊要求:

这里能看到, 容器技术(比如LXC等), 对于所提供的计算环境而言, 是极为适配的。每当系统接收到事件, 只需去动态启动容器, 以此来执行那业务逻辑就行。这便是有人戏称“”Is CGI In的缘由所在。

不过, 在那种大规模分布式的环境里头去支持/FaaS, 跟在单机操作系统之上调度执行一个CGI进程, 二者是很不一样的。我们得要有那种能够标准化的办法, 去搞开发、做交付以及进行运维事件处理逻辑;而且还得能够处于分布式环境当中, 有效地管理多种资源, 同时实施任务调度, 另外还要处理各种各样的失效情形, 以此来确保应用具备高可用性。

诸多企业以及方案, 像是IBM, 还有Iron.io等等, 均将容器视作平台的基础技术同时, 也对把容器当作实现技术的原型予以了介绍:

阿里云函数服务, 其一, 还与容器服务团队一块儿, 其二, 促使基于的平台达成实现。

下面, 我将要介绍一个参考架构, 这个参考架构是基于某平台的, 而且它属于高层次的, 要点会像下面这样列出:

利用容器的方法实现平台,有如下优势:

一个简单的基于的原型实现

接下来, 我们要依据阿里云容器服务, 去打造出一个最为简易的原形, 应用架构是这样的。

需注意, 你提供的内容不完整, “通过容器服务的 ”这里缺少关键描述。但就现有内容改写如下: 我们给出了一个极其简单的, 它是依据Flask框架达成的, 能够接纳HTTP请求当作事件触发, 它在集群上运行, 并且借助容器服务来做成在集群上的任务派发, 进而动态地开展事件处理。

其实例代码可以从上获得

我们能够对它实施的代码进行剖析: 当请求者前去访问 /test1路径之时, 就会致使事件被触发。它会于集群之上自行挑选一个节点, 并且依据“hello-world”镜像去产生一个容器, 进而执行任务。

@app.route('/test1')def ():

= .('hello-world')

`.start()`, ‘来自 %s 的 “Hello World”!’ %。

归因于阿里云容器服务同Swarm全然兼容, 因而应用能够借由原生API去创建容器以施行事件处理逻辑。整个这番逻辑极端简洁, 并且具备相当不错的灵活性, 能够施行随便哪种基于镜像的操作逻辑, 像基于实现的爬虫、立于R的数据分析算法等等。

这个办法能够极为迅速地实现上路目的, 然而要是在事件处理进程里需求对任务水平伸缩予以支持, 以及故障重试等特性, 那还得借助繁杂的编码于集群上展开调度执行操作。缘于Swarm等编排管理工具更多地是考量了长时间运行在线应用的调度算法, 而针对这样的短生命周期或者离线应用并未具备内置支持。但阿里云容器服务凭借极为简便的办法给予了核心的离线任务调度以及支持能力。我们能够便利地借助它来为应用提供支撑。

供了一个简单示例, 当请求者访问 /test2路径时, 就会触发事件, 基于 “”模板里阐述利用宣告方式描述基于容器任务所做的定义, 会在集群上创建一个离线应用, 模板中提到 test服务被。

”镜像提供, , 它会动态地生成一个UUID, , 并且指明该服务需要有10个容器实例来执行, , 和其重试和释放策略, , 还可以指明任务执行需要的CPU share, , 等资源需求, , 容器服务会根据这些声明条件自动化动态地在集群中调度任务。

= '''

: "2"

:

.: "batch"

:

test:

image: //--

: no

: 10

:

:

.scale: "10"

.: "20"

.: "-all"

@ 应用程序路由(“/测试 2”), 定义函数()。

="hello%d" % time.time()

.(, =) , “Hello World from ”, 由 %s 进行格式化生成的感叹号!

若你期望知晓容器服务所给出的那些离线计算原语, 那就去参阅在阿里云容器服务里运行离线作业这件事。

根据容器服务所给出的离线计算原语, 能够极大地简化事件调度, 则会使得开发人员聚焦于事件处理逻辑本身。与此同时, 针对业务需求, 您能够定制事件控制器的实现用以控制数据处理流程, 例如提供根据管道或者有向无环图的支持。

借助容器服务所具备之高可靠性, 若节点失效即可自动调度至其他节点予以执行, 借由容器服务的弹性资源管理, 平台能够动态调节集群规模, 使其得以满足应用对于资源之需求, 阿里云容器服务另外提供了集成的日志处理以及应用监控能力, 能够便利地诊断与管控任务执行。

在阿里云上部署

于阿里云里去部署那立足于容器的管理应用, 是极为简便容易的。能够借由下面所提及的 -模板达成一键式的部署:

: image: //-- :

- =${} :

.addon: ""

..:

因为要使得事件调度器能够去访问容器集群的节点, 所以我们得去配置对应的访问证书以及集群访问端点。有关信息能够借助选择集群的连接信息而获取到:

于容器服务范畴内, 为确保安全访问之目的, 集群需借由 HTTPS予以访问, 且需借助证书形式实施认证。各个集群的证书互异, 并且能够动态地执行吊销以及重新生成证书之操作。处于每个节点之上的 /etc// 目录里, 皆会涵盖针对此节点的集群的访问证书。于节点上的容器应用当中, 一种更为简易获取证书的办法, 是借助 label 将其标记为.addon 这般模样, 而这般一来, 容器便可于其内部的 /etc// 目录下成功获取集群的访问证书, 具体的实现示例可参考中提及的代码。

这般一来, 我们能够便捷地于容器服务之上部署上述提及的模板, 在进行部署之际仅需填入集群的访问端点便可。

这样一个控制器就部署完成了

访问不同的访问端点就可以触发相应的事件处理逻辑

总结

它是一种用于构建分布式计算应用的方式, 并且, 它是完美实现的基础技术。阿里云容器服务在兼容Swarm集群管理以及容器调度之际, 还提供了针对离线计算、服务管控等诸多方面的扩展, 这使得构建一个无需运维(NoOps)的应用环境变得极为简单。

倘若要搭建一个具备真正意义的平台, 那自然还有诸多事项需加以考量: 像是供应多租户环境的安全隔离;对调度逻辑予以优化, 借此重用容器, 防止每次进行创建等。对于这些问题, 阿里云函数服务这类商业化的平台均会拥有系统化的解决办法。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 7:35:07

Vue的基础原理和使用

一、Vue 1、前言 前端的基础知识参考:javaweb前端基础(HTML、CSS、Javascript、vue3、ajax/axios)-CSDN博客文章浏览阅读225次,点赞6次,收藏3次。本项目综合运用了三大核心技术,实现了一个完整的四段式页…

作者头像 李华
网站建设 2026/9/15 7:34:55

光伏CAD插件实战指南:从组件排布到施工图全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/15 7:34:00

2026年AI编程实战地图:场景化工具链协同指南

1. 这不是工具清单,而是一份2026年AI编程生产力的实战地图“2026年AI编程工具大全,33个主流工具一次看懂”——看到这个标题,你脑子里浮现的可能是一页密密麻麻的软件名官网链接一句话介绍的表格。但我要坦白告诉你:那种清单&…

作者头像 李华
网站建设 2026/9/15 7:31:24

Hibernate 核心原理与架构详解

Hibernate 核心原理与架构详解 定位:Hibernate 架构分层、启动引导、持久化流程、代理原理、事务连接与类型系统 适用版本:Hibernate ORM 6.x(Jakarta Persistence 3.1) 目录 整体架构启动引导持久化流程代理生成原理连接与事务集…

作者头像 李华
网站建设 2026/9/15 7:28:15

线程池生产级调优实战:参数计算、拒绝策略与异常处理解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华