• 征集与 Matz 的合影 at 2020年02月13日

    额 这个。。。假如你生日看到一堆人跟你不熟的人的合影照片墙 是啥感觉。这些照片相对来说对 fans 更有意义。

  • 看不懂,你到底是在用 rspec 1 还是 rspec 3, 还有你的问题是什么?

  • 可以用 sidekiq thread,thread 多了,任务满载,cpu 和 memory 容易 100%。 进程也是一样的,不过你可以在不同的服务器上开进程,不用把所有资源都放在一个服务器上,自己控制 threads,把 cpu,memory 控制在合理范围内就好。

  • 如果你的服务器一下子来了很多任务 你都希望尽快完成,那你就需要考虑 auto scaling,我们有个定时任务 定时去 redis 里查 有多少个 key,如果某个 queue 里的 key 增加到一定数量就会触发 增加服务器,启动更多的 sidekiq 进程。Task Count 就是服务器数量, key 少了就减少服务器。自动扩展需要考虑数据库 max connection,设置个服务器上限和下限。

  • @leijun 多起几个进程,每个进程可以有不同的配置,我们每个 docker container 起两个 sidekiq 进程,

    • 一个进程要保证任务成功用了 sidekiq-pro,
    • 另一个进程只读数据库,不需要写,所以可以不用 sidekiq-pro,崩溃了也无所谓,没用 sidekiq-pro 在 redis 效率上应该会更高一点。

    一个进程太多 threads 感觉不是很好,考虑多起几个服务器多几个进程吧。

  • 用户竞拍的时候, 更改 product.current_bidder 用 lock_version,避免多人同时竞拍,每次 after_commit 后 更新 新的竞拍结束时间。 建议 cronjob 查询竞拍结束时间来确认 product 归谁。 因为

    1. Sidekiq API 并不一定是实时的结果,perform_in 也不一定是准时的 2.你忽略了并发的情况。

    cronjob 你可以用一个死循环去检查 product 时间更精准一点,查询到了后要 lock,你可以用 sidekiq scheduler,设置一个 cron job 每过 5 分钟去执行一个检查任务, 检查任务里不停地 while sleep,超过 5 分钟了自动结束。

  • 如何给 Rails 做 health check at 2018年11月13日

    服务是不健康,需要 scale up。但是 container 是在工作的,只是比较忙而已,不应该 kill 掉忙的 container。

  • 如何给 Rails 做 health check at 2018年11月10日

    如果服务器非常忙,你 ping /okcomputer 也可能 timeout

  • 如何给 Rails 做 health check at 2018年11月10日

    我搞混了,scaling 是依赖别的指标,例如 CPU usage,requests count。但是 health check 是根据 ping 返回的状态来决定是不是要 kill container。

  • 一招秒杀 N+1 agg 问题 at 2018年11月02日

    flyerhzm 已经把这个功能做成 gem 了, https://github.com/xinminlabs/eager_group,我用过,很不错。