• 看不懂,你到底是在用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,我用过,很不错。

  • 用mysql存储肯定是不靠谱的,应该用Cassandra,DynamoDB等适合存储海量信息的分布式数据库,Cassandra写性能非常好,DynamoDB易扩展支持memory cache,对于热数据需要特别处理。