V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
webgeekman
V2EX  ›  问与答

能否讨论以下,网关最适合用什么语言开发?

  •  
  •   webgeekman · 2014-01-13 20:57:16 +08:00 · 6309 次点击
    这是一个创建于 3973 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不讨论编程语言的优劣,毕竟各种语言都有其适合的场景。
    那么对于需要高处理性能,响应速度,流量大,并且有一些业务逻辑的网关来说,用什么语言编写最好呢?

    开始尝试用Java,基于Mina做二次开发,加上redis作为缓存,虽然性能还不错,但是对于网关来说,跟客户讲用java做的往往缺少一点说服力。

    想听听大家的意见,对于网关来说,那种语言更合适,更能在网关这种场景下发挥语言本身的优势?
    26 条回复    1970-01-01 08:00:00 +08:00
    lightening
        1
    lightening  
       2014-01-13 21:10:44 +08:00   ❤️ 1
    Erlang?
    clino
        2
    clino  
       2014-01-13 21:18:59 +08:00   ❤️ 1
    golang ?
    语言层面就支持coroutine,觉得这种场合挺合适的
    lidashuang
        3
    lidashuang  
       2014-01-13 21:20:28 +08:00   ❤️ 1
    golang
    yangff
        4
    yangff  
       2014-01-13 21:24:45 +08:00
    不要怀疑是c……你需要榨取他的每一分效率。
    sinxccc
        5
    sinxccc  
       2014-01-13 21:26:13 +08:00
    大部分都是 C,小部分是 C 和 C++ 的混合。
    min
        6
    min  
       2014-01-13 21:28:55 +08:00
    客户如果指定语言就用指定的
    如果只指定了性能指标,你能满足就好了嘛
    webgeekman
        7
    webgeekman  
    OP
       2014-01-13 21:37:55 +08:00
    @lightening
    @clino
    @lidashuang 感谢推荐。查了一下,Erlang和Golang在特性上还真差不多,有待进一步对比。
    webgeekman
        8
    webgeekman  
    OP
       2014-01-13 21:41:25 +08:00
    @yangff
    @sinxccc
    @min
    难就难在并非客户指定,而是公司内部自行研发的产品,后续要投入到多个项目里面使用。
    做这种事情,C固然是最有说服力的,但是在一个较为大的团队里,加上成员多半C经验不行,很难执行下去。并且的确面对太多的工作量。所以Erlang和Golang这样的语言就容易成为首选了。
    yangff
        9
    yangff  
       2014-01-13 21:57:59 +08:00
    @webgeekman 那就换成员,换成C适用的成员。基本上这些东西都是写在操作系统/固件里面的,erlang和golang根本不适用。
    而且网关需要多复杂的逻辑?就是一个大门而已,更多复杂事情赞先别管了,放进来再说不行吗?后面还好多人呢!
    yangff
        10
    yangff  
       2014-01-13 21:59:39 +08:00   ❤️ 1
    或许叫做大门不严谨吧……但是,我的意思是更复杂的逻辑请先放进来在弄。
    yangff
        11
    yangff  
       2014-01-13 22:02:58 +08:00
    不过如果要说未来的趋势的话,如果能在可以接受的范围内让这些设备性能过剩的话,用erlang或者golang当然就都没有问题了。。
    guotie
        12
    guotie  
       2014-01-13 22:04:05 +08:00
    golang
    dhysum
        13
    dhysum  
       2014-01-13 22:04:29 +08:00
    Erlang和Golang什么时候开始这么受欢迎了? 网关一类的,目前还没有能替代C的吧?

    招一些做嵌入式的就好了
    clino
        14
    clino  
       2014-01-13 22:07:01 +08:00
    @yangff "基本上这些东西都是写在操作系统/固件里面的"
    看起来楼主并不是运行在固件里的
    yangff
        15
    yangff  
       2014-01-13 22:11:29 +08:00   ❤️ 1
    @clino 所以我也很奇怪啊,难道他用Windows Server做网关?
    pindleskin
        16
    pindleskin  
       2014-01-13 22:30:22 +08:00
    取决于对性能,延迟,可靠性等的要求。如果要达到百千兆路由器的性能和低延迟,只能用c或c++吧,其他需要运行在vm里或用垃圾回收的都不合适,vm太复杂,各种意外有可能发生,垃圾回收在高负载下需要大量的内存,有时候还需要把整个vm停下来几到几百毫秒。如果是应用网关,偶尔几十到几百毫秒的延迟可以忍受,那选择就多了。
    nsa
        17
    nsa  
       2014-01-13 22:35:00 +08:00
    C, 毫无疑问
    sinxccc
        18
    sinxccc  
       2014-01-13 23:30:52 +08:00
    @webgeekman 恕我直言,那你的团队里有没有对 Erlang 或者 Go 足够精通的人呢?

    网络设备上选择 C 居多而避开虚拟机,动态内存回收之类的高级功能的一个原因也是 C 在语言层面上简单,不会因为不熟悉而掉进语言自己的坑。
    tangzx
        19
    tangzx  
       2014-01-13 23:51:42 +08:00 via iPhone
    用c在nginx上做二次开发吧
    clino
        20
    clino  
       2014-01-14 08:40:22 +08:00
    @yangff 为什么一定要windows? 用linux一样可以用应用的方式来写网关的吧
    senghoo
        21
    senghoo  
       2014-01-14 09:56:34 +08:00
    我也是做网络设备的,我们的设备吞吐在2Gbps左右。
    核心部分必然是c。辅助用python。运行在linux下。

    首先这种设备得区分开必须要高效并保证实时性的部分和可以延迟执行的部分。前者用c,后者就随便一个语言。
    rrfeng
        22
    rrfeng  
       2014-01-14 10:29:10 +08:00
    我看到题目第一印象是『网关』是指什么

    果然后面讨论的很热烈但是仍有分歧,楼主说的『网关』指的是啥……
    keyman
        23
    keyman  
       2014-01-14 12:28:35 +08:00
    第一反应c,第二反应erlang。
    shanks
        24
    shanks  
       2014-01-14 13:26:26 +08:00
    同没搞明白,啥是网关,求科普。
    为何我想到SDN呢。。
    dorentus
        25
    dorentus  
       2014-01-14 14:49:39 +08:00
    网关是啥?

    用你们熟悉的语言。
    topkyo
        26
    topkyo  
       2014-01-14 15:14:26 +08:00
    首先这个网关定义就不明确,是嵌入式的还是web服务器型的?
    嵌入式的当然是用c/c++;web服务器的多了,哪个熟悉用那个
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2927 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:48 · PVG 10:48 · LAX 18:48 · JFK 21:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.