阿里云 SAE Web:百毫秒高弹性的实时事件中心的架构和挑战

news2024/9/30 5:17:53

作者:胡志广(独鳌)

背景

Serverless 应用引擎 SAE 事件中心主要面向早期的 SAE 控制台只有针对于应用维度的事件,这个事件是 K8s 原生的事件,其实绝大多数的用户并不会关心,同时也可能看不懂。而事件中心,是希望能够成为一个更高维度入口,可以总览全局的事件(着重于异常事件),并且配置相关的通知与告警。

建设事件中心和监控最大的区别在于:

  • 监控: 监控主要在关注异常指标的监控告警和可观测能力上。
  • 事件中心: 主要是系统进行诊断抽象后面向用户更紧急和具体定位的事件可以让用户进行一键订阅和提前告警,面向智能运维的方向进行建设。

事件中心的核心意义在于通过显示、通知来将 SAE 上的应用与用户更紧密的连接起来。

事件中心整体能力大图如下:

SAE Web 上线后对于用户的事件需求更加的敏感,因为 Web 支持百毫秒弹性,所以对于事件的实时性和可靠性的要求更高,对于用户的通知和告警消息感知也更重要,针对这些需求 SAE 针对 Web 进行开发了事件中心让用户可以更好的感知异常事件。

整体架构

  • 资源服务

    • K8s:针对 K8s 的原始事件等各种记录入库,包括 pod、workload、网络等。
    • 极速系统:主要是针对 Web 的场景开发的百毫秒资源服务,实时性和弹性高,这里主要将实例信息、版本切换事件原始信息入库。
  • 事件中心

    • 事件消费:主要实时消费日志库中的原始数据进行监听。
    • 事件诊断:原始数据量过大冗余信息也多,所以需要事件诊断进行数据清洗和把中间数据写入 cache 临时保存。
    • 事件生成:数据诊断完成后,根据固定的事件模型写入到事件库保存。
    • 事件消息规则订阅:根据用户订阅的规则将生成好的事件通过消息通知服务进行告警通知,包括:钉钉、短信、邮件等。

技术挑战

技术选型

  • 全新实现一套 SAE Web 事件架构

    • 优点:历史包袱小,实现更优雅。
    • 缺点:研发周期长和之前的前后端需要兼容。
  • 基于 SAE 微服务事件架构实现

    • 优点:事件模型是现成的,实现简单和现有系统兼容。
    • 缺点:无法处理 Web 的海量数据,存在数据瓶颈。
  • 最终方案: 事件模型采用 SAE 微服务事件中心架构实现写入,但是 Web 的事件不直接写入事件而是通过一层数据清洗后写入事件库避免信息爆炸。

数据爆炸

资源数据架构现状

微服务 K8s 资源架构

微服务 K8s 资源架构基于 K8s 基础之上建设的,所以对于 workload 和 pod 当资源异常状态的时候会重试非重建,所以 workload 的 key 和 pod 的 key 是唯一的,这时是不会造成事件信息的数据爆炸的,所以最终通过组件将原始事件信息写入到日志库中最终通过事件中心进行消费。

Web 极速系统资源架构

Web 是自主研发的一套极速系统可以实现百毫秒弹性实例的资源系统,可以通过流量控制弹性,闲置时进行缩容。

  • 实例资源: 实例主要通过预留和弹性扩容的方式进行创建,一般通过流量控制弹性扩容,没有流量访问时则动态缩容。

    • 实例弹性扩容/缩容成功:扩容和资源闲置时进行缩容,除了预留资源是固定的 ID,其他的资源可能随时弹出和缩容,这里和微服务 K8s 架构固定实例的模式有很大差异,所以资源实例数据也会多很多。
    • 实例弹性扩容失败:当实例出现异常的时候(包括镜像拉取失败、健康检查失败、其他创建失败等原因),那么将会不断的进行重试,所以实例的 ID 也会变化,这时将会有很多的失败实例信息。
  • 版本切流: 微服务 K8s 架构是根据 workload 进行部署发布,Web 是基于版本流量进行发布。

    • 版本切流成功:版本切流成功就是产生一条事件,这里主要会根据版本比例产生一些事件信息。
    • 版本切流失败:版本切流失败因为和实例弹性有关系,所以也受弹性实例失败影响,当弹性失败的时候版本切流同样也是失败会进行重试,并且版本切流还会存在部分成功和部分失败的场景,这种当面临同版本失败过多时也会存在信息爆炸的风险。
  • 数据爆炸风险: 基于上述内容 Web 架构的实例会动态的扩容和缩容,失败的时候不断的重建实例造成 ID 会重建,包括版本失败的信息也和实例扩缩容有关系,所以资源的事件数据量要远远大于微服务 K8s 架构的事件数据。

解决方案

数据爆炸解决方案:通过分布式缓存进行数据聚合,根据时间阈值后进行事件生成,其实类似一种数据队列的模式。

  • key:应用 ID+版本 ID+事件类型,如:app1_version1_scaleUpSuccess。
  • 事件消费+初始化缓存:消费原始日志后判断事件 key 是否在缓存中,如果不在缓存中则调用 init 函数初始化 cache 数据,初始化 count:1 和 instanceId:1,如果失败的则不存在 InstanceId。
  • 事件消费+更新缓存:消费原始日志后如果事件 key 在缓存中则将缓存数据进行更新 count 和 instanceId 进行聚合,如:count2,instanceIds:id1,id2 这样(之前只有 id1),以此类推。
  • 事件生成:根据时间阈值定时出队,比如 60s 后,如果 key 内的 createtime 超过 60s 则调用 remove 方法删除缓存事件生成到标准的 sae 事件库中按照格式。

数据爆炸最初用的缓存方案,但是没有采用分布式锁,所以出现了事件中心管控多任务实例造成了同一个事件写入重复多份的问题,下面有问题和优化方案。

  • 问题:最初只是在内存中保存,所以当多实例时每个实例都会写入到事件库就会存在数据冗余。
  • 优化方案:队列采用分布式锁的方式处理,避免多实例重复写入事件的问题。

Full Gc

问题:因为基于微服务事件中心架构的模型是 java,最初是一次性获取缓存中所有的事件记录写到一个 Java 的 HashMap 中,而这一个 hashmap 有几百兆,如果在事件生成时比较慢会有多个线程都进行拉取就会造成上一个对象没回收下一个线程又获取了一个新的对象,这样就很容易 full gc 了,问题的监控图如下:

优化:

  • 这个问题其实是有 2 个问题:

    • 早期不是所有的事件类型都是类似队列的模式进行处理,就是入队和阈值出队的模式,所以某个事件异常后就会产生数据爆炸。
    • 一次性拉取缓存所有的数据设置到 Java 的 hashmap,数据量过大如果处理慢则会造成变量一直在函数内没有释放容器造成内存泄露和触发 full gc。
  • 优化内容:

    • 优化一:所有的事件类型都采用入队和出队的模式进行处理,这样可以降低很多数据积压,到达阈值后都会进行事件写入和去重。
    • 优化二:对于拉取缓存的数据进行分布式分片处理让整体的数据变小,比如 1/20 的数据量相对之前几百兆就缩小 20 倍,这样内存就直接下降了处理速度也快可以完美解决 full gc 问题。
    • 优化后的效果图如下:

未来和展望

因为面向资源的原始事件相对于 SAE 的用户来讲太难理解了,所以事件中心的出现是更简单的帮助用户进行诊断和定位问题并且第一时间进行通知更加及时的定位问题根据事件,目前很多用户基于 SAE 的事件中心发现问题并诊断自闭环,比如南瓜电影、迅捷联动等用户。

事件中心不仅仅提供白屏化和可订阅通知能力,还可以和用户的运维系统进行定制化集成起来,如:南瓜电影将事件中心集成到了运维平台。

未来计划在事件中心上丰富更多的诊断和智能运维事件结合 AI 场景进行分析和定位让用户可以精确锁定问题和快速处理,实现真正一键定位和简单运维。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实验3 使用Wiresharkl观察ping命令的工作过程

1、实验目的: 了解嗅探器工具Ethereal(Wireshark)的下载和安装方法; 掌握Ethereal(Wireshark)的简单使用方法; 了解抓包结果的分析方法(最好是把菜单中所有的菜单命令都尝试一下&…

SpringCloud-Alibaba第二代微服务快速入门

1.简介 Spring Cloud Alibaba其实是阿里的微服务解决方案,是阿里巴巴结合自身微服务实践,开源的微服务全家桶,在Spring Cloud项目中孵化成为Spring Cloud的子项目。第一代的Spring Cloud标准中很多组件已经停更,如:Eureak,zuul等。所以Sprin…

复刻谷歌爆火的AI生成播客应用:高效方案分享

随着Google Illuminate等产品的推出,将复杂文档转换为音频播客的需求日益增长。MIT最近开源的PDF2Audio项目为此提供了一个开放且高效的解决方案。本文将详细介绍如何复刻这一功能,并分享一个适用于AI代理和播客创业者的高效方案。 一、背景 近年来,将文本内容转换为音频播…

第一课:什么是易语言?

易语言是一门计算机程序设计语言,也通常代指与之对应的集成开发环境,其特点是通过汉语进行编程。易语言的创始人是吴涛。早期版本的名字为E语言。 简单的说,易语言是一个小型的软件开发系统。(就是写程序用的,够通俗吧&#xff1f…

Vue76 编程式路由导航

笔记 作用&#xff1a;不借助<router-link> 实现路由跳转&#xff0c;让路由跳转更加灵活 具体编码&#xff1a; //$router的两个API this.$router.push({name:xiangqing,params:{id:xxx,title:xxx} })this.$router.replace({name:xiangqing,params:{id:xxx,title:xxx} …

LeetCode 热题 100 回顾19

干货分享&#xff0c;感谢您的阅读&#xff01;原文见&#xff1a;LeetCode 热题 100 回顾_力code热题100-CSDN博客 一、哈希部分 1.两数之和 &#xff08;简单&#xff09; 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标…

buuctf_藏藏藏

题目&#xff1a;没什么&#xff0c;一张图片&#xff0c;叫“藏藏藏.jpg” winhex&#xff0c;隐写看了&#xff0c;没什么结果 上kali&#xff0c;为了方便&#xff0c;我将图片命名为0.jpg。本文将讲述我遇到的俩个难点 1.kali未配置打不出中文字符 2.kali打不开docx 下面是…

1.2.1 计算机网络分层结构(上)

体系结构可分层使得不同的层次承担不同的功能。 知识点&#xff1a; 1.不同类型的节点&#xff0c;实现的功能层次可能不一样。 2.分层结构的设计并不唯一&#xff0c;可以根据实际需求增加或减少层次。 3.一个功能可以放在不同的层次反复出现。 根据分层结构不同可以分为&…

一维BFS模型

算法竞赛题目中有一种常见的一维BFS模型。 这种模型的特点是&#xff0c;某一个状态的值可以有上一个状态的值1来获得&#xff08;也就是说一条通道的权重是1&#xff09;。 比如例题&#xff1a; 农夫知道一头牛的位置&#xff0c;想要抓住它。 农夫和牛都位于数轴上&#x…

WPF之UI进阶--控件样式与样式模板及词典

WPF的优势之一就是能够更加容易快捷的对窗体和控件的外面进行改造&#xff0c;换句话说&#xff0c;那就是UI设计个性化更加容易。主要是借助了样式、模板及词典来实现的。那么本篇博文就一一对他们进行介绍。 文章目录 一、样式1: 定义样式2: 使用Setter设置属性关于Property和…

初识Linux · 地址空间

目录 前言&#xff1a; 代码现象 快速理解该现象 理解部分细节问题 细节1 拷贝和独立性 细节2 如何理解地址空间 细节3 为什么存在地址空间 细节4 如何进一步理解页表和写时拷贝 前言&#xff1a; 本文介绍的是有关地址空间&#xff0c;咱们的介绍的大体思路是&#x…

pyqt打包成exe相关流程

1、首先是安装pyinstaller, 在cmd中输入以下安装命令&#xff1a; pip3 install pyinstaller -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/ 2、安装完毕之后&#xff0c;下一步就是找到你要打包的工程&#xff0c;打包的logo放置如下位置&#xff1a; 3、将log…

甘肃小米醋:醇厚滋味,传承之香

宝子们&#xff0c;今天来给大家介绍一下甘肃的小米醋。✨甘肃小米醋&#xff0c;那是一种带着浓郁地域特色的美味宝藏。&#x1f381;&#x1f33e;以优质小米为原料&#xff0c;经过传统工艺的精心酿造&#xff0c;成就了这一瓶瓶醇厚的小米醋。打开瓶盖&#xff0c;那独特的…

class 028 基数排序

这篇文章是看了“左程云”老师在b站上的讲解之后写的, 自己感觉已经能理解了, 所以就将整个过程写下来了。 这个是“左程云”老师个人空间的b站的链接, 数据结构与算法讲的很好很好, 希望大家可以多多支持左程云老师, 真心推荐. https://space.bilibili.com/8888480?spm_id_f…

Redis string类型hash类型

string类型 类型介绍 在Redis中的所有的key都是string类型&#xff0c;而value的类型有多种。 Redis中的字符串是直接按照二进制的方式进行存储的&#xff0c;也就是不会做任何的编码转换&#xff0c;存的是什么&#xff0c;取出来的就是什么。这样一般来说&#xff0c;Redi…

《程序猿之Redis缓存实战 · 位图类型》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

设计效率拉高!一键生成国庆主题3d立体字!

​ 一键生成国庆主题字&#xff01;这是数字75&#xff0c;上传&#xff0c;点击生成 等个几秒&#xff0c;75周年立体字就做好了 而且融入了各种中国古建筑元素 这样的国庆主题字效果&#xff0c;以前我们要用c4d建模然后渲染出效果图 费时费力才做出一张 现在我们工作流…

事实与价值双阈值是算计启动的门槛

在现代社会&#xff0c;个体与群体的决策过程受到多种因素的影响&#xff0c;其中事实与价值的关系尤为重要。事实作为客观存在的基础&#xff0c;价值则是主观认知的体现。两者的相互作用构成了人类行为的复杂性&#xff0c;尤其在经济学、社会学以及伦理学等领域&#xff0c;…

JAVA毕业设计182—基于Java+Springboot+vue3的河道治理管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3的河道治理管理系统(源代码数据库)182 一、系统介绍 本项目前后端分离(可以改为ssm版本)&#xff0c;分为用户、工作人员、管理员三种角色 1、用户&#x…

linux 系统磁盘空间查看与清理

正常清理步骤 首先查看文件和目录的使用空间&#xff0c;系统/根目录下的文件夹一般情况不会占用大的磁盘空间&#xff0c;因此可主要查看您创建的目录或文件等 文件大小 使用ls -alh命令来查看&#xff0c;比如下方的.bashrc、.profile文件的大小。但是看到的文件夹大小仅仅…