开放源代码平台Flynn的架构与实现原理

简介: 【10月更文挑战第21天】应用程序的生命周期涉及从开发到运行的复杂过程,包括源代码、构建、部署和运行阶段。

现在的应用程序从源代码到运行阶段太复杂,没有标准的、通用的方式。整个过程及产出分为以下几个阶段。

  • 开发阶段:源代码。
  • 构建阶段:发布包/可执行程序。
  • 部署阶段:可运行的镜像(发布包+配置)。
  • 运行阶段:进程、集群、日志、监控信息、网络。


如果需要管理或者构建一个完整的服务栈,容器扮演的仅仅是一个基本工作单元的角色。在服务栈的最下层,需要有一种资源抽象来为工作单元展示一个统一的资源视图。这样容器就不必关心服务器集群资源情况和网络拓扑,即从容器视角看到的仅仅是“一台”服务器而已。还应该能够根据用户提交的容器描述文件来进行应用容器的编排和调度,为用户创建出符合预期描述的一个或多个容器,交给调度引擎放置到一台或多台物理服务器上运行。


如何为容器中正在运行的服务提供负载均衡和反向代理,如何填补从用户代码制品到容器这一“鸿沟”,如何将底层的编排和调度功能API化等,这些功能看似并不“核心”,却是实现“面向应用”云平台的必经之路。


Flynn,一个具有Layer 0和Layer 1两层架构的类PaaS项目,对宿主机集群实现一个统一的抽象,将容器化的任务进程合理调度并运行在集群上,然后对这些任务进行容器层面的生命周期管理

1、Flynn的主要功能

  • 分布式配置和协调

Flynn选择了etcd,但并没有直接依赖它,可以方便地通过实现Flynn定义的抽象接口将分布式协同组件更换成其他的方案。

  • 任务调度

Flynn原生提供了两种调度器,一种负责调度长运行任务(Service Scheduler),另一种负责调度一次性任务(Ephemeral Scheduler)。

  • 服务发现

在Flynn中,服务发现的主要任务是观察被监控节点(包括服务实例和宿主机节点)的上线和下线事件,从而在callback回调中完成每个事件对应的处理逻辑(如更新负载均衡的serve列表)。

  • 宿主机抽象

所谓宿主机抽象,是指上层系统(Layer 1)以何种方式与宿主机交互。宿主机抽象可以屏蔽不同宿主机系统和硬件带来的不一致。一般来讲,抽象实现的方式是在宿主机上运行一个Agent进程来响应上层的RPC请求,向上层的调度组件报告这台宿主机的资源情况,以及向服务发现组件注册宿主机的存活状态等。


2、Flynn的上层功能

Flynn构建在Layer 0之上的一套组件统称为Layer 1,它能够基于Layer 0提供的资源,抽象实现容器云所需的上层功能。

  • API控制器

Flynn也运行着一个API后端,以响应用户的HTTP管理请求。

  • Git接收器

Flynn使用Git来发布用户代码,Git接收器作为一个获取远程配置在用户方,所以用户推进的代码会直接交给这个接收器来制作代码制品和发布包。

  • Buildpacks

用户只需要上传可执行文件包(如WAR包),Buildpack就能够将这些文件按照一定的格式组织成可以运行的实体(如Tomcat+WAR组成的压缩包)。通过定义不同的Buildpack,PaaS就能实现支持不同的编程语言、运行环境、Web容器的组合。

  • 路由组件

容器服务栈要想正常工作,一个为集群服务的负载均衡路由组件是必不可少的。Flynn的路由组件支持HTTP协议和TCP协议,它能够支持大部分用户服务的访问需求。Flynn的管理类请求也是由路由组件来转交给API控制器的。通过与服务发现组件etcd协作,路由组件可以及时地更新被代理服务的IP和端口。


3、Flynn体系架构与实现原理

用户代码是如何上传到Flynn并执行运作的呢?主要有以下两种方式。

1)用户通过Git指令直接提交代码,这时Flynn需要做的工作至少包括以下几项。

  • 接收用户上传的代码。
  • 如果需要的话,按照一定的标准编译代码,组织代码目录。
  • 按照一定的标准将编译后的可执行文件保存到预设的目录中。


如果需要的话,按照一定的标准将可执行文件目录和Web服务器目录组装起来,生成启停脚本和必要的配置信息;将上述包含了可执行文件、Web服务器、控制脚本和配置文件的目录打包保存起来;在需要运行代码时,只需在一个指定的base容器中解压上述包,然后执行启动脚本即可,从可运行实体转换为应用实例。


当服务发布完成后,作为一个类PaaS项目,Flynn还需要实现这个服务或应用的整个生命周期管理,包括应用启动和停止、状态监控和测量。


第一,整个服务的生命周期管理的实现很简单,只需要针对微光生成的启动命令和运行起来的PID进行操作即可。


第二,服务和应用的状态监控。Flynn Host上的Container Manager进程负责实施健康检查,并检测本身运行着的容器数目,检测结果会更新Flynn数据库中的Formations表。另一端的Flynn Controller保持监听该表的数据变化,一旦发现预期的实例数和实际的实例数不一致,Controller就会根据差异值重新在某台Flynn Host下载并运行对应的Slug(或者删除多余的实例)。


第三,服务的水平扩展。如果需要增加实例,Flynn由用户指定某个Flynn Host来启动新的实例容器。如果用户不指定Host,那么Flynn调度器会选择一个当前运行中的实例数目最小的Host来运行。如果用户需要减少实例,Flynn会直接选择这个服务或应用的最新实例,然后把它们删除。


2)直接上传用户Docker镜像并运行起来。

当需要运行某个应用时,Flynn会从Blobstore中下载对应的Slug来运行。Flynn如果想要用户上传一个Docker镜像来运行,就要想办法把镜像制作成一个伪Slug。对于Docker镜像来说,发现和编写两步是不需要的,所以Flynn处理Docker镜像的过程直接来到了释放这一步骤。最后,就可以使用scale指令启动Docker镜像。

相关文章
|
2月前
|
SQL 存储 分布式计算
ODPS技术架构深度剖析与实战指南——从零开始掌握阿里巴巴大数据处理平台的核心要义与应用技巧
【10月更文挑战第9天】ODPS是阿里巴巴推出的大数据处理平台,支持海量数据的存储与计算,适用于数据仓库、数据挖掘等场景。其核心组件涵盖数据存储、计算引擎、任务调度、资源管理和用户界面,确保数据处理的稳定、安全与高效。通过创建项目、上传数据、编写SQL或MapReduce程序,用户可轻松完成复杂的数据处理任务。示例展示了如何使用ODPS SQL查询每个用户的最早登录时间。
101 1
|
19天前
|
SQL 数据采集 分布式计算
【赵渝强老师】基于大数据组件的平台架构
本文介绍了大数据平台的总体架构及各层的功能。大数据平台架构分为五层:数据源层、数据采集层、大数据平台层、数据仓库层和应用层。其中,大数据平台层为核心,负责数据的存储和计算,支持离线和实时数据处理。数据仓库层则基于大数据平台构建数据模型,应用层则利用这些模型实现具体的应用场景。文中还提供了Lambda和Kappa架构的视频讲解。
【赵渝强老师】基于大数据组件的平台架构
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理
医疗行业的语音识别技术解析:AI多模态能力平台的应用与架构
AI多模态能力平台通过语音识别技术,实现实时转录医患对话,自动生成结构化数据,提高医疗效率。平台具备强大的环境降噪、语音分离及自然语言处理能力,支持与医院系统无缝集成,广泛应用于门诊记录、多学科会诊和急诊场景,显著提升工作效率和数据准确性。
|
2月前
|
机器学习/深度学习 自然语言处理 搜索推荐
大厂 10Wqps智能客服平台,如何实现架构演进?
40岁老架构师尼恩,凭借深厚的架构功力,指导众多小伙伴成功转型大模型架构师,实现职业逆袭。尼恩的《LLM大模型学习圣经》系列PDF,从基础理论到实战应用,全面覆盖大模型技术,助力读者成为大模型领域的专家。该系列包括《从0到1吃透Transformer技术底座》《从0到1吃透大模型的基础实操》《从0到1吃透大模型的顶级架构》等,内容详实,适合不同水平的读者学习。此外,尼恩还分享了多个智能客服平台的实际案例,展示了大模型在不同场景中的应用,为读者提供了宝贵的实践经验。更多技术资料和指导,请关注尼恩的《技术自由圈》公众号。
大厂 10Wqps智能客服平台,如何实现架构演进?
|
2月前
|
消息中间件 缓存 Java
亿级流量电商平台微服务架构详解
【10月更文挑战第2天】构建一个能够处理亿级流量的电商平台微服务架构是一个庞大且复杂的任务,这通常涉及到多个微服务、数据库分库分表、缓存策略、消息队列、负载均衡、熔断降级、分布式事务等一系列高级技术和架构模式。
92 3
|
26天前
|
存储 自然语言处理 文字识别
开放应用架构,建设全新可精细化运营的百炼
本文介绍了阿里云智能集团在百炼大模型应用中的技术实践和运营经验。主要内容包括:1) RAG技术的背景及其在落地时面临的挑战;2) 多模态多语言RAG技术的研发与应用;3) 多模态多元embedding和rank模型的训练;4) 基于千问大模型的embedding和rank模型;5) 开源社区推出的GT千问系列模型;6) 模型应用中的可运营实践;7) AI运营的具体方法论和实践经验。通过这些内容,展示了如何解决实际应用中的复杂需求,提升系统的准确性和用户体验。
|
3月前
|
Cloud Native Java 编译器
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
随着云计算技术的不断发展,云服务商们不断推出高性能、高可用的云服务器实例,以满足企业日益增长的计算需求。阿里云推出的倚天实例,凭借其基于ARM架构的倚天710处理器,提供了卓越的计算能力和能效比,特别适用于云原生、高性能计算等场景。然而,有的用户需要将传统基于x86平台的应用迁移到倚天实例上,本文将介绍如何将基于x86架构平台的应用迁移到阿里云倚天实例的服务器上,帮助开发者和企业用户顺利完成迁移工作,享受更高效、更经济的云服务。
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
|
3月前
|
缓存 物联网 数据库
如何帮助我们改造升级原有架构——基于TDengine 平台
一、简介 TDengine 核心是一款高性能、集群开源、云原生的时序数据库(Time Series Database,TSDB),专为物联网IoT平台、工业互联网、电力、IT 运维等场景设计并优化,具有极强的弹性伸缩能力。同时它还带有内建的缓存、流式计算、数据订阅等系统功能,能大幅减少系统设计的复杂度,降低研发和运营成本,是一个高性能、分布式的物联网IoT、工业大数据平台。 二、TDengine 功能与组件 TDengine 社区版是一开源版本,采用的是 AGPL 许可证,它具备高效处理时序数据所需要的所有功能,包括: SQL 写入、无模式写入和通过第三方工具写入 S标准 SQL 查
83 13
|
3月前
|
监控 Android开发 iOS开发
深入探索安卓与iOS的系统架构差异:理解两大移动平台的技术根基在移动技术日新月异的今天,安卓和iOS作为市场上最为流行的两个操作系统,各自拥有独特的技术特性和庞大的用户基础。本文将深入探讨这两个平台的系统架构差异,揭示它们如何支撑起各自的生态系统,并影响着全球数亿用户的使用体验。
本文通过对比分析安卓和iOS的系统架构,揭示了这两个平台在设计理念、安全性、用户体验和技术生态上的根本区别。不同于常规的技术综述,本文以深入浅出的方式,带领读者理解这些差异是如何影响应用开发、用户选择和市场趋势的。通过梳理历史脉络和未来展望,本文旨在为开发者、用户以及行业分析师提供有价值的见解,帮助大家更好地把握移动技术发展的脉络。
98 6
|
3月前
|
编解码 Linux 开发工具
Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明
支持x64_64架构、aarch64架构(需要glibc-2.21及以上版本的Linux系统, 需要libX11.so.6, 需要GLib–2.0, 需安装 libstdc++.so.6.0.21、GLIBCXX_3.4.21、 CXXABI_1.3.9)。