V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Livid
V2EX  ›  DevOps

访问 localhost 的情况下, Unix Socket 会比 TCP 127.0.0.1 更快(资源 overhead 更少)

  •  
  •   Livid · 2015-07-04 12:17:20 +08:00 · 13790 次点击
    这是一个创建于 3212 天前的主题,其中的信息可能已经有所发展或是发生改变。
    28 条回复    2015-07-07 09:56:39 +08:00
    mongodb
        1
    mongodb  
       2015-07-04 12:29:48 +08:00
    最开始接触Nginx+PHP-FPM的时候教程都是127.0.0.1:xxxx 突然有一天都在用socket方式了,理由大致类似。
    kn007
        2
    kn007  
       2015-07-04 12:30:32 +08:00
    早就用socket了
    mysql
    php
    redis
    memcached
    全部都是用socket
    kn007
        3
    kn007  
       2015-07-04 12:31:21 +08:00
    端口毕竟tcp,大流量毕竟还是过多动作了。
    tonyluj
        4
    tonyluj  
       2015-07-04 12:57:50 +08:00
    fripSide
        5
    fripSide  
       2015-07-04 13:06:19 +08:00
    怎么用 Unix Socket访问localhost?
    ryd994
        6
    ryd994  
       2015-07-04 13:26:34 +08:00
    毕竟即使是lo,还是会有TCP栈处理,握手流控到少不了
    lo也不是完全没用,在多个chroot的情况下,socket的设置比较麻烦
    小负载没什么区别

    @fripSide socket是特殊文件,在配置里指定一个路径即可
    一般在/run /var/run 或者 /var/lib/ 下,你参考其他软件就好,另外大多数配置里会有默认选项可以参照
    注意设置好权限
    SoloCompany
        7
    SoloCompany  
       2015-07-04 13:30:24 +08:00
    1. unix pipline / domain socket 应该都是同意回事
    2. java 支持不佳
    3. windows 不支持,跨平台应用编写不方便

    所以,如果不是证明这个造成了瓶颈,没必要折腾
    noli
        8
    noli  
       2015-07-04 13:46:43 +08:00
    unix socket 直接就不是 TCP/IP 协议栈吧……代价肯定小得多。
    way2exluren
        9
    way2exluren  
       2015-07-04 13:50:10 +08:00
    unix domain socket属于进程间通信。
    127.0.0.1是标准协议流程。
    上面的不过协议栈。
    Bluecoda
        10
    Bluecoda  
       2015-07-04 16:56:55 +08:00
    一直都是unix socket,也很早就知道unix socket比tcp socket的性能要高很多
    yuankui
        11
    yuankui  
       2015-07-04 18:52:21 +08:00
    差别右多大?
    humiaozuzu
        12
    humiaozuzu  
       2015-07-04 18:56:14 +08:00
    局域网间的机器怎么办
    fripSide
        13
    fripSide  
       2015-07-04 19:14:19 +08:00
    @ryd994 我配置saltstack之类的貌似用到过sock文件。但是我想知道题主说的这个,怎么在浏览器上访问的localhost上使用Unix Socket ?
    decken
        14
    decken  
       2015-07-04 19:16:40 +08:00
    apache哭晕在厕所,2.4.7之后的版本才支持该特性
    realpg
        15
    realpg  
       2015-07-04 22:00:36 +08:00
    真不敢相信 @Livid 大神才知道这个……学unix socket是啥的时候了解的第一条就是针对本机连接最大的优势就是想比TCP/IP开销 极低 极低 极低 重三遍
    zonghua
        16
    zonghua  
       2015-07-04 22:45:51 +08:00 via iPhone
    @realpg 开了svn之后路由映射的jetty服务不能访问怎么办?localhost:9090/可以访问
    barbery
        17
    barbery  
       2015-07-04 23:19:36 +08:00
    大部分情况下都是unix socket速度较快,但是比较奇怪的是,使用golang的话,普通的监听端口会比socket快很多
    dallaslu
        18
    dallaslu  
       2015-07-04 23:20:15 +08:00
    用 TCP 可以方便处理集群配置,是么?
    kn007
        19
    kn007  
       2015-07-04 23:22:15 +08:00
    @dallaslu 是的,负载均衡什么的,需要tcp。多台服务器处理不同功能的,也需要tcp

    但是所有业务程序在同一台机子,那么用unix socket妥妥的。
    dallaslu
        20
    dallaslu  
       2015-07-04 23:32:59 +08:00
    @kn007 另有说法说,Linux 已经为 localhost 的 TCP 连接做了优化
    jugelizi
        21
    jugelizi  
       2015-07-05 11:15:40 +08:00
    然而必须是一台机器。。。
    luoqeng
        22
    luoqeng  
       2015-07-05 12:07:20 +08:00
    直接上共享内存吧,更快。
    ryd994
        23
    ryd994  
       2015-07-05 13:36:49 +08:00 via Android
    @dallaslu
    在有socket的情况下,再造这个轮子,已经没必要了,大家已经都在用socket了。
    不过我倒是知道有些软件客户端连接localhost会先尝试读取配置文件里的socket,失败再连127.0.0.1。
    guoqiao
        24
    guoqiao  
       2015-07-05 18:31:41 +08:00
    搭车讨论个问题:
    如果是使用 Docker 来部署 Web 应用, 你可以很容易的通过127.0.0.1:端口将服务映射给宿主机的 Nginx.
    但是如果通过 Socket 来做, 我能想到的方法是通过 Volume 来共享 Socket 文件.
    但这样做总觉得有点不够完美.
    大家是怎么解决 Docker 容器之间的 Socket 通信问题的呢?
    loveminds
        25
    loveminds  
       2015-07-06 00:44:03 +08:00
    @kn007 嗯,还有前端的防薇墙(Openresty改的)
    julyclyde
        26
    julyclyde  
       2015-07-06 18:17:31 +08:00
    “……的情况下”才有这种比较啊
    不在这情况下根本都不用比
    Livid
        27
    Livid  
    MOD
    OP
       2015-07-06 23:27:08 +08:00
    @realpg 你不明白很多帖子我为什么要发。

    当我在网上看到一些有用的东西时,如果这些话题之前没有在 V2EX 讨论过,那么我会发上来。
    realpg
        28
    realpg  
       2015-07-07 09:56:39 +08:00
    @Livid 好吧 我理解错了,但是就我来说,我给入门的新手PHP程序员非ops教学,第一课讲http协议基础和环境搭建的时候都会去讲unix socket以及优缺点。这个有点过于基础了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5180 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:24 · PVG 16:24 · LAX 01:24 · JFK 04:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.