• 在看这个的时候,conscrypt 内存又泄露了。https://github.com/google/conscrypt/issues/835

    之前漏了一次,感觉修了有一年,刚修好,又漏了。这次好在漏的比较慢。

    之前 fastjson 有安全漏洞,修了 n 次。

    google 的 package 有内存泄露,修了一年,没修干净。 阿里的 package 有安全问题,修了 4、5 次了,也不知道完全修好没。

    然后大家都认为,java 工业化做的特别好。

  • Raft 笔记 at 2020年06月26日

    感谢,已更新。

  • 这家公司,据我所知,在广州 ruby 圈,口碑非常好。

    他们用 ruby 非常早,一定程度上可以说是他们把 ruby 带到了广州。

    记得在广州,茶余饭后,大家时不时会说起武师傅的传闻 😎

    声明: 以上仅个人看法,有些也是听说的,也有夸张的成分,大家要是感兴趣,还是具体了解一下比较好。

    招聘一定程度也是开发者面试公司。

  • 我消化下,感谢。

    感觉第二种应该就没办法了

  • 感谢分享,

    想请教楼主一个问题:

    redis 多线程了,那单个 client 的请求,redis 还能保证处理和返回的时序性吗?

    就是同一个 client,发给 redis 指令顺序是什么,redis 处理的书序就应该是什么,并且以同样的顺序返回。

    我在 Stack Overflow 上也问了,不过没人回我 https://stackoverflow.com/questions/62097897/will-redis-6-guarantee-client-requests-order 😭

  • 换个技术栈啊,比如 Go、Java 啥的。RoR 很多好玩的东西都没得玩。

  • 信炮哥,无 bug

  • 鉴于 Ruby GIL 的机制,上面的情况,同一个进程内,如果有重的耗费 CPU 的动作执行期间,可能会导致这段期间这个进程无法响应普通的 HTTP 请求,从而堵塞正常的 Web 服务。

    这个地方没太看明白,想请教一下。

    无人知晓的 GIL 里说, Ruby 有一个 time thread,会给其他线程标记中断,被标记中断的线程,在执行完一个方法的时候,会调用 vm_call0_body 这个方法,如果有被中断,就会让给其他人执行。

    我理解像 + 执行完,都会执行 vm_call0_body 这个方法。如果一个线程想一直占着 CPU 的话,除非是调用 C 方法。

    不过也有一种情况,有多个后台任务在执行,打满线程池,就会堵塞正常的 Web 服务。

  • 推荐算法老师 labuladong at 2020年05月05日

    我们是做 IM 开发,IM 开发还挺特殊的,也不好被完全算进 web 开发。

    有些问题可以被当做算法问题,比如 N + 1,就是复杂度 + 网络传输。

    我们在做一些设计的时候,也会考虑时间和空间复杂度,主要是怕把服务搞挂掉。。。当然多数的时候不需要考虑。

    有些算法问题,其实也是编程能力的问题,像二叉树遍历、归并算法,如果递归掌握的好,这些算法就很好理解了。

    递归 ruby 中用的比较少,但写 clojure、erlang 这种,递归写不好,真玩不转。。。

  • 推荐算法老师 labuladong at 2020年05月05日

    上次用到算法是节前。遍历数组,每次遍历用了 count ,担心会是 n 方的复杂度,就改了(后来发现想多了)。

    上上次,是发现 redis 有个慢查询,查了下,是因为用了 HGETALL,而 HGETALL 是 O(N) 的复杂度。

    可能用不着实现算法,但复杂度的分析还是经常用到的。

  • zoom 收费了。。。

  • 有人来了,有的人走了,有的人不知道是走了还是没走。

  • 感谢

    broadcast 是用来给所有 channel 内的连接发消息的。

    这个地方,大体做的事情,就是 encode 和 往 IO 里写。

    encode 消耗的是 cpu 资源,用不用线程池意义不大。甚至不用线程池可能更快。

    debug 看了下,写 io 的时候,是异步的。线程池也没有意义。

    如果没同步 io 操作,线程池意义不大,或者说纯粹的 CPU 计算,线程池其实没啥意义。

    整个 ActionCable 是公用一个 thread pool 的

    共用线程池不是一个很好的做法。

  • 感谢,这个 clojure 竟然表现不错,不过感觉是占代码少的便宜 😢

    然后 elixir 用内存多,感觉可以调一下 min_heap_size,那个用来缓存消息的。

    ActionCable 性能渣渣,盲猜,应该是消耗在线程切换了。nio 就是为不用线程模型。然后 RoR 又在这加回来了。。。

    也不能用 Fiber 解。这块加 thread pool,我猜是为了避免一次处理时间过长,卡了所有的任务。用 Fiber 没发避免这个问题。

    所以还得用 thread pool,不过应该有更好的解法。

    还不是很理解,为啥 broadcast 的时候要用 thread pool,因为 io 已经 异步了。如果是接收消息的时候,有线程池,还可以理解。。

  • 请教过一个问题,有压测过 actioncable 和 phonex 的 pub/sub 吗?比价好奇两种性能的差距,搜了一下,没找到相关的对比。。。

    看了你分享的压测,感觉 go 的实现,也不是很好。。。

  • 怎样去做 benchmark

    要看你们的场景是什么样了,同时在线有多少人,大约会有多少 qps。然后写脚本,模拟这些连接和请求。

    至于 4 台行不行,还得压压看。

  • 看这个 https://github.com/anycable/anycable/blob/master/benchmarks/2018-10-27.md 压测,

    8c15g 20k 的连接。

    go 的结果是这个, clients: 20000 95per-rtt: 2892ms min-rtt: 3ms median-rtt: 399ms max-rtt: 4639ms

    没找到具体的压测脚本,不知道是怎么发压的。

    不过中位和最大 rtt,差这么多,感觉有问题啊。。。

    而且 20k 的延迟有 5s,性能感觉也堪忧啊。

  • Draw ERD online at 2020年04月14日

    👍

  • Draw ERD online at 2020年04月14日

    好久没用了。。。用起来还是挺流畅的。不过 ror 可以根据 model 生成 ERB。

  • Draw ERD online at 2020年04月13日

    ActiveRecord 至少可以解决 99% 的问题,但很多人还会揪着那 1% 不放。

    就像

    也难说服 DBA 去学习一个新东西

    有的时候观点会受到经验影响。

  • Draw ERD online at 2020年04月12日

    恩,确实是 😭

    也和经验有关,确实很多人喜欢 sql。ORM 也一直受到到各种各样的质疑。

    一个 Java 项目想要转起来,需要 n 个人。。。RoR 一个人就搞定了。。。

  • Draw ERD online at 2020年04月12日

    在滴滴也是 web 界面。但想看表结构,还是得连上某个环境的数据库去看。。。

    界面这种,都是大家自己提交自己的,没办法知道数据库有哪些改变。RoR migration 可以都写到代码里,直观方便些。开发体验好一些。

    不过既然都用 Java,还谈什么开发体验呢。。。

  • Draw ERD online at 2020年04月12日

    RoR 框架搭的比较好,感觉换 java spring 这种,早就没法维护了(连 schema、migration 都可以没有

    java spring 框架弱,外加想怎么写就怎么写,所以才要微服务(故意黑 java 和 java spring

    不过 300 个表,感觉也需要考虑切一切了。

  • Draw ERD online at 2020年04月12日

    目次有 300 个表 👍 ,有点可怕。