LinuxDo 新帖推送
193 subscribers
255K photos
318K links
Download Telegram
标题: poloapi经济点的?
作者: #jwctsc
板块: #开发调优
编号: 1546001
帖子: https://linux.do/t/topic/1546001
时间: 2026-01-30 22:47:20
摘要:
poloapi 应该如何使用 claude 模型,才能经济点的 发挥效能?
标题: 每次看到勇哥的视频都点进去看一眼,提醒自己不要花任何一块钱
作者: #pie z
板块: #搞七捻三
编号: 1546005
帖子: https://linux.do/t/topic/1546005
时间: 2026-01-30 22:49:50
摘要:
最近勇哥视频的活越来越狠了,两江总督,林市长,我结合自己的经历,感觉自己和他们差不了多少,时刻提醒自己,不要花任何一块钱  我是蠢货
标题: 疑似回归三级前兆
作者: #212741
板块: #搞七捻三
编号: 1546015
帖子: https://linux.do/t/topic/1546015
时间: 2026-01-30 22:51:41
摘要:
最难搞的是50天,呃,其他到时候直接刷就行,可能要等2周就能回三级了

呃,快了,反正最难搞的应该就是这个50天
标题: 各位大佬请教一下:我发现一些灰色的(比如 VPN 这类),不少都能支持微信、支付宝收款。
作者: #康康
板块: #搞七捻三
编号: 1546020
帖子: https://linux.do/t/topic/1546020
时间: 2026-01-30 22:54:02
摘要:
想请问一下,这类收款一般是通过国际聚合收款服务商来做的,还是会通过 TG(纸飞机)上一些平台中介来对接收款?
我目前也准备做一个项目,但不可能使用自己的商家主体来收款,想了解下行业里常见、的做法。
非常感谢
标题: https://github.com/warpdotdev/Warp
作者: #cloudye01
板块: #资源荟萃
编号: 1546022
帖子: https://linux.do/t/topic/1546022
时间: 2026-01-30 22:55:01
摘要:
Mac 除了 Warp 命令行工具 还有其他颜值高的推荐使用吗
标题: 分享一个神级公众号图文编辑器
作者: #Taka
板块: #资源荟萃
编号: 1546023
帖子: https://linux.do/t/topic/1546023
时间: 2026-01-30 22:55:04
摘要:
最近给公众号排版搞得头大,在各种编辑器之间横跳,后来无意间在 GitHub 上挖到了这个宝藏——WeChat Markdown Editor。
用了一段时间,只能说:真香! 它是可以自动即时渲染为微信图文 ,让你不再为微信内容排版而发愁!只要你会基本的 Markdown 语法(现在有了 AI,你甚至不需要会 Markdown),就能做出一篇样式简洁而又美观大方的微信图文。
关键是完全开源免费,分享给佬友们!
项目链接:GitHub - doocs/md: WeChat Markdown Editor | 一款高度简洁的微信 Markdown 编辑器:支持 Markdown 语法、自定义主题样式、内容管理、多图床、AI 助手等特性
标题: 在闲鱼里这个蚂蚁阿福是什么玩意
作者: #cicikiller
板块: #搞七捻三
编号: 1546026
帖子: https://linux.do/t/topic/1546026
时间: 2026-01-30 22:57:10
摘要:
上咸鱼准备买个雷神加速器,看到有一个0.1块的100活动时长,就买了
给我发了一个二维码,指示要去下载蚂蚁阿福发订单号自助发货,发了之后什么都没有,这是AFF么
标题: GitHub学生认证完了,然后呢
作者: #marscosmo
板块: #搞七捻三
编号: 1546031
帖子: https://linux.do/t/topic/1546031
时间: 2026-01-30 22:58:35
摘要:
下午找侄女要了她的学校邮箱,验证了N次,终于通过了,然后呢,有什么值得薅的吗。
标题: Mac 命令行工具
作者: #cloudye01
板块: #开发调优
编号: 1546032
帖子: https://linux.do/t/topic/1546032
时间: 2026-01-30 22:59:12
摘要:
除了 warp 还有其他高颜值的工具推荐吗


github.com






GitHub - warpdotdev/Warp: Warp is the agentic development environment, built...

Warp is the agentic development environment, built for coding with multiple AI agents.
标题: windows有没有能快捷键打开软件的软件?
作者: #AceCandy
板块: #搞七捻三
编号: 1546051
帖子: https://linux.do/t/topic/1546051
时间: 2026-01-30 23:05:48
摘要:
类似在MacOS下我是使用Thor,能够设置快捷键,软件没打开的时候按一下打开软件,打开的时候按一下是切换到对应软件,再按一下是最小化软件。
utools可以做到,但是因为好像在win和mac上同时用一个账号快捷键设置会有一些冲突,所以在平台上想用单独的软件。win上AHK很6,我之前也用了很多年,其实问题是稍微略微有点繁琐,而且脚本在换电脑的时候还需要同步,所以最好是一个单独的软件类似mac上的Thor这样简单设置就能使用的。
标题: 火车票开售即秒无,佬友们有没有啥抢票工具
作者: #咕噜咕噜
板块: #搞七捻三
编号: 1546053
帖子: https://linux.do/t/topic/1546053
时间: 2026-01-30 23:06:13
摘要:
过年的火车票佬友们买到了么,火车票开售即秒,佬友们无有没有啥抢票工具推荐
标题: HaloWebUI开发建议主贴,暂未上线,需要佬们集思广益
作者: #Root大虾
板块: #开发调优
编号: 1546065
帖子: https://linux.do/t/topic/1546065
时间: 2026-01-30 23:08:18
摘要:
从 纠结 CherryStudio 和 OpenWebUI?我全都要!新增Responses API和Gemini接口 继续讨论

二开项目上线后赢得了很多佬的喜爱,也非常感谢各位佬的反馈和建议,使项目越来越完善,但为了项目更好的和长远的发展,同时也要尊重OpenWebUI的开发者品牌保护条款,经过邮件沟通协商,决定将二开项目更名为HaloWebUI,并重新从0.6.5版本开启分支并重新开发所有的功能,工作量有点大。。。。因此,在没有出现重大BUG之前,近期原二开项目暂时不会上线新版本。我会把主要的精力放在新分支上。
这对你来说意味着什么?其实没什么变化,所有功能都会有,甚至更加完善,也会更加轻量化!这是我当前最主要的目标。 包括github仓库都没有任何变化,佬们无需担心,我会持续维护
项目的发展离不开佬们的支持!本帖的主要目的是集思广益,收集大家不需要的功能,先做一部分的减法投票,如果有需要的功能或其他反馈都可以在评论区留言。希望佬们多多建议和支持!!!争取做L站最好用的webui​
Click to view the poll.
标题: 佬友们Clawdbot连接到tg上无法读取图片内容是为什么嘞
作者: #Gongyi_Churen
板块: #开发调优
编号: 1546066
帖子: https://linux.do/t/topic/1546066
时间: 2026-01-30 23:08:22
摘要:
完全出幻觉了,发了图说读到了,但是内容胡言乱语根本没读到,模型用的是grok4
标题: 2026上海数码和智能补贴第一波
作者: #BinBin
板块: #前沿快讯
编号: 1546070
帖子: https://linux.do/t/topic/1546070
时间: 2026-01-30 23:09:49
摘要:
云闪付明天开始报名
标题: 求教,oh my opencode 如何定义agent使用模型的思考等级?
作者: #Dealmaker4235
板块: #搞七捻三
编号: 1546075
帖子: https://linux.do/t/topic/1546075
时间: 2026-01-30 23:10:28
摘要:
尝试了几种办法,都没法覆盖。倒是通过agent markdown文件自定义的能够指定思考等级。
测试简单配置:
{
"$schema": "https://raw.githubusercontent.com/code-yeongyu/oh-my-opencode/master/assets/oh-my-opencode.schema.json",
"disabled_agents": [],
"disabled_mcps": [],
"disabled_hooks": [
"todo-continuation-enforcer"
],
"disabled_skills": [],
"google_auth": false,
"agents": {
"sisyphus": {
"model": "cpa-oai/gpt-5.2"
},
"oracle": {
"model": "cpa-oai/gpt-5.2",
"reasoningEffort": "high",
"temperature": 0.1
}
}
}

使用"reasoningEffort": "high"尝试指定,失败。
按照源码reasoningEffort应该会合并到options内,尝试显式指定。
options: {
"reasoningEffort": "high"
}

还是不行,抓包显示提交的还是默认的medium等级。
直接指定具体参数
options: {
"reasoning": {
"effort": "high",
"summary": "auto"
}
}

还是不行,真是油盐不进啊。
测试通过markdown创建一个agent指定等级
---
name: story-metadata-extractor
description: 信息提取.
mode: subagent
model: cpa-oai/gpt-5.2
options:
reasoningEffort: high
temperature: 0.1
top_p: 0.95
permission:
call_omo_agent: deny
question: deny
---
提示词

测试这个创建的agent思考等级成功设置为了high。
有没有佬,解答下到底怎么才能在oh-my-opencode配置文件内指定插件内置agent的思考等级?
标题: 谷歌工程师窃取机密上传到谷歌云
作者: #XC W
板块: #搞七捻三
编号: 1546078
帖子: https://linux.do/t/topic/1546078
时间: 2026-01-30 23:12:34
摘要:
标题: 请教cherryStudio这样的软件有什么用处?
作者: #coveydzblrsjlay
板块: #搞七捻三
编号: 1546079
帖子: https://linux.do/t/topic/1546079
时间: 2026-01-30 23:13:48
摘要:
看了半天文档,没发现这个软件有什么看起来不可或缺的功能。
然后在站里搜索了一下,也没找到什么好的教程或者介绍贴。
但是确实是有很多star。
所以请教一下各位,这个软件有什么杀手级功能吗?
标题: Go反射:性能瓶颈与零拷贝优化
作者: #Fgaoxing
板块: #开发调优
编号: 1546082
帖子: https://linux.do/t/topic/1546082
时间: 2026-01-30 23:14:15
摘要:
原文:https://www.yt-blog.top/38912/

做Go开发的,肯定少不了用反射——解析Tag、拿字段偏移、获取类型信息,ORM、序列化、配置绑定这些地方都要用到。
但是官方的reflect包性能真的不太行,解析一个字段或Tag要花几十到几百万纳秒,调得多了,直接成性能瓶颈。
很多人只知道「反射慢」,但不知道慢在哪。咱们今天就从runtime层面分析一下,顺便搞个零拷贝的优化方案。
一、先从底层说起
要搞清楚反射的性能问题,得先知道Go底层是怎么回事。
从Go1.14开始,runtime里几个核心类型的内存布局就没变过。这是个关键点。
Go的反射包就是基于runtime层的abi实现的。
reflect/type.go
// TypeOf returns the reflection [Type] that represents the dynamic type of i.
// If i is a nil interface value, TypeOf returns nil.
func TypeOf(i any) Type {
return toType(abi.TypeOf(i))
}

其实reflect.Type就是一个接口,上面代码里的toType()把它转成了reflect.rtype。
// rtype is the common implementation of most values.
// It is embedded in other struct types.
type rtype struct {
t abi.Type
}

func toRType(t *abi.Type) *rtype {
return (*rtype)(unsafe.Pointer(t))
}

所以最后拿到的是个abi.Type实例,reflect.rtype只是给它包了一层,提供个友好的接口。也可以换成别的类型专用结构体,但本质上都是对abi.Type的封装。
internal/abi/type.go
// Type is the runtime representation of a Go type.
//
// Be careful about accessing this type at build time, as the version
// of this type in the compiler/linker may not have the same layout
// as the version in the target binary, due to pointer width
// differences and any experiments. Use cmd/compile/internal/rttype
// or the functions in compiletype.go to access this type instead.
// (TODO: this admonition applies to every type in this package.
// Put it in some shared location?)
type Type struct {
Size_ uintptr
PtrBytes uintptr // number of (prefix) bytes in the type that can contain pointers
Hash uint32 // hash of type; avoids computation in hash tables
TFlag TFlag // extra type information flags
Align_ uint8 // alignment of variable with this type
FieldAlign_ uint8 // alignment of struct field with this type
Kind_ Kind // enumeration for C
// function for comparing objects of this type
// (ptr to object A, ptr to object B) -> ==?
Equal func(unsafe.Pointer, unsafe.Pointer) bool
// GCData stores the GC type data for the garbage collector.
// Normally, GCData points to a bitmask that describes the
// ptr/nonptr fields of the type. The bitmask will have at
// least PtrBytes/ptrSize bits.
// If the TFlagGCMaskOnDemand bit is set, GCData is instead a
// **byte and the pointer to the bitmask is one dereference away.
// The runtime will build the bitmask if needed.
// (See runtime/type.go:getGCMask.)
// Note: multiple types may have the same value of GCData,
// including when TFlagGCMaskOnDemand is set. The types will, of course,
// have the same pointer layout (but not necessarily the same size).
GCData *byte
Str NameOff // string form
PtrToThis TypeOff // type for pointer to this type, may be zero
}

当然实际上结构体数据是如上结构体的扩展,同样定义在一起。
internal/abi/type.go
type StructField struct {
Name Name // name is always non-empty
Typ *Type // type of field
Offset uintptr // byte offset of field
}

type StructType struct {
Type
PkgPath Name
Fields []StructField
}

还有一点,这些底层类型里存的结构体元数据,是编译器编译时就写进程序的只读内存区了,地址固定、GC不回收、运行时不能改。这给直接操作底层内存提供了安全保障。
既然这样,我们可以用固定偏移量精确找到目标字段,不用完整解析整个底层结构体,只要定义几个空的镜像类型来做类型标注就够了。
二、性能瓶颈在哪儿
reflect.TypeOf()底层就是做个指针转换,不拷贝不计算,挺快的。真正的性能损耗出在后面两个阶段,而且因为没缓存,损耗被放大了好几倍。
2.1 Field方法做了无意义的内存分配
调用reflect.Type.Field(i)的时候,rtype会被转成*StructType,然后从Fields字段里读目标字段信息。
reflect/type.go
// Struct field
type structField = abi.StructField // 注意:你平时用的是 reflect.structField,不是reflect.StructField

// structType represents a struct type.
type structType struct {
abi.StructType
}

func (t *rtype) Field(i int) StructField {
if t.Kind() != Struct {
panic("reflect: Field of non-struct type " + t.String())
}
tt := (*structType)(unsafe.Pointer(t))
return tt.Field(i)
}

// Field returns the i'th struct field.
func (t *structType) Field(i int) (f StructField) {
if i < 0 || i >= len(t.Fields) {
panic("reflect: Field index out of bounds")
}
p := &t.Fields[i]
f.Type = toType(p.Typ)
标题: VSCode 使用Vim+Fcitx4自动输入法切换配置
作者: #XLY23333
板块: #文档共建
编号: 1546086
帖子: https://linux.do/t/topic/1546086
时间: 2026-01-30 23:16:16
摘要:
VSCode 使用Vim+Fcitx4自动输入法切换配置

[!NOTE]
OS: Ubuntu 24.04.3 LTS (Noble Numbat) x86_64
Vim Extension: Vim (vscodevim)
Fcitx Version: 4

其中部分按键的还原仅个人习惯,各位根据自己习惯调整即可
Vim好啊,还是得用Vim啊,VSCode舒服啊,这咋办呢
下载好插件后即可按下方操作继续,如果一上来怕出问题,可以在左下角临时关闭VIM
输入法切换脚本

INSERT → NORMAL 强制切换英文输入法
NORMAL → INSERT 记忆上次INSERT模式下的输入法类型

在喜欢的位置建立如下脚本
fcitx-switch.sh
#!/bin/bash

if [ "$1" = "2" ]; then
/usr/bin/fcitx-remote -o
else
/usr/bin/fcitx-remote -c
fi

记录文件绝对路径[DIR]/fcitx-switch.sh
添加设置
打开VSCode的Settings.json, 添加下面内容
"vim.autoSwitchInputMethod.enable": true,
"vim.autoSwitchInputMethod.defaultIM": "1",
"vim.autoSwitchInputMethod.obtainIMCmd": "/usr/bin/fcitx-remote",
"vim.autoSwitchInputMethod.switchIMCmd": "[DIR]/fcitx-switch.sh {im}"

其他常见设置

仅个人习惯

"vim.useSystemClipboard": true, // 使用系统剪切板
"vim.smartRelativeLine": true, // 智能相对行号
"vim.mouseSelectionGoesIntoVisualM
标题: 《太虚引仙尘》
作者: #yolosu
板块: #搞七捻三
编号: 1546089
帖子: https://linux.do/t/topic/1546089
时间: 2026-01-30 23:18:06
摘要:
《残简》
第一章 山村少年
青云山脉绵延千里,山脚下有一个名叫落霞村的小村庄。村子不大,百余户人家世代以打猎采药为生,日出而
作,日落而息,与世无争。
林尘今年十六岁,是村里出了名的穷小子。父母早亡,只留下一间破旧的茅屋和几亩薄田。他从小跟着村里的
老猎户学习打猎,靠着卖些山货勉强糊口。
这一日,林尘像往常一样进山采药。深秋时节,山中草木枯黄,能采到的药材本就不多。他沿着一条少有人走
的小径,越走越深,不知不觉间竟来到了一处从未到过的山谷。
山谷中怪石嶙峋,草木稀疏,中央有一汪碧绿的深潭。潭水清澈见底,却透着一股说不出的诡异。林尘心中隐
隐不安,正要转身离去,忽然瞥见潭边的乱石堆中似乎有什么东西在闪烁微光。
他犹豫片刻,终究还是好奇心占了上风。小心翼翼地走近一看,竟是一块巴掌大小的玉简,通体碧绿,上面刻
满了密密麻麻的符文。玉简残破不堪,边角处有明显的断裂痕迹,显然只是某件完整器物的一部分。
林尘将玉简拿在手中,只觉得一股清凉之意从掌心传来,说不出的舒服。他虽然不识字,但也知道这东西绝非
凡物,当下小心收好,匆匆下山。
回到村中,林尘将玉简藏在床底的暗格里,谁也没有告诉。此后数日,他每到夜深人静时便将玉简取出把玩,
却始终看不出什么名堂。
直到第七日夜里,林尘盯着玉简上的符文看得入神,忽然觉得眼前一花,那些原本毫无意义的符文竟然开始缓
缓流动,化作一行行文字浮现在他脑海之中。
“太虚引气诀,上古功法残篇,可引天地灵气入体,筑基修仙……”
林尘只觉得脑中嗡嗡作响,无数信息如潮水般涌来。他强忍着头痛,将那些文字一一记下。待到天明时分,他
已将玉简中记载的功法口诀背得滚瓜烂熟。
修仙!这两个字如同惊雷一般在林尘心中炸响。他从小就听村里的老人讲过修仙者的传说——那些人能够腾云驾
雾、移山填海,寿命更是长达数百上千年。他原以为那不过是哄小孩的故事,没想到竟然是真的!
从那一日起,林尘开始按照玉简中记载的方法修炼。每日清晨,他便盘膝坐在茅屋中,按照口诀引导呼吸,试
图感应天地间的灵气。
然而修炼之路远比他想象的艰难。一连数月过去,他连灵气的影子都没有摸到。玉简中的功法虽然记载详尽,
但对于一个从未接触过修仙的凡人来说,那些晦涩的术语简直如同天书。
就在林尘几乎要放弃的时候,一个不速之客的到来,彻底改变了他的命运。

第二章 落魄散修
那是一个风雨交加的夜晚。林尘正在茅屋中打坐,忽然听到门外传来一阵急促的敲门声。他起身开门,只见一
个衣衫褴褛的中年男子倒在门口,浑身是血,气息奄奄。
林尘虽然穷苦,却心地善良。他将那人扶进屋中,用仅有的草药为他包扎伤口。那人伤势极重,昏迷了整整三
天三夜才悠悠醒转。
"多谢小兄弟救命之恩。"那人醒来后,第一句话便是道谢。他自称苏玄,是一名云游四方的散修,因得罪了仇
家,被追杀至此。
林尘第一次见到真正的修仙者,心中既激动又好奇。他小心翼翼地问道:“前辈,修仙……真的能长生不老吗?”
苏玄苦笑一声:“长生?谈何容易。修仙之路,九死一生。像我这样的散修,能活到现在已是侥幸。”
他看了看林尘,忽然眼中精光一闪:“小兄弟,你身上……似乎有灵气波动?”
林尘心中一惊,犹豫片刻,还是将玉简的事情告诉了苏玄。苏玄接过玉简仔细端详,脸色越来越凝重。
"太虚引气诀……这是上古大能的功法!"苏玄深吸一口气,“小兄弟,你知道这东西意味着什么吗?”
林尘茫然摇头。
苏玄叹道:“这块玉简虽然残破,但其中记载的功法却是无价之宝。若是被那些大派知道,必定会引来杀身之
。”
林尘脸色一白。他只是一个普通的山村少年,哪里惹得起什么大派?
苏玄沉吟片刻,忽然说道:“小兄弟,你可愿拜我为师?”
林尘愣住了。
苏玄解释道:“我虽然只是一个落魄散修,但好歹修炼了百余年,对修仙之道略知一二。你若拜我为师,我可
教你修炼之法,也可以帮你隐藏这块玉简的气息。否则,以你现在的状况,迟早会被人发现。”
林尘没有犹豫太久。他本就渴望修仙,如今有人愿意指点,自然求之不得。当下便跪地磕头,正式拜苏玄为师

苏玄在落霞村养伤期间,开始传授林尘修仙的基础知识。他告诉林尘,修仙之路分为炼气、筑基、金丹、元婴
、化神、合体、大乘、渡劫等境界。每一个境界都是一道天堑,无数修士穷尽一生也无法跨越。
"你现在连炼气期都没有入门,"苏玄说道,“太虚引气诀虽然玄妙,但对于初学者来说太过艰深。我先教你一
基础的引气之法,等你入了门,再修炼玉简中的功法不迟。”
在苏玄的指点下,林尘的修炼进度突飞猛进。仅仅一个月后,他便成功感应到了天地灵气,正式踏入了炼气期

那一刻,林尘只觉得浑身上下说不出的舒畅。他能够清晰地感受到空气中流动的灵气,能够听到远处山林中的
鸟鸣虫叫,甚至能够看到夜空中那些肉眼不可见的星辰。
"不错,"苏玄满意地点点头,“你的资质虽然算不上顶尖,但胜在心性坚韧。只要持之以恒,未来未必没有成
。”
又过了三个月,苏玄的伤势终于痊愈。他对林尘说道:“我要离开了。这里太过偏僻,灵气稀薄,不适合修炼
我打算带你去一个地方。”
"什么地方?"林尘问道。
苏玄微微一笑:“青云山上,有一个名叫’落霞宗’的小门派。我与那里的掌门有些交情,可以将你引荐入门。
然只是一个小门派,但总比你一个人在这里闭门造车要强。”
林尘没有拒绝。他知道,要想在修仙之路上走得更远,就必须离开这个小村庄。
临行前,他最后看了一眼那间破旧的茅屋,心中百感交集。从今往后,他便不再是那个普通的山村少年了。

第三章 落霞宗
落霞宗位于青云山脉的一座山峰之上,规模不大,弟子不过百余人,在修仙界中只能算是末流小派。但对于林
尘来说,这里已经是一个全新的世界。
苏玄将林尘带到落霞宗后,便与掌门闭门密谈了整整一日。第二天,林尘便被正式收入门墙,成为落霞宗的外
门弟子。
"我要继续云游了,"苏玄临别时对林尘说道,“你在这里好好修炼,切记不要将玉简的事情告诉任何人。等你
为有成,我们自会再见。”
林尘跪地叩首,目送师父的身影消失在云端。
落霞宗的外门弟子有五十余人,大多是像林尘这样资质平平的普通人。他们每日的任务便是打扫山门、种植灵
药、修炼功法,日子虽然清苦,却也安稳。
林尘很快便适应了这里的生活。他白天完成门派分配的任务,晚上便独自修炼太虚引气诀。有了苏玄打下的基
础,他修炼起来事半功倍,短短半年便突破到了炼气期三层。
这个进度在外门弟子中已经算是出类拔萃。要知道,许多弟子修炼数年也不过是炼气期一二层而已。
林尘的表现引起了一些人的注意。
"林师弟,你修炼的是什么功法?进境怎么这么快?"一个名叫赵元的外门弟子问道。此人是外门弟子中的老资
格,炼气期五层的修为,平日里颇有些威望。
林尘早有准备,淡淡说道:“没什么特别的,就是门派发的基础功法。可能是我运气好吧。”
赵元将信将疑,却也没有再追问。
然而,真正让林尘感到压力的,是来自内门弟子的目光。
落霞宗的内门弟子有二十余人,个个都是筑基期以上的修为。他们住在山顶的精舍中,享受着最好的资源,是
门派未来的希望。外门弟子若想晋升内门,必须在三十岁之前突破到筑基期,否则便只能一辈子做杂役。
林尘入门时已经十六岁,留给他的时间并不多。
就在他埋头苦修的时候,一个人的出现打破了他平静的生活。
那是一个春日的午后,林尘正在灵药园中除草。忽然,一道白色的身影从天而降,落在他身前不远处。
那是一个年约二十的女子,一身白衣胜雪,容貌清丽脱俗,周身散发着淡淡的灵气波动——分明是一位筑基期的
修士。
"你就是新来的林尘?"女子开口问道,声音清冷如泉。
林尘连忙起身行礼:“弟子林尘,见过师姐。”
女子微微点头:“我叫沈清雪,是内门弟子。掌门让我来考察一下你的修为。”
林尘心中一凛。他不知道掌门为何会注意到自己,但直觉告诉他,这绝非好事。
沈清雪让林尘展示了一番修为,又问了他一些修炼上的问题。林尘小心应对,只说自己是按照门派功法修炼,
并无特别之处。
沈清雪似乎并不满意这个答案,但也没有追问。临走时,她忽然说道:“你的根骨资质不过中下,却能在半年
突破到炼气三层,要么是有奇遇,要么是有秘法。不管是哪一种,都要小心。这里不比山下,人心险恶。”
说完,她便化作一道白光,消失在天际。
林尘站在原地,久久没有动弹。他知道,沈清雪的话是在提醒他。但他更知道,自己已经没有退路了。

第四章 暗流涌动
沈清雪的到访只是一个开始。此后数月,林尘明显感觉到周围的气氛变得微妙起来。
先是赵元等几个外门弟子开始有意无意地疏远他,然后是一些内门弟子时不时地出现在他修炼的地方,用审视
的目光打量他。
林尘知道,自己已经被人盯上了。
他开始刻意放慢修炼的进度,每日只完成门派分配的任务,其余时间便躲在自己的房间里,不与任何人来往。
然而,该来的终究还是来了。
这一日,林尘被传唤到了议事大殿。殿中坐着落霞宗的三位长老,掌门端坐在主位之上,神色莫测。
"林尘,"掌门开口说道,“你入门不过一年,修为便突破到了炼气期五层。这个进度,在我落霞宗的历史上也
罕见的。”
林尘低头道:“弟子只是勤加修炼,不敢有丝毫懈怠。”
"勤加修炼?"一位须发皆白的长老冷笑一声,“你当我们是傻子吗?以你的资质,就算日夜不休地修炼,也不
能有这样的进境。说!你是不是得到了什么奇遇?”
林尘心中一沉,面上却不动声色:“弟子不知长老所言何意。”
那长老正要发作,掌门却摆了摆手,示意他稳住。
"林尘,"掌门缓缓说道,“我知道你师父是苏玄。他当年也是我落霞宗的弟子,后来因
标题: 基于OpenKruise Rollout 和 AWS Gateway API 实现的金丝雀(Canary)灰度发布
作者: #cc0011
板块: #开发调优
编号: 1546090
帖子: https://linux.do/t/topic/1546090
时间: 2026-01-30 23:18:37
摘要:
一、概述
基于 OpenKruise Rollout 和 AWS Gateway API 实现的金丝雀(Canary)灰度发布。基于 HTTP Header 的流量控制,实现精细化的灰度发布策略。

二、架构组件
核心技术栈

Kubernetes: 容器编排平台
OpenKruise Rollout: 渐进式交付控制器
AWS Load Balancer Controller: AWS ALB 集成
Gateway API: Kubernetes 标准网关 API

部署架构
Internet → AWS ALB (Gateway) → HTTPRoute → Service (Stable/Canary) → Pods

三、资源清单




资源类型
资源名称
命名空间
用途




Deployment
demo
demo-release
应用工作负载


Service
demo-stable
demo-release
稳定版本服务


Service
demo-stable-canary
demo-release
金丝雀服务(自动创建)


Rollout
demo
demo-release
灰度发布控制器


GatewayClass
aws-alb-gateway-class
-
AWS ALB 网关类


Gateway
demo-gateway
demo-release
网关入口


LoadBalancerConfiguration
demo-gw-lbconfig-1
demo-release
ALB 负载均衡配置


TargetGroupConfiguration
demo-tgconfig
demo-release
稳定版目标组配置


TargetGroupConfiguration
demo-tgconfig-canary
demo-release
金丝雀目标组配置


HTTPRoute
demo-app-route
demo-release
HTTP 路由规则




四、详细配置说明
1. Deployment 配置
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
namespace: demo-release
labels:
app: demo
spec:
replicas: 2
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
canary-env: "false"
spec:
containers:
- name: app
image: argoproj/rollouts-demo:yellow
ports:
- containerPort: 8080
resources:
limits:
cpu: 500m
memory: 512Mi
requests:
cpu: 200m
memory: 256Mi

配置要点:

副本数:2 个
容器镜像:argoproj/rollouts-demo:yellow
资源限制:CPU 500m / 内存 512Mi
资源请求:CPU 200m / 内存 256Mi
标签:canary-env: "false" 标识稳定版本


2. Service 配置
apiVersion: v1
kind: Service
metadata:
name: demo-stable
namespace: demo-release
spec:
ports:
- name: http
port: 8080
protocol: TCP
targetPort: 8080
selector:
app: demo
canary-env: "false"
type: ClusterIP

配置要点:

服务名称:demo-stable
服务类型:ClusterIP(集群内部访问)
端口映射:8080 → 8080
选择器:仅选择 canary-env: "false" 的 Pod(稳定版本)


3. Rollout 灰度发布策略
apiVersion: rollouts.kruise.io/v1beta1
kind: Rollout
metadata:
name: demo
namespace: demo-release
spec:
workloadRef:
apiVersion: apps/v1
kind: Deployment
name: demo
strategy:
canary:
enableExtraWorkloadForCanary: true
steps:
- replicas: 2
matches:
- headers:
- name: "cookie"
type: Exact
value: "demo-canary=always"
pause: {}
patchPodTemplateMetadata:
labels:
canary-env: "true"
trafficRoutings:
- service: demo-stable
gateway:
httpRouteName: demo-app-route

配置要点:
灰度策略

策略类型:Canary(金丝雀发布)
额外工作负载:enableExtraWorkloadForCanary: true(为金丝雀版本创建独立的 Deployment)

发布步骤

金丝雀副本数:2 个
流量匹配规则:基于 HTTP Cookie

Header 名称:cookie
匹配类型:精确匹配(Exact)
匹配值:demo-canary=always


暂停策略:pause: {} 需要手动确认后继续

Pod 标签

金丝雀版本 Pod 会被打上 canary-env: "true" 标签

流量路由

关联服务:demo-stable
关联 HTTPRoute:demo-app-route


4. Gateway 网关配置
4.1 GatewayClass
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
name: aws-alb-gateway-class
spec:
controllerName: gateway.k8s.aws/alb

配置要点:

控制器:AWS ALB Gateway Controller


4.2 Gateway
apiVersion: gateway.networking.k8s.io/v1beta1
kind: Gateway
metadata:
name: demo-gateway
namespace: demo-release
spec:
gatewayClassName: aws-alb-gateway-class
infrastructure:
parametersRef:
kind: LoadBalancerConfiguration
name: demo-gw-lbconfig-1
group: gateway.k8s.aws
listeners:
- name: http
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: Same
- name: https
protocol: HTTPS
port: 443
allowedRoutes:
namespaces:
from: Same

配置要点:

网关类:aws-alb-gateway-class
负载均衡配置引用:demo-gw-lbconfig-1
监听器:

HTTP:端口 80
HTTPS:端口 443


路由范围:仅允许同命名空间的路由


4.3 LoadBalancerConfiguration
apiVersion: gateway.k8s.aws/v1beta1
kind: LoadBalancerConfiguration
metadata:
name: demo-gw-lbc