@
luxinfl 不是啊。。。你可以去看下我的那个视频。
1 、首先确保你的这个接口业务代码是否有网络 IO 的代码?(比如查询 redis ,查询数据库,查询第三方接口),你说是用本地缓存,那么不存在 redis 的 IO 时间。但是你说的另外 : ”有个场景,需要用设备号去查询用户标签信息,会根据这个筛选,这一步省略不了。“ 那么这一步的 IO 是可能存在瓶颈的,假设这个网络 IO 耗时 10ms ,那么你 100 个 tomcat 线程,也就是 1w/s 的并发,还只是理论的情况。如果你增加 1000 个线程,那么 cpu 处理的效率也会有点下降,频繁的线程上下文切换。
2 、如果业务代码存在网络 IO ,那么怎么改?那么可以使用 NIO 异步的方式去调用 数据库,redis ,第三方 http 接口等。但是也要注意那个连接数的问题,有一些协议不支持多路复用,比如 http 。如果你调用外部第三方接口是 http 接口,那么就需要设置比较大的 http 连接数,这个数量一般几千上万都可以,对方的服务也一般支持。
3 、但是你的服务应该有其他的接口的吗?假设你只有 8 个线程,其他 B 接口进来之后,有几个线程被这几个 B 接口长时间 IO 阻塞了,那么就会导致你的天气接口吞吐量下降。所以也需要预留部分线程给这些 B 接口。
这么大的吞吐量,有可能是你的服务出现瓶颈,所以先让你看看是不是 cpu 满了,如果满了,可能就是服务机器的性能达到一定的瓶颈了。下游的数据库服务或者第三方服务等也可能是瓶颈。上游只有 slb ,那么问题不大。