如何设计一个nats消息队列负载均衡系统
试着回答一下这个有趣的消费-生产问题吧: 这是一个使用消息队列解耦多个生产者和多个消费者的系统。 生产者生产的消息是有分区的(按project_id分区),分区也会动态分配。 消费者需要竞争消费消息,每个消费者可以消费多个分区。 对于一个分区,最多有不超过1/n个消费者在消费。 生产者和消费者根据性能和数据量,会在kubernetes中进行动态的扩缩容。 消息需要尽可能的被均匀地分配到消费者上,以实现负载均衡。 消息需要尽可能的N等分,这N份消息将分配给消费者服务A(A的数量N>=2A) e.g: 1/10 情景: 消息需要尽可能的10等分,这10份消息将分配给消费者服务A(A的数量>=5),对于不满足5的倍数情况,如23个消费者,则余下3个随机分配 在这种动态输入输出的情况下,我们该如何设计一个消息队列负载均衡系统呢,如何保证6个9的SLA呢? 流量路径客户的IoT Devices -> StreamGateway(nginx)四层负载均衡 -> DataGateway(生产者集群) -> NATS...
我去哪了...
最近有朋友问 我去哪了,为什么不更新文章了… 时光飞逝,转眼间已经2025年了,距离上次更新文章已经过去了一年有余。 在这一年里经历了很多事情,生活和工作上也有了新的挑战和成长。 虽然没有时间更新文章,但我一直在思考如何更好地分享我的一切。 这一年… 从南昌到杭州, 从杭州到北京, 从南到北, 走过喧嚣的大城市… 在福州平潭的小岛上, 领略惬意的海风 在南宁品鉴水果,与故友相见 在广州的珠江新城, 奔波于各大写字楼 我似乎老了, 但更多的是释然 祖国的大好河山还等着我们去探索, 放下眼前的苦楚吧,睁开眼拥抱世界
本地Web应用-实现文件/目录选择器-获取文件完整路径
有时候我们需要需要实现通过浏览器选择文件获取文件信息而不上传文件, 这个时候JavaScript的内置api就足以完成需求. 但是,如果我们需要获取到文件的完整路径, 那么对不起, 由于为了安全避免xss攻击, 现代的浏览器仅能获取到一个虚假的路径或者根本无法获取(IE10之前的浏览器可以获取到完整路径). 如果我们是本地Web应用, 这个问题就可以得到解决.解决方案有Electron封装,或者提供一个运行在本地的Agent用于获取文件路径,再由前端选择文件提交至 Agent或后端, 如果选择前者,再由Agent将路径间接传递至后端. 本文分享使用Go作为后端,Vue作为前端的,一起运行在本地的Web应用解决方案. (附完整代码) 效果图 我们的需求后端需要获取到选择路径=>通过图形化/命令行获取 图形化获取=>需要选择实现图形化的方案=>Web方案 Web需要获取本地路径=>通过Api获取=>方案行不通X...
golang小技巧:返回值简写,func (c *Struct)FunName与func (c Struct)FunName区别
本文介绍golang中的返回值有一个语法糖,可以帮助我们减少代码量; 1func loadConfigYaml(f string) (defaultConfig yamlConfig) 同时还介绍func (c *Struct)FunName与func (c Struct)FunName区别 golang返回值变量:golang可以将欲返回的变量值写在函数末尾,并作为一个作用域为函数体内的变量 例如: 1234567891011func loadConfigYaml(f string) (defaultConfig yamlConfig) { file, err := os.Open(f) if err != nil { fmt.Println("Error opening file:", err) return yamlConfig{} } defer file.Close() decoder := yaml.NewDecoder(file) ...
为你的服务器Nginx支持最新的quic
使用最新的nginx主线版本1.25,给网站开启quic支持。 本文不探讨手动编译,而是使用主线安装直接启用quic特性 环境:Debian12+nginx1.25 HTTP 3/QUIC介绍QUIC/HTTP3 (Quick UDP Internet Connections), 快速 UDP 互联网连接,由Google在2015年提出的SPDY v3演化而来的新协议,传统的HTTP协议是基于传输层TCP的协议,而QUIC是基于传输层UDP上的协议,可以定义成:HTTP3.0基于UDP的安全可靠的HTTP2.0协议。 QUIC是基于UDP协议的,与传统的HTTP1.1/HTTP2不兼容,当浏览器不支持quic/http3时,会自动尝试使用http2、http1.1连接。 HTTP/3 基于 QUIC 传输协议,该协议专门用于支持多路复用连接,并摆脱了对单个 TCP 连接的依赖。QUIC 使用 UDP 作为在客户端和服务器之间的数据包底层传输机制,并为HTTP...
利用域前置技术绕过GFW的SNI阻断
在某些特殊时期,我们的科学上网工具不太好使的时候,我们还有要经常上github找资源、浏览v2ex和查询维基百科的需求,我们可以通过绕过GFW的SNI阻断来避免一些简易网站访问难的问题。 支持的站点 维基百科 Pixiv(支持登录,注册暂不支持) Steam社区 GitHub Tumblr Instagram Quora Google reCAPTCHA reddit APKMirror vimeo 日本亚马逊 Microsoft OneDrive Niconico(部分页面有问题,见#19) BBC Dropbox 日本时报 Kobo Medium Pinterest TheTVDB 雅虎搜索 Imgur MEGA OpenAI...
axios发送简单POST请求,Gin简单处理
自己在写一个项目,目前遇到的问题是:根据csdn和axios官网的说明,发送简单POST请求的时候,后端可能没办法正确处理数据,浅浅记录一下解决方案。 传递类型对比即key:value 键值对,不使用JSON封装 类似于get请求,可以很简单的从命令行中看出key:value 我们进行下对比 curl发送对比1.简单POST curl http://localhost:8088/api/auth/signin -X POST -d ‘username=admin&password=passwords’ 2.简单GET curl “http://localhost:8088/api/auth/signin?username=admin&password=passwords“ 3.JSON型POST curl -X POST -H “Content-Type: application/json” http://localhost:8088/api/auth/signin -d...
解决前端Vue3+vite+axios+cookie跨域报错问题 后端Go+gin
自己在写一个项目,目前遇到了问题:前端需要向后端执行ajax请求获取数据,需要传递cookie。如果使用默认的代码不进行配置则会出现跨域问题cors报错,本文将解决问题. 前端(node.js+Vite):http://localhost:5173 后端(golang + gin):http://localhost:8088/ 问题出现前端需要向后端请求数据/api/devices/snlspjrnzxcevyfk/info,后端通过前端传递过来的cookie进行身份识别,授权成功返回200,JSON数据,...
rootfs版CatWrt(OpenWrt)启动镜像定制
rootfs版CatWrt(OpenWrt)启动镜像的定制 包括镜像扩容,源修改,软件包定制 熟悉软路由的朋友们都知道我们在下载固件(镜像)的时候,一般都是选择带有squashfs字样的镜像,然而往往还有另一个神秘的选择- rootfs。它却很少被人们提起,它的一般用途是拿来做docker的镜像,但是我们还可以拿做另一件事,OpenWrt的系统分区制作。 我们平时接触到的OpenWrt的根文件系统一般都是...
PVE部署CatWrt(OpenWrt)
在PVE下部署安装和配置CatWrt,实现软路由的虚拟化。 CatWrt是什么?CatWrt 是基于开源的 Lean LEDE 仓库编译的 OpenWrt 发行版,LEDE相较于OpenWRT官方添加了更多符合中国用户的插件,其更符合中国用户的操作习惯。 CatWrt是由饱受好评的LEDE源代码直接*编译而来,其提供了相似于LEDE的硬路由私有化付费版本QWRT的体验,同时提供了较为完善的社区支持和多种硬件及架构的支持。 项目地址: GitHub - miaoermua/CatWrt: 🌠 客制化 OpenWrt 智能网关 官网地址:CatWrt.v23.8 超强性能超稳固件,支持多款热门 mt798x 路由 - 喵二の小博客 (miaoer.xyz) 而但免费的技术支持*和更新。 在PVE上安装OpenWrt1.创建虚拟机 此处选择不使用任何介质,客户机操作系统选择Linux,版本默认 这里的BIOS选项根据自己的喜好选择默认(SeaBIOS),或是OVMF(UEFI),关系到后面添加镜像时选择的版本。 如果选择UEFI,不勾选...