最新要闻
- 皮俑是什么做成的?皮俑为什么救吴邪?
- 擅长画虎的画家是?擅长画虎的十大画家
- 神奇宝贝的观看顺序是什么?神奇宝贝的大结局是什么?
- 用上半固态电池!赛力斯发布海外新车型SERES 5:订单超2万
- 国产骄傲!中国年度十大畅销新能源车型:外资仅有特斯拉上榜
- 每日播报!游客滑雪失控致女生被撞倒后抽搐 医生:危险数极高、常见骨折
- 拿老款忽悠当新款卖 女车主退车被日系4S店老板辱骂
- 风调雨顺的意思是什么?风调雨顺的下联是什么?
- 小年为什么分南方和北方?小年为什么吃麻糖?
- 女粉丝入手小米13 曾是十年资深果粉:被小米和雷军打动
- 当前滚动:二手车商要“气晕”!美国已有特斯拉新车价格低于二手车
- 低调的江西 盛产新能源富豪
- 2023央视春晚主持人阵容公布:首次迎来双90后
- 每日头条!衡山雾凇火了 多名游客滑冰下山很危险 景区调整开放时间
- 世界信息:把车变成船 比亚迪真会玩
- 天天报道:《中国奇谭》值得这么夸吗?
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
新一代云原生日志架构 - Loggie的设计与实践
Loggie萌芽于网易严选业务的实际需求,成长于严选与数帆的长期共建,持续发展于网易数帆与网易传媒、中国工商银行的紧密协作。广泛的生态,使得项目能够基于业务需求不断完善、成熟。目前已经开源:https://github.com/loggie-io/loggie
【资料图】
1. 背景
严选日志平台初期,使用filebeat采集云内日志,用flume采集云外日志。期间经历了一段痛苦的运维排障时期,被问的最多的几个问题:
- 某条日志为何没有采集?
- 某条日志为何重复采集了?
- 能否将漏采集的那条日志补采集?
- 某个日志文件为何没有采集?
- 某个日志文件的采集速度怎么这么慢(延迟超过30s)?
- 服务重新发布后,之前的日志怎么没有了?
- …
而且同时维护了2套日志采集agent,维护成本高。不管是filebeat还是flume都存在以下几点严重的问题:
- 采集性能低:大促时间,部分节点的日志打印速度超过100MB/s,然而filebeat的采集性能上限只有80MB/s左右,flume更差一点。
- 资源占用高:filebeat单节点采集文件超过100个,cpu使用率超800%;flume空跑内存就得占用200MB+,大促期间不得不开启限流以避免影响核心业务系统。
- 扩展性差:fliebeat复杂的架构以及单output设计无法满足多变的业务需求。
同时也调研其他开源的日志采集agent,或多或少都存在上述问题,且都没有足够的可观测性和运维手段(工具)来帮助运维排障,更不用说完整的日志解决方案。
因此我们走向了自研的道路。
loggie在2022年初已开源:https://github.com/loggie-io/loggie
欢迎大家使用,与社区一起成长!
2. 架构设计
基于golang,借鉴经典生产者-消费者模式的微内核设计。一个pipeline只有source、queue、sink、interceptor4个组件概念,且interceptor也不是必须的。pipeline支持配置热加载,组件热插拔,pipeline之间强隔离,防止相互影响。
2.1 pipeline设计
pipeline的设计初衷主要是为了隔离性。之前运维遇到的一个严重问题:云内使用filebeat采集多个业务的多个日志文件,但是其中一个日志文件的采集配置的topic被误删,导致发送到kafka失败而阻塞,进而导致整个物理机几点的所有日志都阻塞。因此我们需要一种泳道隔离手段,来隔离不用业务、不同优先级的日志,避免相互影响。
2.1.1 易扩展
pipeline的简洁设计使得我们的扩展极其便捷。在概念上,一个pipeline只有4种组件:source、queue、sink、interceptor,而且interceptor不是必须的。越少的概念,扩展者者就有越少的学习成本。并且,为了进一步提高扩展性,pipeline中的所有组件都抽象为component,所有的组件拥有一致的生命周期与实现方式。不仅方便了扩展,也方便了loggie对组件的统一管理。
2.1.2 隔离性与reload
基于pipeline,我们实现了配置热更新,组件热加载。reloader与discovery组件可以基于K8S CRD、http监听等方式(预留接口,可以对接例如zookeeper、consul、apollo等配置中心),以pipeline维度进行reload。因此,在保证了reload能力的同时仍然满足了pipeline隔离的目的。
2.1.3 功能增强:interceptor
interceptor在loggie中是一个可选的组件,却在loggie中扮演着非常重要的角色。loggie中绝大多数的增强功能都是基于interceptor实现的,例如限流、背压、日志切分、encode&decode、字符编码、结构化等。用户可以根据实际情况选择对应的interceptor提升loggie的适应能力。
完整内置interceptor:https://loggie-io.github.io/docs/reference/pipelines/interceptor/overview/
3. 日志采集
对于一个日志采集agent来说,通常需要重点关心以下3点的设计与实现:
- 高效采集:高效指的是高性能的同时低能耗,即如何采集的快服务器资源占用有小。
- 公平性:例如写入快的文件不能影响写入慢的文件采集、最近更新的文件不能影响之前更新的文件的采集,删除文件的合理采集与释放。
- 可靠性:日志不丢失。包括进程崩溃重启、服务发布&迁移&容器漂移、下游阻塞等情况。
3.1 高效采集
日志采集,我们关心的是这么几个问题:
- 如何及时发现新创建的文件?
- 如何及时发现最新的写入?
- 如何快速读取文件?
这其实是两方面的问题:
- 事件感知:及时发现文件事件。例如文件新建、删除、写入。
- 文件读取:高效读取文件内容。尽可能快的读取文件内容,减少磁盘io,cpu可控。
3.1.1 事件感知
如何做到文件事件感知呢?业界有两种做法:
- 定时轮询:定时检查目录文件状态。
- OS事件通知:注册OS文件事件,由OS通知具体的文件事件。
两种方式各有利弊:
定时轮询:
- 优点:实现简单,安全可靠。
- 缺点:轮询的时间间隔不太好确定,间隔太短耗cpu,间隔太长发现事件就太慢。
OS事件通知:
优点:能够第一时间发现文件事件
缺点:
- 实现成本高(不同OS的实现方式不同,需要适配)。
- 存在bug:例如在最常用的linux系统中存在一些bug(https://man7.org/linux/man-pages/man7/inotify.7.html) ,其中影响最大的几点:通知丢失、注册数量有上限、文件改名事件无法通知改名后的文件名。
- 使用有限制:例如无法对通过 NFS(Network File System) 挂载的网盘&云盘生效,无法对 FUSE(filesystem in userspace) 生效等。
因此loggie结合两者共同实现了一个安全可靠,却又能及时感知事件的方案:
同时启用定时轮询和OS通知,使用OS通知然后搭配一个相对较长(loggie默认为10s)的定时轮询,将两者发现的事件进行合并以减少重复处理,这样就能同时兼具两者的优点。
但是实际测试下来,我们发现了cpu占用上升,分析原因:
- OS事件过多:特别是写文件的时候,对应有两个os事件(chmod+write),一旦文件写得频繁,os的事件将非常多,loggie疲于处理系统事件。
所以,我们重新分析,什么样的事件是我们真正关心并需要及时感知的呢?
- 文件写事件?
当我们无法及时发现文件写事件,会有什么影响呢?有两种情况:
- 如果这个文件正处于采集中(持有文件句柄),那这个文件的写事件没有影响。因为正在读这个文件,后续的写入理所当然能被读到。
- 如果这个文件处于不活跃状态(即文件已经读取到了末尾,并且一定时间内没有发现新内容,甚至文件的文件句柄被释放了),这个情况我们希望能及时感知文件的写事件以方便我们及时采集最新的写入内容。
因此,重要的是“不活跃”文件的写事件。
- 文件新建(滚动)事件?
当我们没有及时发现新建事件,会有什么影响呢?
首条日志写时间到发现时间之间的日志将会延迟采集(对于loggie来说,最大延迟在10s左右,因为默认的轮询时间间隔为10s),但是一旦感知到事件,采集可以很快追上进度。因此新建事件不那么重要。
- 文件删除事件?
当我们没有及时发现删除事件,会有什么影响呢?有3种场景:
- 文件被删除后,希望未采集完成的文件继续采集:这种情况,删除事件迟到不总要。因为当文件还未采集完,及时发现的删除事件没有意义;当文件采集完后,未及时发现的删除事件仅影响文件句柄释放延迟。
- 文件被删除后,希望尽快释放磁盘空间:仅仅导致文件句柄释放延迟,即磁盘空间释放延迟(大概在10s左右)。
- 文件被删除后,希望未采集完的文件给予一定的容忍时间再释放磁盘空间:这种情况近会导致文件最终释放延迟的时间=容忍时间+事件迟到时间。
因此,删除事件不重要。
- 文件改名事件?
同上,不重要。但是如何得知文件改名以及改成什么名确实个值得好好思考的问题!(暂不展开)
所以,真正重要的是不活跃的文件写事件。因此我们的架构调整为:
成果:
- 节省大量不必要的目录和文件的系统事件注册和监听以及对应监听产生的大量事件,进一步降低了CPU的损耗。
- 事件处理这一层去掉了事件合并这一步,因为所有事件都是有效事件,进一步降低了CPU的损耗。
3.1.2 文件读取
文件读的快的原则:
- 减少磁盘io:意味着每次需要读取更多的字节数缓冲在内存,再按行分割处理。
- cpu可控:减少gc和线程调度。
矛盾点:
- 原则1注定了我们需要重复分配长数组来承载读取的内容。这意味了很多大对象。
- 原则2中的gc最害怕的恰恰是转瞬即逝的大对象。
因此文件读取的原理为:
- 复用读取缓存数组:重复利用大对象。
- 读取字节数:4k的n倍,充分利用os的page cache。
成果:读取性能达到2G/s(本地macbook ssd环境测试)。
3.2 公平性
公平性我们关心的是文件之间的读取平衡,不要造成文件读取饥饿(长时间得不到读取而造成数据延迟)。业界这块的做法有两种:
每个文件对应一个读取线程,有os调度文件读取保证公平性。
- 优点:能够保证公平性。
- 缺点:同时采集的文件数量多的时候cpu消耗太大。
匹配到的文件按照更新事件倒序,按照顺序挨个读取文件。
- 优点:实现简单。
- 缺点:无法保证公平性,更新时间早的文件必然会饥饿。
因此loggie实现了基于“时间片”的读取方式:
成果:仅仅用一个线程(goroutine)就处理了loggie所有的日志读取任务,且最大可能的保证了公平性。
3.3 可靠性
loggie保证了数据的不丢失,实现了at least once保证。对于文件读取来说,可靠性的实现有一定特殊性:需要保序ack,即我们对于采集点位记录的持久化前提是当前ack之前的ack全部done。因此为了提高保序ack的性能,我们的这块的设计进行了一些优化:
对于sink端提交的ack不立即进行持久化,而且进行了双重压缩:
- 在ack chain阶段只会提交最尾端的ack到db。
- db中会对提交的ack再进一步压缩。
成果:大大减少了cpu的消耗和ack持久化的磁盘io次数。
3.4 性能对比
对比filebeat,同等情况下,发送至Kafka(单行、单文件、相同发送并发度、无解析场景):
- 单文件采集对比,Loggie和Filebeat消耗的CPU相比,大概仅为后者的1/4,同时发送吞吐量为后者的1.6~2.6倍。
- Filebeat的极限吞吐量存在瓶颈,80MB/s后很难提升,而Loggie的极限值更高,多文件采集下能轻松达到200MB/s+。
4. 运维治理
基于loggie我们做了很多运维治理,以及应用分析的事情:
4.1 可观测
根据长期运维、排障经验归纳提炼的内置指标,可以指导帮助我们快速发现定位问题:
提供了grafana模版,可以一键配置:https://github.com/loggie-io/installation/tree/main/prometheus/grafana-dashboard
4.2 完整性
日志从采集到最终的存储,链路可能比较冗长,中间任何一个环节出问题都可能导致日志丢失。因此需要有一个日志完整性校验的机制来判断日志的采集情况。通常我们比较关心两方面问题:
- 某个服务的某个日志数据有没有丢?
- 丢的数据能否补?
那如何计算日志有没有丢呢?精确完整性计算的核心原理:
- 计算维度:机器ip+日志文件唯一标识
机器ip是确定的,但是如何唯一标识日志文件呢?
文件名可能重复,因此需要文件名+文件inode(文件标识)。但是inode只在磁盘分区中唯一,因此需要修改为文件名+文件inode(文件标识)+dev(磁盘标识)。但是inode存在复用的情况,如果文件被采集完后被删除了,inode被复用给一个同名的文件,这样就变相的造成重复,因此我们需要增加文件内容的前n个字符编码。最终的计算维度为:机器ip+文件名称+inode+dev+{fistNBytes}。
- 近实时计算:小时级批任务计算
之所以用小计批任务计算,主要有两个原因:
日志的完整性计算不需要太实时,因为采集的日志可能因为种种原因而迟到,实时计算的话很可能会存在太多的数据丢失的情况。而且计算的量级非常大,不适合实时计算。
另一面,不使用更大的时间间隔(例如T+1)计算的原因是,通常日志都会配置轮转和清理。如果间隔过大,计算出有丢失的日志可能因为轮转和清理被删除了,那就失去了补数据的机会。
- 计算逻辑:日志行首offset+日志size=下一行日志行首offset
- 补数据:通过调用loggie原生的文件数据读取接口获取(指定offset和读取的size)。
计算需要的所有metric都附带在loggie采集的的日志元数据中。
成果:简单易用的平台化展示与补数据。
4.3 日志延迟
我们计算了日志在整个链路环节中的延迟情况,重点日志还会根据延迟情况及时的报警:
端到端的延迟计算意义:
- 帮助我们审视分析链路机器资源瓶颈。
- 指导大促期间的合理扩缩容。
- 规划未来增长的日志所需的容量。
4.4 日志质量
由于日志采集后,可能被后续的业务监控报警以及大数据数仓处理分析计算应用,因此日志的质量变得愈发重要。那如何衡量日志质量呢?本质上,日志从非结构化数据被采集后经过一系列处理计算变成了结构化数据,因此我们在日志结构化的过程中定义了日志质量分的计算:
- 日志切分(字段提取)处理:切分失败扣1分
- 字段不存在扣1分
- 类型转换处理:转换失败扣1分
- 字段约束失败扣1分
效果:
日志质量治理的意义:
- 量化日志质量,持续推动服务进化。
- 为下游日志的处理极大提高效率。
- 提高了关键日志的准确数。
4.5 分析应用
基于采集的日志数据我们做2个重量级的应用,使得日志的重要程度上升了一个维度,让日志真正拥有强烈的业务含义。
4.5.1 业务实时监控
考虑以下需求:
- 实时监控主站交易是否下跌
- 实时监控主站UV访问
- 实时监控主站的加购、下单情况
- 实时监控风控的拦截情况
- 实时监控服务的qps、异常情况
- ...
通常实现这些需求需要不小的开发周期,但是基于业务实时监控,只需要花5-10分钟的时间在平台上配置即可展示与报警:
核心原理:
- 打印对应的业务日志
- 在平台配置采集对应的日志
- 在平台配置对应日志的数据模型以及对应指标的计算逻辑(支持明细、聚合等丰富计算)
- 配置报警规则
成果:
大大降低了业务服务对关键业务过程的监控报警的开发成本,通过配置即可拥有业务实时监控报警的能力。
4.5.2 业务全链路监控
当前微服务盛行,用户的一个操作可能涉及底下多个微服务调用,考虑以下问题:
- 如何从业务全局视角观察对应服务的运行情况?
- 如何从业务链路视角发现上下游占用比例和依赖?
业务全链路监控应运而生:
以交易链路为例,从首页->搜索&推荐->商详->加购->下单->支付这个主链路以及辐射出来的几条支链路,整体的流量是怎么样的?调用qps是怎么样的?平均rt是什么样的?错误情况如何?通过业务全链路监控一目了然。
核心实现原理:
- 严选所有服务默认开启访问日志,默认采集所有服务的访问日志
- 在平台配置业务链路流程对应的服务以及接口
- 配置关键链路节点的监控报警规则
- 平台一键生成全链路实时监控报警
业务全链路实时监控的意义非凡,使得我们能够站在更高的维度,以全局视角审视整个业务流程下的服务调用情况,及时发现链路中的薄弱环节以及异常情况,帮助我们优化服务依赖,提升服务稳定性。
5. 结语
严选基于loggie的日志平台化建设,我们一方面在满足基于日志的问题分析诊断这一基础需求之余,进一步了提升日志质量、问题排查效率、全链路可观测可运维能力。另一方面,我们扩展能力与丰富应用场景,只需要简单配置就使得日志拥有强烈的业务含义与监控语义,使得我们能够站在更高的维度审视&监控业务链路中的异常,提前发现链路服务与资源问题。
作者:严选技术产品团队
来源:新一代云原生日志架构 - Loggie的设计与实践
了解更多网易技术产品
新一代云原生日志架构 - Loggie的设计与实践
皮俑是什么做成的?皮俑为什么救吴邪?
擅长画虎的画家是?擅长画虎的十大画家
神奇宝贝的观看顺序是什么?神奇宝贝的大结局是什么?
用上半固态电池!赛力斯发布海外新车型SERES 5:订单超2万
国产骄傲!中国年度十大畅销新能源车型:外资仅有特斯拉上榜
每日播报!游客滑雪失控致女生被撞倒后抽搐 医生:危险数极高、常见骨折
拿老款忽悠当新款卖 女车主退车被日系4S店老板辱骂
风调雨顺的意思是什么?风调雨顺的下联是什么?
小年为什么分南方和北方?小年为什么吃麻糖?
液晶显示器故障怎么解决?液晶显示器故障维修大全
qq空间打不开是什么原因?qq空间打不开怎么办?
cf怎么鬼跳没声音?cf鬼跳教程按键手法
土豆网怎么下载?土豆网怎么没有了?
环球热讯:1.PyQt5【窗口组件】小部件-QWidgt
阿里云邮箱怎么注册?阿里云邮箱怎么发送邮件?
女粉丝入手小米13 曾是十年资深果粉:被小米和雷军打动
当前滚动:二手车商要“气晕”!美国已有特斯拉新车价格低于二手车
低调的江西 盛产新能源富豪
2023央视春晚主持人阵容公布:首次迎来双90后
每日头条!衡山雾凇火了 多名游客滑冰下山很危险 景区调整开放时间
Ansible 学习笔记 - 批量巡检站点 URL 状态
世界观速讯丨node和npm如何升级版本
世界信息:把车变成船 比亚迪真会玩
天天报道:《中国奇谭》值得这么夸吗?
【世界播资讯】首搭麒麟电池 全球MPV续航最长!极氪009开启交付
三星Galaxy S23系列售价泄露:12GB+1TB版本超1万元
行驶1900多米!祝融号已在火星留下近4000个“中”字
C#代码整洁之道读后总结与感想
【快播报】私家车与油罐车高速并排堵路 货车司机看不下去 主动让路
环球消息!男子开车时被激光笔照射 瞬间眼前一片黑!专家称可能会永久损伤
世界观点:小编要失业了 美国科技媒体CNET用AI写文章:读者完全没发现
天天快看点丨马斯克回应车主维权:涨价也没人给我补差价 就这吧
视焦点讯!太傲慢!微信更新内容仅“九个字” 网友:怕大家知道更新了什么吗?
全球速看:油车也有续航焦虑 高速服务区爆满:排队一小时 加油限量100元
消息!小米上架抗原试剂盒:19.9元5个 现货供应
《三体》电视剧开播 广受好评 网友:没看过原著的也被深深吸引
世界最新:2023春节档预售票房破亿:《流浪地球2》排片率第一 吴京/刘德华主演
世界今日报丨Recyclerview列表视频自动播放方案
观天下!QSAN A Quantum-probability based Signed Attention Network for Explainable Fa
剧版《三体》高热开播:收视率蹿升至第一、破腾讯视频记录
尼泊尔客机坠毁:机上72人不幸全部遇难
AMD显卡的尴尬!一个月了 两大品牌仍然没有RX 7900
世界新动态:中国首次全尺寸超导航行试验成功!时速50公里、冲击1000公里
全球信息:AJAX使用记录
环球热头条丨糖醋排骨里竟然藏着"量子点"!它咋这么厉害?
天天观天下!2个大厂 100亿级 超大流量 红包 架构方案
世界视点!CodeQL练习1
实时:day02-Spring基本介绍02
【天天速看料】Redis——数据类型
每日焦点!小朋友把山东的雪带回福建:半路化了 崩溃大哭
天天日报丨尼泊尔客机坠毁遇难人数升至68人:没有中国公民
环球快资讯:golang 为图片加水印
mysql--时间
环球焦点!王思聪打人后行政拘留为什么能暂缓执行?罗翔科普
天天观速讯丨AMD悄悄公布31个CPU漏洞:4个极危险、Zen4高枕无忧
今日热文:Nginx面试题(史上最全 + 持续更新)
当前快讯:Atcoder Regular Contest ARC 153 A B C D 题解
焦点关注:PhotoEnhancer人工智能一键修复老照片,老照片修复,图像去噪
男子花32万买比亚迪海豹 内心崩溃:汽配城都没这么难看
焦点要闻:节能版酷睿i9-13900T现身:35W战平12900K
观天下!腾讯开出48人惩治名单 马化腾曾称内部贪腐“触目惊心”
Phi的反函数
【环球热闻】110度高烧不退!AMD RX 7900 XTX退换货率高达11%
为啥北方二十三过小年 南方却是二十四?和康熙乾隆有关
观察:无广告一年免费用!通信UOS家庭版22.0开始推送
111111
男子买898元零食P图付款 被抓现行:实际支付了1分钱
天天通讯!基于传奇车型AE86!丰田推出两款新能源概念改装车
CF构造题1600-1800(2)
女子骑电动车载两人闯红灯被撞 被判全责 网友:这才是公正
苹果回应iPhone车祸监测误报频发:正收集相关反馈
《新·福音战士剧场版:终》国内海报抄袭!竹也文化官方布道歉声明
Python开发的常用组件
每日观察!推荐一本正在看的书
环球今热点:几十年数学难题被谷歌研究员意外突破 当年差点被导师赶出门
B站2022百大UP主出炉:手工耿入选 走向世界的手工匠人
天天亮点!稳居春节档票房前三:《流浪地球2》官方揭秘太空电梯创作思路
世界讯息:12月新能源销量排名出炉:比亚迪吉利长安强攻 特斯拉扛不住了?
【全球独家】读编程与类型系统笔记08_面向对象变成的元素
观速讯丨长征第462发!我国成功发射一箭14星:“共享”火箭了解下
国内《新·福音战士剧场版:终》限定海报被指抄袭 官方正在联系画师确认
无法恢复!微软杀软Defender误删开始菜单/任务栏捷方式
天天观点:排量830cc 马自达转子发动机正式回归!首车发布
天天亮点!雨雪降温重心转移至南方 大范围雨雪天气明日结束
天天短讯!一步一步实现若依框架--2.3防止重复提交 repeat_submit
焦点快播:2022一年 特斯拉车主为地球节省20亿美元油费
每日消息!全球首现!四川一地发现新物种:长得特别好看
每日动态!《三体》剧版今日CCTV8、腾讯视频全网首播:会员提前看三集
天天观点:使用ActiveMQ Artemis进行重连
环球热议:千万别在有WiFi的房间里摆这种姿势
焦点观察:微软收购动视暴雪更难了!NVIDIA出手阻挠
环球观焦点:联名中国第一科幻IP!荣耀80 Pro《三体》动画定制版来了:限量卖
【全球独家】淘汰所有老款!新一代PS5主机年内到来:不向下兼容
环球热门:无磷配方 低泡易漂 绿伞洗衣液6斤17.9元
每日焦点!碰撞测试能拿一星 创维是造了什么“神仙”车
全球播报:中国科幻顶级IP首登荧屏!《三体》电视剧今晚央视、腾讯视频首播
中国制造多牛?世界最先进工厂:我们占了近一半
今日热文:堪比抢iPhone 泰国车主凌晨排队买!比亚迪泰国发运破万台
世界快报:微信全新拜年红包上线!支持语音祝福录制 动画效果太萌了