golang 应该如何选择 api 网关呢

181 天前
 RedBeanIce
公司基于 gin 开发了一个系统,目前是单体服务,基本上都是 Http 和前端交互。

由于业务发展,想转入微服务,我们想基于 eureka/Consul 做注册中心,引入一款网关作为负载均衡器。

所以请问一下,应该如何选择 api 网关呢。

(关于 gin 往注册中心注册,我们准备自己写。微服务之间的调用,也是准备自己写。)
当然准备是准备,,这个也说不准,看实际情况,
3829 次点击
所在节点    Go 编程语言
53 条回复
lesismal
181 天前
@coderxy #37

> 比如不只是 server 之间可以用、client 也可以请求 server
> -你这个指的是 grpc 编译生成 client?

不是。
是指用户直接访问,比如 web 前端直接请求:
https://github.com/lesismal/arpc/blob/master/examples/webchat/chat.html#L81


> 比如 server 也可以直接推送数据给 client 、client 也可以只推送数据不需要 server response
> -grpc 的双向数据流模式
> -grpc 一样做吧,这个业务场景跟协议没啥关系。IM 都可以用 grpc 的双向数据流模式写,如果你想的话。
> 比如可以做的业务类型也不限于微服务,游戏、IM 、推送各种业务都可以做

这倒确实是可以,但使用起来更麻烦,普通的推送服务还好。
复杂点的业务比如游戏,每个协议包也都可能是不同的 CMD/Method/Router ,你可能需要在 stream 基础上再二次封装一道 router handler 的逻辑


> 比如 arpc 不限制序列化方式,相同或者不同的 method 的每次请求都可以是不同的序列化,甚至也可以直接使用一段 buffer
> -grpc 的自定义编码集
> 中间件之类的也都支持,而且是支持两个维度的中间件:编解码、路由,用户可以自己定制、扩展更多东西
> -grpc 的 Interceptor?

你说的这些,很多需要再扩展之类的,像我这种不熟悉它们的"小白"去研究怎么扩展就已经很难受了,而 arpc 里这些默认是开箱即用了,另外还有性能因素。


> 或者这么说吧,正常大家能想到的常用的场景,grpc thrift 这种级别的项目基本上都已经有了,都不用想的。 所以,切勿闭门造车。

闭门造车这个词,建议也先对比下,如果造出来的比原来的差,那确实没必要,如果造出来的比原来的好,那就不叫闭门造车了。
反倒是建议你,不要闭关锁国、多开眼看看世界比较好吧

另外,百度、腾讯、字节各种大厂,也都有开源自己的 rpc ,就像你前面举例大厂都用 api gateway 来做论点一样,我想以彼之道问你一句:这些大厂自己造 rpc 而不是直接用 google 家的、它们算不算是闭门造车?
请不要说它们是大厂有资格闭门造车,我个人太弱没这个资格。还是前面的论点:不要虚空用 xxx 在做这种逻辑来辩论,要用实际的好坏来做逻辑


再另外,我还真就喜欢造车,但造的东西肯定也不是为了瞎折腾,而是为了能解决一些痛点:
https://github.com/lesismal/nbio
https://www.v2ex.com/t/945827
lesismal
181 天前
@coderxy #39
先看#41 吧,别乱用闭门造车这个词,grpc 这种破车有什么好的值得你如此喜欢,拿块烂铁当宝贝呢。。
对比我自己造的、grpc 的主要优势就是跨语言支持更强罢了,没办法啊,我精力有限,不可能多个语言都搞一轮
lesismal
181 天前
@coderxy 闭门造车这个词可能不对,但闭门这个词还算是比较准确,因为我造车的时候确实没有参考它们、主要是按照自己的设计来做的
兄弟如果你的从业经验主要是应用层的工作、公司里头不需要你造轮子、那你可能只要有轮子并且够用就可以了也不关心轮子好坏,但你可能就 get 不到这些造轮子的重点、也不太能够对轮子之间的重点进行合理的对比,这没错,大多数人都是这样工作的,但请不要以为自己用的就是最好的、其他的就都是闭门造车了,这样就有点一叶障目了
GTim
181 天前
@XCFOX 看起来不错啊
lesismal
181 天前
> 比如 server 也可以直接推送数据给 client 、client 也可以只推送数据不需要 server response
> -grpc 的双向数据流模式
> -grpc 一样做吧,这个业务场景跟协议没啥关系。IM 都可以用 grpc 的双向数据流模式写,如果你想的话。

@coderxy
这么说吧,grpc 双向流之上封装也能搞定这些,但双向流就相当于 TCP 之于 arpc ,双向流只是支持了基础的网络交互方式、相当于网络传输层相当于 TCP ;
对于复杂场景的协议交互、应用层仍然需要很多 Cmd/Method/Router 所以对于这些场景,用户仍然需要额外的协议封装,arpc 开箱即用的双向 Call 、Notify 都已经封装好了;
双向流太难用了,性能也一般
sampeng
180 天前
作为运维:上来就微服务的,我要问候他姥姥
作为运维:上来就引入 k8s 的,感谢程序员赏口饭吃
coderxy
180 天前
@lesismal 本来想再反驳两句的,后来想了想每个人都有自己的思想,无关对错也没有对错。 另,祝你成功,再见!
tramm
180 天前
网关: Apinto
服务注册+发现: Polaris
plutome
180 天前
面向简历编程是把? 唉,程序员都太焦虑了。
flmn
180 天前
traefik
lesismal
180 天前
@coderxy 嗯嗯,也祝你成功,并且欢迎来体验下我的库 ~
RedBeanIce
180 天前
@masterclock 感觉 dapr 有点意思。。。
RedBeanIce
180 天前
楼上说了很多,
网关类:kong ,traefik ,apisix ,nginx ,gRPC Gateway ,Apinto ,这一类都是网关类型
ALB 类:阿里云 ALB
新的类型:dapr ,istio

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1001257

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX