V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lesismal  ›  全部回复第 23 页 / 共 56 页
回复总数  1112
1 ... 19  20  21  22  23  24  25  26  27  28 ... 56  
@gitxuzan @pubby
我这个能让你们代码更简单,老业务当然没必要去浪费时间替换,但是新业务的话,欢迎试驾。。。
https://github.com/lesismal/arpc
性能也还可以:
https://colobu.com/2022/07/31/2022-rpc-frameworks-benchmarks

易用性和扩展性请看看示例,该有的基本都有了
名字带了 rpc 但其实是全功能的网络库,server 主动发消息都可以的,也不限制 rpc 的方式,也可以只是推送消息不需要另一端响应,client/server side 都可以做这些,做游戏网络库可以,做 IM 可以,做 RPC 可以,做推送服务之类的都可以。支持中间件之类的各种扩展。支持前端 js client 而且也能用 http ,所以 web 前端一把梭也可以。常见的游戏客户端引擎基本都支持 js ,所以用来做游戏也可以一把梭。
在一些对性能要求极致的比如 fps 游戏,当然我还是会自己定制网络库,把中间件之类的不必要的代码去掉,把协议头做更极致的优化。
@pubby
接入层如果也是用 go ,还可以考虑用我这个来承载大量连接降低硬件消耗:
https://github.com/lesismal/nbio
如果不是用 go 而是用 nginx 那些,就不需要我这个了,除非为了一些功能开发方便

@gitxuzan @fridaycatye
刚看了一眼你们冰哥哥的代码,比如:
https://github.com/aceld/zinx/blob/master/ztimer/timer.go#L76
这种定时器要在到期前一直占用一个协程。而标准库 time.AfterFunc 只要在到期时启动一个协程、执行完就退出。
冰的这种代码,太不适合真正的大项目了,也就玩玩小项目能干翻 py 这些。
学思路可以,别被这些理论派、缺少实战的 up 把自己带偏了。
这代码辣眼睛,不继续看了。
@cassyfar 先了解下为什么 Google 搞 QUIC 并被采纳作为 HTTP3.0

> 1. 即使是内网环境,所有的流量也应该加密,哪怕是 TCP 也应该套 SSL 。不搞这个你连等保都过不了。

那这么说吧,很多家其他大厂的 RPC ,是没用 TLS 的。是不是这些大厂就做错了?不是每种服务都要等保流程的,否则安妮这个所有流量都要加密的说法,是不是数据库、redis 这些基础设施都要 TLS ?但实际情况是多数这种内网基础设施都没用 TLS 连接、只是 4 层 TCP 而已,否则性能直接掉一块。
也不是哪个东西用的多就一定它是对的、别人是不好的。就像 windows 比 macos 用户多多了但微软被喷那么多,就像 HTTP1.x 目前仍然是互联网主要流量,2.0 搞这么多年也没普及反倒是委员会老爷们在 2.0 没普及的情况下直接跨过去投票点赞支持 3.0 了,为啥?因为 1.x/2.0 都是垃圾啊!
GRPC 用的最多,一是谷歌背书,二是数量占据多数的中小厂商不具备自研这种基础设施的能力,你看看大厂基础设施,几乎都有自己的轮子,为啥 GRPC 不一统江湖了?先看看性能测试数据?先区分下不同场景加密的必要性?

> 2. 线头阻塞是个啥玩意,说的是 HOL blocking ?这个一般不是翻译为队头阻塞么。

一个概念多种叫法没什么奇怪的,”队头“更偏学术一点的用词、“线头”更形象化偏口语一点而已,这里也有线头:
https://baike.baidu.com/item/%E7%BA%BF%E5%A4%B4%E9%98%BB%E5%A1%9E/1462441

也可能是年纪大一点的我们那个年代叫线头的多一些。另外有些东西是约定俗成,比如“粘包”这种错误定义,但其实提到它大家也知道是啥意思,所以约定俗成了也就不要纠结字眼

> 这里有点矛盾,因为 TCP 的队头阻塞是在丢包率比较高的网络中才有较大的影响,如果不丢包也就没什么阻塞一说了,而你之前论证不需要 SSL 说是内网环境,内网的丢包率通常是非常低的

我不是理论论证,而是就实时论事,比如你如果担心内网流量被抓包,那为什么不先担心下为什么被入侵了提权了,被入侵了难道不比被抓包更严重更可怕吗?别人有更多方法搞事情可都是比抓内网包省事多了。最常见的部署挖矿代码、勒索病毒、登入你的数据库、篡改你的服务挂马之类的,但很少听说别人都入侵了然后还靠抓包这种费时费力拐弯抹角的方式搞事情的。当然,性能不是主要需求的,内网加 TLS 也完全没问题。
还有就是自己的工作实践、以及行业实际情况,你可以随便看看各大厂相关的开源项目,RPC 不用 TLS 的场景多了去了。


> 另外 TCP 的问题和 gRPC 有啥关系,你换其他 TCP 上的 RPC 实现不是一样的问题么。连解决方法,比如 multiplexing 都是一样的,别的 RPC 能用,gRPC 也能用。

同样的,你先了解下为什么 Google 搞 QUIC 并被采纳作为 HTTP3.0

> 当然你可以换基于 UDP 的 RPC 实现,gRPC 社区我看也在做基于 QUIC 也就是 HTTP3 作为传输层的工作。

这里你自己都说了社区有在做基于 QUIC ,和上面一样,为什么不继续用 2.0 ?同样的,你先研究明白为什么 2.0 解决不了 4 层的线头阻塞就明白了。我提示一下:mutiplexing 解决不了是因为它是 7 层的策略,而 TCP 线头阻塞是 4 层,你 multiplexing 是基于别人 4 层实现的,4 层自己先堵车了,7 层动都动不了、怎么解决。。

这方面文章很多,随便找下认真看看就懂了,我就不展开说了
2023-03-20 12:03:32 +08:00
回复了 dawnven 创建的主题 问与答 堂弟非法猎鸟,被老家当地派出所抓了,目前在拘留所
@hanqian
> 幸亏这帖里有一个真吃铁拳的老哥来科普公检法的真相,否则不知道有多少人会进来搁那假惺惺的普法,说什么活该,什么抓得好,其实这种人的心理就是,我一定要把你踩成刁民,否则我还怎么自诩良民。

1. 打鸟不对,批评这种没什么问题吧?
1. 法是恶法,但对于打鸟这个事情来说,不能因为是恶法就同情打鸟这种行为吧?
gRPC 的设计其实挺一般的。基于 HTTP2.0 ,解决不了 4 层线头阻塞,对于 RPC 这种应用场景,集群内多是内网、用 HTTP2.0 是浪费不如直接 TCP 省去加密。streaming 也不是什么优秀玩意,只是相当于在 request and response 基础上前进半步。唯一优点就是多语言。
2023-03-14 21:02:38 +08:00
回复了 luomao 创建的主题 程序员 在国内程序员就要重点关注业务么
全世界都差不多,纯技术线很难升官发财。

单就 OP 这个案例而言:
1. OP 的改造没什么问题,关注业务不多也没什么问题、毕竟之前职级可能也还没高到必须关注业务;
2. 除非是对技术需求非常非常硬的高精尖领域,但 OP 描述的这种不算,所以如果想继续向上、不管去哪家公司、多关注业务更好
3. 如果 OP 这次改造再等等,等你们原系统经常出点问题、比如需求迭代快导致停服次数多所以停服权重影响变大,或者量增加了导致原服务撑不住了天天 warning ,然后领导们老板们意识到了技术的重要性需要技术搞定(其实和 1 是一个道理,就是需要技术硬的时候),到时候你再改造、解决这些问题并且晋级述职主要讲解这些技术相关的,老板们就不会这么烦人了。

简单点说,3 就是需要天时地利人和类似的、好钢得使到刀刃上,技术再好没遇到好机会也白费,反倒会被资本家恶心
@zizon
单个请求,为什么会想到去 cancel 全局的呢?
单个请求自己 return 就完事了,除非这是运维发出的停止服务之类的请求。是不是这个理?嘿嘿
2023-03-10 01:53:56 +08:00
回复了 cs1024 创建的主题 问与答 大家每天生活有什么开心的事吗
向死而生,离最终解脱又近了一天。
2023-03-10 01:52:41 +08:00
回复了 tool2d 创建的主题 SSL 以前感觉 HTTPS 很安全,现在有一点点改变看法了。
先搞清楚,通信协议相关的安全算法主要是防止信道监听者。这类似战争年代无线电被监听、加密防破解。

不是用来防止具有密钥的通信两端的,因为两端本来就各自有密钥。所以这种有机器权限的就不适合 OP 讨论范围。

另外,如果想绕过,你装个虚拟机,在虚拟机里跑,应该就可以了,如果想更狠,虚拟机里再加上加密隧道、VPN 。。。
2023-03-10 01:41:44 +08:00
回复了 echoless 创建的主题 程序员 知天命
@echoless
#2 这种观点适合能力强的个体,不适合群体。
对待群体,需要用宏观思维。金融泡沫催动下的经济大周期,本质是供需关系,需求减少、没有那么多 HC 了,不管人们怎么努力等待,都会有对应比例的人失业或者找不到好的职位。
2023-03-08 10:57:58 +08:00
回复了 8520ccc 创建的主题 Go 编程语言 分享 golang 一种快捷自动实现查询条件构建的思路
@8520ccc #4 那就无所谓了,自己用着舒服就是最好的
@zmqiang 欢迎使用!
2023-03-08 02:42:08 +08:00
回复了 8520ccc 创建的主题 Go 编程语言 分享 golang 一种快捷自动实现查询条件构建的思路
之前在其他帖子也聊过,其实基础知识部分而言,学习 sql 本身并不比学习 orm 需要更多时间,而且逐渐积累起来,你对项目的掌控能力更强,尤其是性能相关,这是对于做大一些的项目的一些核心能力、涨工资或者说进阶的必备知识。一开始便依赖 orm ,并且不求深究,相当于自断了技术进阶的道路。
当然,比如家里条件比较好、只是给自己定位 curd 中小项目,追求的是 work life balance and happiness ,那就无所谓了、orm 挺好
2023-03-08 00:25:50 +08:00
回复了 8520ccc 创建的主题 Go 编程语言 分享 golang 一种快捷自动实现查询条件构建的思路
ORM 没什么好的,试试我这个丫:
https://github.com/lesismal/sqlw
转 go 这些人哪,入乡随俗了解一下,非要越搞越蹩脚。。。
@Frankcox 我来啦,感谢 at !

当初提这个 pr 是因为我的 nbio 实现的 http 兼容标准库,这涉及到 Request 的 context 字段,每个请求的 context 应该是共用一个全局的,这样当全局的 context 退出(比如进程退出、cancel 时),这个 request 的 handler 中使用这个 context 就可以一块退出(比如使用 Mysql 时传入这个 context )。但这个字段不是导出的,所以没有办法直接设置。

由于标准库规则严格、不肯开放这个字段导出,至少对于官方而言,他们不考虑 nbio 要解决的海量并发连接数写成数量、内存开销、GC 等问题,所以官方也确实不需要开放导出。

无奈只能使用魔法了,预先用 WithContext 生成了一个带有公共 context 的 Request ,后面创建新 Request 时 *newReq = *reqWithCtx 整体赋值,就避过没导出不能设置的问题了。不过虽然能用,毕竟 Request 结构体有点大,这么做能用但不划算,凑合用吧,毕竟我也支持官方不随意放权。。。 :joy:
2023-03-06 02:07:01 +08:00
回复了 CC11001100 创建的主题 Go 编程语言 Golang 邪修: Golang 的三元表达式实现
回复内容不能为空
1 ... 19  20  21  22  23  24  25  26  27  28 ... 56  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2375 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 35ms · UTC 04:04 · PVG 12:04 · LAX 21:04 · JFK 00:04
Developed with CodeLauncher
♥ Do have faith in what you're doing.