https://www.async.net.cn/ https://www.async.net.cn/
首页
  • 首页
  • 登录
搜索历史 清空
写文章

登录

账号密码登录
扫码登录
扫码登录
请使用手机扫码登录
注册登录即表示同意用户协议和隐私政策
简报
推荐 最新
Sora 工作原理:训练历程、技术思路与模型能力对比
南京雨花吴彦祖 2024-3-10

Sora 工作原理:训练历程、技术思路与模型能力对比

Sora,由 OpenAI 推出,是一款革命性的文本到视频生成模型,它在人工智能领域开辟了新的可能。本文将深入探讨 Sora 的训练历程、技术思路,并与其他类似模型的能力进行对比,以揭示其独特的工作原...

2073 27 0
测试
Sora 工作原理:训练历程、技术思路与模型能力对比
03日10日,星期日,在这里每天60秒读懂世界!
南京雨花吴彦祖 2024-3-10

03日10日,星期日,在这里每天60秒读懂世界!

1、住建部部长:严重资不抵债,失去经营能力的房企,该破产破产;人社部:社保卡将逐步实现“全国一卡通“;2、教育部:着力解决小眼镜、小胖墩和学生心理健康问题,保障每天1小时体育锻炼和充足的课间活动;3、一男子从云南飞到杭州后,拿榔头抢劫珠宝店,被抓时叫嚣“我不是中国人““我有外交豁免权“,警方:疑有精神疾病,待鉴定;4、9日晚,新疆阿克苏地区乌什县发生3.9级地震,震源深度10千米;5、9日,境内足金首饰零售价继续飙升,已接近665元/克;云南丽江:举报导游强迫消费等或可获奖两千元;6、9日,青岛飞哈尔滨航班起飞前,一男子好奇要拉飞机逃生舱门,空姐眼疾手快按住,目击者:该男子喝了酒,称想要看舱门里有啥,最后写了证明,没下飞机;7、台积电美国芯片厂据悉将获超50亿美元政府补贴用于在美国建厂;周五美股市场,英伟达遭遇重挫市值一夜蒸发9234亿元,盘中“跳水“超10%;8、韩媒:韩国在自日本静冈县进口糖果中检测出少量放射性物质铯;9、外媒:拜登声称如获通过会签署针对TikTok法案。特朗普:反对禁令,相比TikTok,脸书才是美国人的敌人;10、当地8日,美联航一架波音737 Max 8客机在休斯敦降落时冲出跑道;11、外媒:美国对加沙援助物资空投失误,降落伞未打开,包裹高速砸向平民致5死10伤。美方:不是美空投导致;12、以媒:拜登在年度国情咨文演讲后,在台下被麦克风录下与议员对话,称自己和内塔尼亚胡来到“摊牌时刻“;13、俄军:击落乌一架米格-29战机、197架无人机!乌总理:未来两月将获欧盟60亿欧元援助;美媒:美国F-35A战机被曝已获携带核武器认证,美军方剑指俄罗斯;14、乌媒:乌总统办公室消息人士透露,泽连斯基正考虑解雇外长库列巴,原因是“总体上对外交工作不满意“;15、波兰外长:在乌部署北约部队并不是什么“不可思议的事“,赞赏法国总统马克龙的倡议;俄媒:俄国防部发布视频,称摧毁乌军部署在顿涅茨克S-300防空系统;【微语】你的生活,不需要比别人过得好,但一定要比以前的你过得好!

3474 27 0
03日09日,星期六,在这里每天60秒读懂世界!
南京雨花吴彦祖 2024-3-9

03日09日,星期六,在这里每天60秒读懂世界!

1、最高检披露案例:4名狱警殴打服刑人员致死获刑,编造其因病死亡,用6万摆平家属,真相被隐瞒十年;2、金价继续飙升破655元,不少人开始卖出变现。专家:短期内建议谨慎投资;3、GLP-1“减肥神药“入华在即!诺和诺德中国确认减肥版司美格鲁肽今年将获批;4、广州多区通告严禁电动自行车违规停放充电,最高罚款5万;5、台防务部负责人邱国正称:台军已改变“第一击“界定,实体逾越就击落。岛内网友:打嘴炮;6、立陶宛情报部:不应排除中国干涉立大选的可能性。外交部:我们没兴趣;外媒:印度在中印边境新部署1万名士兵。外交部:不利中印边境和平安宁;7、加拿大政府赔偿在华被捕的加间谍迈克尔700万加元,专家:加政府当初指责中国“任意拘押“,现在打了自己的脸;8、外媒:美众议院一委员会50比0通过法案,要求字节跳动165天内剥离TikTok,TikTok表示强烈反对,并动员用户进行反击;9、日本知名漫画家鸟山明于3月1日因病去世,终年68岁,曾说没有成龙的《醉拳》就没有《龙珠》,外交部:深切哀悼,他的作品在中国深受欢迎;10、消息称苹果首款折叠屏iPhone将于2026年发布,承诺超薄与无痕折叠体验;11、当地7日,美联航一波音777-200飞机轮胎在空中掉落,随后改道迫降,近期已发生多次安全问题;12、外媒:57岁泰森宣布重返拳台,将在7月对阵27岁拳手,出场费或将超20亿;比特币突破70000美元/枚,日内涨3.93%,创历史新高;13、加拿大渥太华发生持刀凶杀案:斯里兰卡裔,一家六口5死1伤。总理特鲁多:感到惊骇;美国费城发生大规模枪案:3名枪手向一群学生开了30多枪,共有8名高中生受伤,枪手仍在逃;14、美媒爆:乌克兰正在非洲国家苏丹“与俄势力作战“,目的是让莫斯科付出更大代价。俄乌暂未做出回应;伊拉克:土耳其8日空袭伊北部,造成至少两平民死亡;15、美驻俄使馆警告:极端分子将计划袭击莫斯科,敦促美公民避免前往人群密集场所。俄安全部门:挫败了“伊斯兰国“阿富汗分支的一个小组在犹太教堂发动枪击的计划;【微语】别高估你和任何人的关系,也别对任何人期望太高,期待越少,心情越好。

1916 27 0
lattics ——让人爱上写作的可视化笔记软件
南京雨花吴彦祖 2024-3-8

lattics ——让人爱上写作的可视化笔记软件

说到笔记写作工具的时候,你会想到什么?是笔记工具还是写作工具? 在市场高度成熟的今天,笔记和写作软件都已经进化出相对完整的两种形态: 以 obsidian、notion、飞书、语雀等为主的知识管理软件,以及 Ulysses、Typora、MWeb等为主的沉浸式写作体验软件。 所以在初次接触名为「笔记写作软件」的 Lattics 时,我的第一反应是疑惑,这究竟是一个笔记软件,还是一个写作软件?「类脑式」又是什么意思? ![]() lattics 宣传页 很难否认,Lattics 的设计理念没有受到卡片笔记的影响:无论是卡片复用的概念、可视化写作、还是双向链接的引用,你都能在其中找到卡片笔记的影子。 使用之前,我内心是有些抗拒的。这些年「卡片笔记」「双向链接」等概念大火,不乏跟风炒作之辈,但真正能做好的屈指可数。 直到近一步了解他们公司,之前曾做出 Zine、Varlens 这两款小众精品后,我心中的疑虑才得以放下,开始上手体验这款软件。 要理解 lattics 的使用逻辑并不难,它的使用手册甚至比 flomo 还要简洁,只有 2 个层级,花 15-20 分钟就能浏览完。 比起 notion 和 Obsidian 动辄上百页的说明文档,lattics 不折腾,简洁优美,符合直觉,是一款上手就能使用的轻量应用,很多功能不需要看文档,也能凭直觉摸索出来。 在兼具了简洁和实用的同时,lattics 还尽可能做到了功能完备。它并不是 Notion 或 Obsidian 那样功能多样的笔记应用,lattics 的定位更像是一款带有「笔记管理」功能的写作软件。 关于 Lattics 的功能介绍网上已经有不少文章了,就不在此赘述。 在我看来,我们早已迈过了「不知道这个按钮有什么功能」的阶段,更多是不知道「如何应用到实际场景中」。 所以接下来,为了让大家方便理解 Lattics 如何使用,我会演示自己是如何从 0 到 1,运用 Lattics 写完一篇测评文章的。 使用体验 打开软件,是 mac 最为经典的 3 段式分布(产品也支持windows,这里仅以 mac 端为例) ![]() 图1 实际上配合「双文对照」和「卡片库」功能最长可以延展到 5 栏(卡片库功能将在后文介绍) ![]() 图2 图 1 从左到右依次为「项目」——「文章」——编辑区。 项目区域和文章区域都可以新建子文件夹,实现无限嵌套。 理论上,你可以放无穷多的内容层级,将 lattics 打造成一个全知全能的知识库或写作素材库。 当然,为了避免过于复杂的结构混乱,建议 2 个层级就已经足够。 在「文章」一栏,新建的项目都会被称为「文章」,以下皆会用此代称。 ![]() 在「项目」一栏,我个人的写作习惯是放置不同的写作主题,如果你跟我一样,写作跨度不大,将其作为一个单独的写作项目就好。 比如我要写一篇 lattics 的软件测评,就会在此新建一个「lattics 评测」的项目文件夹,接下来关于 lattics 的所有资料和写作草稿都会放在这个文件夹里。 ![]() 在还没有想好大纲的时候,我往往是想到什么就写什么,不用考虑结构和大纲之间的关系,先让一部分创意释放出来。这也是卡片式写作最显著的特点。 我们无需从一张白纸开始写作,而是先构思已有的想法,让一个想法把我们带到具体的问题中,从而散发出另一个想法。 在写作的时候,很多灵感或结构都是在写作中萌生出来的,而不是提前规划好,这点会在后面详细说。 在第二栏目,就可以开始构思你的一些主题,这时候可以打开 lattics 中的思维导图视图,开始构思。 ![]() 要注意的是,思维导图更像一个大纲,跟第二栏目的内容是同步的。 你只能在这里组织大纲的主题,比如说 lattics 大纲的主题就包括「笔记评测」「使用主体」「适用人群」「实用建议」等等。 你在思维导图中做的任何修改都只会影响第二栏目的标题或排序,对应的内容需要回到编辑器,或是在接下来的「鸟瞰视图」中才能撰写。 因为当时还没想好大纲,所以我是按照临时的想法,先按不同的主题写好一个次序,简单排列在「文章」里。然后想到什么就开始在对应的主题中填充内容。 比如说,在我还不了解软件的操作逻辑时,我知道 lattics 的设计理念是类脑式写作。 于是我在里面新建了一篇名为「写作理念」的「文章」,开始把我知道的内容写下来; 没过多久,我就会由卡片式的写作理念想到软件的适用人群,于是再新建一篇「适用场景和人群」的「文章」。 就像上面这样,每当有新的主题或内容出现,我就会新建一篇对应的「文章」,直到整个文章的结构变得完整。 如果你一开始就有比较合适的大纲,也可以像我这样切分成不同的「文章」,依次填充内容,每当有新的想法就再填入内容,直到文章的结构自然地清晰起来。 ![]() 内容填充之后 这种方式下写作会变得轻松,可以轻易积累数千字的初稿,对沉浸式写作、提升信心非常有效。坏处是某些主题偏离太远不容易发现,毕竟每个「文章」板块各自独立,你不太容易发现某个主题所占的篇幅。 不过我想,写得太多对于大多数人来说应该是个幸福的烦恼,所以就培养写作兴趣这一块,我是持肯定态度的。 当然,卡片笔记并非没有缺点,当撰写卡片的时候,如果不能明确其属于什么主题,该怎么办?如果写得太多,该怎么整理? 这也是卡片笔记写作的最大弊端:「写文一时爽,整理火葬场」。这时候传统写作软件的弊端会显现出来,而 lattics 提供了一种相当优雅的解决办法:调出右侧的「卡片库」,点击「新建卡片」,将内容填充在其中。 卡片库的展现形式是固定一栏的,具有独立的滚轮,相当于一个独立的文件夹,你可以完整地看到右侧的所有卡片组。 ![]() 这意味着无论你现在在写什么主题的内容,都可以先将其储存在右侧的卡片库中,等看到合适的上下文再将对应的卡片插到文中。 你可以引用卡片或修改卡片内容,修改的内容会在所有引用卡片的地方同步,也可以选择不同步(取消引用),让卡片以固定形式存在于某个特定的语境中。 当你建立的卡片足够多,通过右上角的「搜索」按钮,筛选需要的卡片,结合「标签」功能可以将大多数的内容展示出来; 同时,要展现的卡片栏也可以通过「项目」和「标签」控制,做到只展示你想展示的卡片主题,针对某个具体的项目进行相关卡片的展示,而不会让其他不相关的卡片内容扰乱视野。 ![]() lattics 自带的标签整理功能将这种优势进一步放大,点击特定的标签就可以展现下面的所有卡片。 还可以拖拽调整标签层级。所有的标签都汇集在左下角,你可以在这里新建标签,或改变颜色、命名和层级等,便于快速查看。 ![]() 这点真的很实用,也是我觉得团队特别下功夫的地方,他们将卡片写作的细节处理得很好。 这种灵活的储存方式极大地缓解了分类卡片内容的压力,让卡片式写作的实现不再局限于一种写作概念,而是真正通过软件的交互方式将其落地,打通卡片笔记写作的阻碍。 Lattics 也可以从其他的笔记、写作、读书应用中导入卡片,比如 Markdown、TXT、Obsidian、Ulysses、苹果备忘录、Kindle 笔记、微信读书笔记、Flomo 浮墨笔记等。导入的内容默认会作为卡片。 卡片笔记真正的好处在于它更加符合大脑的思考习惯,这也是 Lattics 被称为「类脑式笔记」的原因。 《思考,快与慢》的作者丹尼尔·卡尼曼曾说过: 我们大脑不擅长记忆,而是擅长联想和发散,甚至能对毫无相关的两件事情进行逻辑自洽的解释。 灵感的出现是随机的,当你去想某个特定主题的内容,往往没什么好点子。 当你离开正襟危坐的书桌时,灵感便会不期而遇,洗澡、散步、通勤上下班的时候,很多点子会自己冒出来,你需要及时捕捉它们,做好记录和整理。 得益于卡片笔记同样发散和碎片化的创作方式,大脑无需记忆,就可以通过有限的信息搭建更多发散和联想的思维。 当主题形成一个整体轮廓的时候,就可以开始调整「文章」位置了。 你可以在左下角的圈圈处找到当前项目的字数总和,然后点开思维导图,开始移动卡片,将不同主题的内容串连起来。 在鸟瞰视图中,可以进行更细致的段落排布,这也是趣味性最强的一点,在移动的过程中自己也可以思考不同段落之间的联系。 ![]() 通常我是结合主题一起整理的,当文章段落基本清晰,回到编辑界面,点击第二栏下的「顺序阅读」按钮。 在这里将不同段落连成通顺的长文,可以一次性预览项目下的章节。不过记得要将打字机模式关掉,否则空格会很大。 ![]() 可以在这里检查整个文章的逻辑是否通顺,并进行一些字句的修改,最后右上角导出全文即可。 最后再来说说我个人的理解和感受。 在我看来,lattics 要打造的,是一种基于卡片笔记,或者说基于「类脑式」笔记的写作编辑器,它的本质更偏向写作,而非笔记。 要理解这样一款独特编辑器的设计理念,我们需要先了解传统写作模式中存在哪些难点。 传统写作的难点 在我看来,传统的线性写作模式很难开展,主要有 3 个原因。 第一,不仅列出大纲是一个技术活,每次面对空白的屏幕,都会产生一种无形的压力,让人对写作产生畏难情绪。 第二,写作所需要的洞见无法明确地预先界定。 我们一开始的想法通常是非常模糊的,思路在研究过程中才变得越来越清晰。 如果遵循线性的思考逻辑,我们很容易受限于有限的信息,给出不完整、甚至是错误的大纲,让写作思路在一开始就跑偏。 第三,在构思一篇文章的途中,我们的大脑往往会冒出很多跟主题无关的点子,大多数的灵感,往往不是在解决某个特定问题时冒出来的,而是在很多不同的场合和地点出现。 Lattics 如何解决这些难点? 第一,lattics 通过卡片化的写作方式降低输入难度,你只需要将目标放在卡片上,无需考虑大纲和整体的行文顺序。 当一张又一张短小的卡片写完,放在右侧卡片库的时候,在心理上就会给人很多信心,让人能将写作这件事「做下去」 第二,lattics 灵活的组合方式,可以方便地整理你在思考中产生的任何点子。 你无需来回移动,或是考虑不同主题之间的从属关系。而是通过灵活的卡片库和「思维导图」及时调整主题顺序、增删内容,实现逻辑的整理,让结构自然生长。 第三,得益于卡片库的展示方式,在写作或查询资料中查询的任何点子,都可以在 lattics 中保存下来,通过标签和搜索功能进行过滤和展示。 既不会扰乱写作思路,也不会错失灵感,很好地利用了大脑喜欢发散想法的特点。 开放自己的选择权,不要把自己限制在最初的想法里。写作的灵感和方向往往会随着写作的进程发生改变,那是正常的。正如卢曼所说:不写,就无法思考。 写作的过程是一个深入思考的过程,其中有很多的洞见只有在写作(思考)的过程中才会获得,那是我们在最初的想法预设中考虑不到的。 写作更多的是一种顺藤摸瓜似的行为,现有一个点,然后顺出另一个点,自下而上地写作,让结构自然生长。 lattics 是将想法转变为思考的粘合剂,串联了笔记跟写作,这是我觉得它与市面上所有笔记写作软件都不同的地方。 它可能不是笔记或写作软件中最好的那个,但它是唯一一个将卡片笔记和写作融合的最好、最完整的一个笔记应用。 我之前曾介绍过一个白板软件 GUGA ,在文章的末尾,我称其为碎片化多媒体信息的集成利器。 lattics 完成了从卡片式笔记到输出的最后一块拼图,它满足了我对一个笔记写作软件的幻想,是我期待已久的写作方式。 现在我可以宣布,卡片式笔记写作的最佳食用方式,就是 flomo + lattics ,一个完成输入,一个完成输出,各司其职,各取所长。 适用场景和人群 如果你想要开始写作,或是想要培养写作、实践卡片笔记的写作方法,我都会推荐你使用 Lattics 。 相比于 Notion 和 Obsidian 这种需要大量折腾的软件,Lattics 更加轻量化,压力更小,整个写作过程也更有趣味性,很容易在写作过程中发现新的东西。 我自己的这篇文章就是在 Lattics 中写作的,一开始面对白纸一样的空白,我的方法就是尝试构建一些简单的大纲。 然后想到什么就开始构建对应的主题,再由一个主题把我引导到另一个主题上,直到整个文章的结构慢慢变得完整。 ![]() 因为工作忙碌,我已经很久没有正儿八经地写过文章了,但在使用 Lattics 一段时间后,我很快就找回了写作的乐趣。 不仅是因为软件本身的设计足够有趣,更重要的是在这一套软件设计背后所传达的写作理念:自下而上地写作,让结构自然生长。 这很好地弥补了传统线性写作的不足,也让写作真正得心应手,不被传统的工具所掣肘。 之前很长一段时间,我都是用 typora 这种更“正统”的 写作工具来完成工作的。 但 Lattics 就像一个打破常规的学生,用不寻常的手段跳出传统的思维框架,重新定义写作的方式,激发出我在传统写作模式下无法触及的创意和效率,这是十分有意义的。 建议 当然,lattics 目前也还存在一些不足,以下是我个人的意见反馈,也给还没有用过、或正在观望的朋友一些参考。 Mac端「打字机模式」下,打字会抖动,会影响使用体验。 目前还没有云端服务,但官方承诺会更新 希望有多种展现卡片的方式,比如画廊视图、看板视图、时间线视图等,目前展现卡片的方式还是有点单一。 希望右边的卡片可以自动显示出在当前项目是否被引用的功能,以及可以选择是否隐藏已被引用的卡片。这样做的目的是为了将已经被引用的多余的卡片删去,减少自己找卡片的时间。 虽然支持 flomo 导入 lattics ,但目前的途径只有导入所有的笔记,每次都要重新导一遍,如果能支持勾选导入的笔记内容就好了。 在鸟瞰视图中,激活了卡片写作区域后,这个区域是无法移动的,这点在修改文档时非常麻烦,希望官方可以加入可移动的功能 希望加入「专注模式」的快捷键,有时候需要到其他卡片中寻找资料要退出专注模式,不太方便 原谅我提出了这么多的建议,显得软件似乎存在诸多不便似的。 但这是我深入体验后最直接的反馈,也恰恰是因为我对其抱以厚望,才会在很多细枝末节的事上斤斤计较。 但瑕不掩瑜,lattics 目前的表现已经相当成熟,放在一众写作软件中也是十分能打的存在。 写在结尾 以上我只是介绍了一个简单的功能流程,更多细节等待着大家自己去发现。 要进入官网的话,可以在谷歌或百度中搜索lattics,微软引擎目前还搜索不到,大家想要体验,可以走这个官网通道: https://lattics.zineapi.com/zh-CN 在我看来, lattics 不止是一个写作软件,更是一种实用有效的写作理念,一种更适合大脑的创作方式,希望它的价值可以被更多人认识到,在这里也祝 Lattics 越办越好。

2433 27 0
拒绝宕机!一文详解分布式限流方案(附代码实现)
南京雨花吴彦祖 2024-3-8

拒绝宕机!一文详解分布式限流方案(附代码实现)

👉导读 随着微服务的流行,服务之间的依赖性和调用关系变得越来越复杂,服务的稳定性变得尤为重要。业务场景中经常会涉及到瞬时流量冲击,可能会导致请求响应超时,甚至服务器被压垮、宕机不可用。出于对系统本身和上下游服务的保护,我们通常会对请求进行限流处理,快速拒绝超出配置上限的请求,保证系统或上下游服务系统的稳定。合理策略能有效应对流量冲击,确保系统可用性和性能。本文详细介绍了几种限流算法,比较各个算法的优缺点,给出了限流算法选型的一些建议,同时对业务上常用的分布式限流也提出一些解决方案。 一个好的限流设计必须要考虑到业务的特性和需求,同时具备以下六点: 多级限流:除了主备复制的限流服务,可以考虑实现多级限流策略。例如,可以在应用层、服务层和数据层都设置限流,这样可以更好地防止系统过载。动态阈值调整:我们可以根据系统的实时负载情况动态调整限流策略。例如,当系统负载较低时,我们可以放宽限流策略;当系统负载较高时,我们可以收紧限流策略。灵活维度:限流策略应该能够根据不同的业务场景进行调整。除了接口,设备,ip,账户 id 等维度外,我们还可以考虑更细粒度的限流。例如,我们可以根据用户的行为模式进行限流,这样可以更好地防止恶意用户的攻击。解耦性:限流应该作为一个基础服务,与具体的业务逻辑分离。这样,当业务逻辑发生变化时,不需要修改限流服务的代码,只需要调整限流策略即可。容错性:限流服务应该具有高可用性,但是如果出现问题,业务应该有备选方案(熔断、降级)。这可能包括使用备用的限流服务,或者根据业务的敏感性决定是否放行请求。监控和报警:对限流策略应进行实时监控,并设置报警机制。当限流策略触发时,可立即收到报警,以便我们可以及时地处理问题。 01、背景 保护高并发服务稳定主要有三把利器:缓存、降级和限流。 缓存:缓存是一种提高数据读取性能的技术,通过在内存中存储经常访问的数据,可以减少对数据库或者其他存储系统的访问,从而提高系统的响应速度。缓存可以应用在多个层次,例如浏览器缓存、CDN 缓存、反向代理缓存、应用缓存等。降级:降级是在系统压力过大或者部分服务不可用的情况下,暂时关闭一些非核心的服务,以保证核心服务的正常运行。降级可以在多个层次进行,例如页面降级、功能降级、服务降级等。限流:限流是一种控制系统处理请求的速率的技术,以防止系统过载。限流可以通过多种算法实现,例如令牌桶算法、漏桶算法等。 这三把“利器”各有其特点,通常会结合使用,以达到最佳的效果。例如,可以通过缓存来减少数据库的访问,通过降级来应对系统故障,通过限流来防止系统过载。在设计高并发系统时,需要根据系统的具体需求和特点,合理地使用这些技术。接下来本文会主要介绍一些业界常用的限流方法。 02、限流知识概述 限流是一种对请求或并发数进行限制的关键技术手段,旨在保障系统的正常运行。当服务资源有限、处理能力有限时,限流可以对调用服务的上游请求进行限制,以防止自身服务因资源耗尽而停止服务。 在限流中,有两个重要的概念需要了解: 阈值:指在单位时间内允许的请求量。例如,将 QPS(每秒请求数)限制为500,表示在1秒内最多接受500次请求。通过设置合适的阈值,可以控制系统的负载,避免过多的请求导致系统崩溃或性能下降。拒绝策略:用于处理超过阈值的请求的策略。常见的拒绝策略包括直接拒绝、排队等待等。直接拒绝会立即拒绝超过阈值的请求,而排队等待则将请求放入队列中,按照一定的规则进行处理。选择合适的拒绝策略可以平衡系统的稳定性和用户体验。 通过合理设置阈值和选择适当的拒绝策略,限流技术可以帮助系统应对突发的请求量激增、恶意用户访问或请求频率过高的情况,保障系统的稳定性和可用性。限流方案根据限流范围,可分为 单机限流和分布式限流;其中单机限流依据算法,又可分为 固定窗口、滑动窗口、漏桶和令牌桶限流等常见四种。本文将对上述限流方案进行详细介绍。 03、限流基本算法 3.1 固定窗口限流 3.1.1 算法介绍 固定窗口算法是一种简单直观的限流算法,其原理是将时间划分为固定大小的窗口,在每个窗口内限制请求的数量或速率。具体实现时,可以使用一个计数器来记录当前窗口内的请求数,并与预设的阈值进行比较。固定窗口算法的原理如下: 将时间划分固定大小窗口,例如每秒一个窗口。在每个窗口内,记录请求的数量。当有请求到达时,将请求计数加一。如果请求计数超过了预设的阈值(比如3个请求),拒绝该请求。窗口结束后,重置请求计数。 3.1.2 代码实现 type FixedWindowLimiter struct { windowSize time.Duration // 窗口大小 maxRequests int // 最大请求数 requests int // 当前窗口内的请求数 lastReset int64 // 上次窗口重置时间(秒级时间戳) resetMutex sync.Mutex // 重置锁 } func NewFixedWindowLimiter(windowSize time.Duration, maxRequests int) *FixedWindowLimiter { return &FixedWindowLimiter{ windowSize: windowSize, maxRequests: maxRequests, lastReset: time.Now().Unix(), } } func (limiter *FixedWindowLimiter) AllowRequest() bool { limiter.resetMutex.Lock() defer limiter.resetMutex.Unlock() // 检查是否需要重置窗口 if time.Now().Unix()-limiter.lastReset >= int64(limiter.windowSize.Seconds()) { limiter.requests = 0 limiter.lastReset = time.Now().Unix() } // 检查请求数是否超过阈值 if limiter.requests >= limiter.maxRequests { return false } limiter.requests++ return true } func main() { limiter := NewFixedWindowLimiter(1*time.Second, 3) // 每秒最多允许3个请求 for i := 0; i 执行结果: 3.1.3 优缺点 优点: 实现简单:固定窗口算法的实现相对简单,易于理解和部署。稳定性较高:对于突发请求能够较好地限制和控制,稳定性较高。易于实现速率控制:固定窗口算法可以很容易地限制请求的速率,例如每秒最多允许多少个请求。 缺点: 请求分布不均匀:固定窗口算法中,窗口内的请求分布可能不均匀,导致某些窗口内的请求数量超过阈值,而其他窗口内的请求较少。无法应对突发流量:固定窗口算法的窗口大小是固定的,无法灵活地应对突发流量。请求的不公平性:窗口结束时的请求计数重置可能导致请求的不公平性。例如,在窗口结束前的最后一秒内,请求计数已满,而在窗口开始时的第一秒内,请求计数为零。 固定窗口算法适用于对请求速率有明确要求且流量相对稳定的场景,但对于突发流量和请求分布不均匀的情况,可能需要考虑其他更灵活的限流算法。 3.2 滑动窗口限流 3.2.1 算法介绍 上文已经说明当遇到时间窗口的临界突变时,固定窗口算法可能无法灵活地应对流量的变化。例如,在一个时间窗口结束时,如果突然出现大量请求,固定窗口算法可能会导致请求被拒绝,即使在下一个时间窗口内的请求并不多。这种情况下,我们需要一种更灵活的算法来应对突发流量和请求分布不均匀的情况—滑动窗口算法。该算法是对固定窗口算法的一种改进,它通过动态调整窗口的大小来更好地适应流量的变化。与固定窗口算法不同,滑动窗口算法可以在遇到下一个时间窗口之前调整窗口的大小,以便更好地控制请求的速率。算法的原理如下: 窗口大小:确定一个固定的窗口大小,例如1秒。请求计数:在窗口内,每次有请求到达时,将请求计数加1。限制条件:如果窗口内的请求计数超过了设定的阈值,即超过了允许的最大请求数,就拒绝该请求。窗口滑动:随着时间的推移,窗口会不断滑动,移除过期的请求计数,以保持窗口内的请求数在限制范围内。动态调整:在滑动窗口算法中,我们可以根据实际情况调整窗口的大小。当遇到下一个时间窗口之前,我们可以根据当前的流量情况来调整窗口的大小,以适应流量的变化。 3.2.2 代码实现 package main import ( "fmt" "sync" "time" ) type SlidingWindowLimiter struct { windowSize time.Duration // 窗口大小 maxRequests int // 最大请求数 requests []time.Time // 窗口内的请求时间 requestsLock sync.Mutex // 请求锁 } func NewSlidingWindowLimiter(windowSize time.Duration, maxRequests int) *SlidingWindowLimiter { return &SlidingWindowLimiter{ windowSize: windowSize, maxRequests: maxRequests, requests: make([]time.Time, 0), } } func (limiter *SlidingWindowLimiter) AllowRequest() bool { limiter.requestsLock.Lock() defer limiter.requestsLock.Unlock() // 移除过期的请求 currentTime := time.Now() for len(limiter.requests) > 0 && currentTime.Sub(limiter.requests[0]) > limiter.windowSize { limiter.requests = limiter.requests[1:] } // 检查请求数是否超过阈值 if len(limiter.requests) >= limiter.maxRequests { return false } limiter.requests = append(limiter.requests, currentTime) return true } func main() { limiter := NewSlidingWindowLimiter(500*time.Millisecond, 2) // 每秒最多允许4个请求 for i := 0; i 执行结果: 3.2.3 优缺点 优点: 灵活性:滑动窗口算法可以根据实际情况动态调整窗口的大小,以适应流量的变化。这种灵活性使得算法能够更好地应对突发流量和请求分布不均匀的情况。实时性:由于滑动窗口算法在每个时间窗口结束时都会进行窗口滑动,它能够更及时地响应流量的变化,提供更实时的限流效果。精度:相比于固定窗口算法,滑动窗口算法的颗粒度更小,可以提供更精确的限流控制。 缺点: 内存消耗:滑动窗口算法需要维护一个窗口内的请求时间列表,随着时间的推移,列表的长度会增长。这可能会导致较大的内存消耗,特别是在窗口大小较大或请求频率较高的情况下。算法复杂性:相比于简单的固定窗口算法,滑动窗口算法的实现较为复杂。它需要处理窗口滑动、请求计数和过期请求的移除等逻辑,可能需要更多的代码和计算开销。 从代码的角度可以发现,滑动窗口算法实际上是颗粒度更小的固定窗口算法,它可以在一定程度上提高限流的精度和实时性,并不能从根本上解决请求分布不均匀的问题。算法受限于窗口的大小和时间间隔,特别是在极端情况下,如突发流量过大或请求分布极不均匀的情况下,仍然可能导致限流不准确。因此,在实际应用中,要采用更复杂的算法或策略来进一步优化限流效果。 3.3 漏桶限流 3.3.1 算法介绍 尽管滑动窗口算法可以提供一定的限流效果,但它仍然受限于窗口的大小和时间间隔。在某些情况下,突发流量可能会导致窗口内的请求数超过限制。为了更好地平滑请求的流量,漏桶限流算法可以作为滑动窗口算法的改进。算法的原理很简单:它维护一个固定容量的漏桶,请求以不定的速率流入漏桶,而漏桶以固定的速率流出。如果请求到达时,漏桶已满,则会触发拒绝策略。可以从生产者-消费者模式去理解这个算法,请求充当生产者,每个请求就像一滴水,当请求到达时,它被放入一个队列(漏桶)中。而漏桶则充当消费者,以固定的速率从队列中消费请求,就像从桶底的孔洞中不断漏出水滴。消费的速率等于限流阈值,例如每秒处理2个请求,即500毫秒消费一个请求。漏桶的容量就像队列的容量,当请求堆积超过指定容量时,会触发拒绝策略,即新到达的请求将被丢弃或延迟处理。算法的实现如下: 漏桶容量:确定一个固定的漏桶容量,表示漏桶可以存储的最大请求数。漏桶速率:确定一个固定的漏桶速率,表示漏桶每秒可以处理的请求数。请求处理:当请求到达时,生产者将请求放入漏桶中。漏桶流出:漏桶以固定的速率从漏桶中消费请求,并处理这些请求。如果漏桶中有请求,则处理一个请求;如果漏桶为空,则不处理请求。请求丢弃或延迟:如果漏桶已满,即漏桶中的请求数达到了容量上限,新到达的请求将被丢弃或延迟处理。 3.3.2 代码实现 package main import ( "fmt" "time" ) type LeakyBucket struct { rate float64 // 漏桶速率,单位请求数/秒 capacity int // 漏桶容量,最多可存储请求数 water int // 当前水量,表示当前漏桶中的请求数 lastLeakMs int64 // 上次漏水的时间戳,单位秒 } func NewLeakyBucket(rate float64, capacity int) *LeakyBucket { return &LeakyBucket{ rate: rate, capacity: capacity, water: 0, lastLeakMs: time.Now().Unix(), } } func (lb *LeakyBucket) Allow() bool { now := time.Now().Unix() elapsed := now - lb.lastLeakMs // 漏水,根据时间间隔计算漏掉的水量 leakAmount := int(float64(elapsed) / 1000 * lb.rate) if leakAmount > 0 { if leakAmount > lb.water { lb.water = 0 } else { lb.water -= leakAmount } } // 判断当前水量是否超过容量 if lb.water > lb.capacity { lb.water-- // 如果超过容量,减去刚刚增加的水量 return false } // 增加水量 lb.water++ lb.lastLeakMs = now return true } func main() { // 创建一个漏桶,速率为每秒处理3个请求,容量为4个请求 leakyBucket := NewLeakyBucket(3, 4) // 模拟请求 for i := 1; i tb.capacity { tb.tokens = tb.capacity // 确保令牌数量不超过桶的容量。 } if tb.tokens >= 1.0 { tb.tokens-- tb.lastUpdate = now return true } return false } func main() { tokenBucket := NewTokenBucket(2.0, 3.0) for i := 1; i

3007 27 1
拒绝宕机!一文详解分布式限流方案(附代码实现)
123云盘资源合集
南京雨花吴彦祖 2024-3-8

123云盘资源合集

Adobe全家桶:https://www.123pan.com/s/yS8UVv-NkFed.html 提取码:6666 AutoCAD:https://www.123pan.com/s/yS8UVv...

3844 27 0
123云盘资源合集
Sora 工作原理:训练历程、技术思路与模型能力对比
南京雨花吴彦祖 2024-3-8

Sora 工作原理:训练历程、技术思路与模型能力对比

Sora,由 OpenAI 推出,是一款革命性的文本到视频生成模型,它在人工智能领域开辟了新的可能。本文将深入探讨 Sora 的训练历程、技术思路,并与其他类似模型的能力进行对比,以揭示其独特的工作原理和潜在的影响。 Sora 的训练历程 Sora 的训练历程是一个复杂且精密的过程,涉及大量的数据收集、特征提取、模型训练和优化。以下是 Sora 训练过程的关...

3639 27 0
03日08日,星期五,在这里每天60秒读懂世界!
南京雨花吴彦祖 2024-3-8

03日08日,星期五,在这里每天60秒读懂世界!

1、7日晚,青海玉树发生5.5级地震:据地震人口热力图数据,震中周边属高原无人区;2、广州某股份银行发文明确:在广州两套房全部放租或者放售,买第三套房可按首套房执行;3、郑州:3月15日起,轻型多用途...

2885 27 1
Spring4.3.x源码阅读-IOC
南京雨花吴彦祖 2024-3-7 简报

Spring4.3.x源码阅读-IOC

前言作为Java程序员,一定会和Spring打交道,最初学习Spring的时候,也是跟着视频,按照老师的操作,一步步学着如何使用Spring,慢慢的,了解到一些重点概念,比如IOC,AOP等,当初学习...

3774 27 2
Spring4.3.x源码阅读-IOC
  1. 首页
  2. 4
  3. 5

搜索

搜索历史 清空

最新文章

  • 1 07日17日,星期四,在这里每天60秒读懂世界!
  • 2 07日16日,星期三,在这里每天60秒读懂世界!
  • 3 07日15日,星期二,在这里每天60秒读懂世界!
  • 4 07日14日,星期一,在这里每天60秒读懂世界!
  • 5 07日13日,星期日,在这里每天60秒读懂世界!

热门文章

  • 1 2021年申请永久免费甲骨文云Oracle Cloud并创建实例最全攻略
  • 2 123云盘资源合集
  • 3 Spring4.3.x源码阅读-IOC
  • 4 Sora 工作原理:训练历程、技术思路与模型能力对比
  • 5 03日10日,星期日,在这里每天60秒读懂世界!

最新评论

  • GeorgeFub用户头像
    GeorgeFub
    19 天前
    Dia duit, theastaigh...
  • GeorgeUtill用户头像
    GeorgeUtill
    22 天前
    Hi, I wanted to know...
  • FcarFep用户头像
    FcarFep
    22 天前
    <a href=https://dog-...
  • Curtisbroor用户头像
    Curtisbroor
    26 天前
    Некоторые специалист...
  • Curtismus用户头像
    Curtismus
    1 个月前
    Хороший эффект дают ...
  • Son sans! 200 EUR ht用户头像
    Son sans! 200 EUR ht
    3 个月前
    Son sans! 200 EUR ht...
  • SpeedyIndexBot用户头像
    SpeedyIndexBot
    3 个月前
    https://t.me/SpeedyI...
  • JeremyFar用户头像
    JeremyFar
    3 个月前
    При поиске качествен...
  • 六景用户头像
    六景
    4 个月前
    你这赞助里也没收款码嘛
  • ArinaKers用户头像
    ArinaKers
    4 个月前
    Приветствую. Сделай ...

日历

2025 年 7 月
日一二三四五六
  12345
6789101112
13141516171819
20212223242526
2728293031  

微语

关于 友链 rss
powered by emlog

备案号: 苏ICP备17052842号

sitemap

就算风吹散了冰雪,想念也会留存下来。 | 滑头鬼之孙