资源隔离是直播开发APP必过的门槛,业务分类是*基本的标准,每个分类都有不同的模块负责,在未进行模块划分时,容器中的线程数量会持续增加导致CPU资源耗尽,整个直播开发APP的服务对外不可用,集群环境下就会出现雪崩,这就很有必要让多个依赖服务的调用分别隔离到各自的资源池内。
一、线程隔离
适用于绝大多数的场景,对依赖服务的网络调用timeout,TPS要求高等。
执行依赖代码的线程与请求线程分离,请求线程可以自由控制离开时间,也就是异步变成。线上建议线程池不要设置过大,否则大量堵塞线程有可能会拖慢服务器。
线程池隔离的优缺点:
优点,一个依赖调用可以给予一个线程池,这个依赖的异常不会影响其他依赖;使用线程可以完全隔离业务代码,请求线程可以快速返回;可以完全模拟异步调用,方便异步变成
缺点,使用线程池的缺点主要是增加了计算的开销,每一个依赖调用都会涉及到直播开发APP的队列,调用、上下文切换,这些操作都可能在不同的线程中执行
二、信号量隔离
直播开发APP用于隔离本地代码或可快速返回的远程调用,可以直接使用信号量隔离,降低线程隔离的上下文切换开销。线程隔离会带来线程开销,有些场景可能会因为用开销换取隔离效果,反而得不偿失。
使用场景:并发需求不大的依赖调用,如果并发需求量大,相应的信号量数量就要设置的够大,因为tomcat线程与处理线程为同一个线程,那么依赖调用就会占用过多的Tomcat线程资源,这可能会影响到直播开发APP其他服务的接收
针对直播开发APP的不同需求,平台可选择的资源隔离也有一定的局限,并不想其他方面一样有多种方案,所以直播开发APP需要慎重选择。