`
aa87963014
  • 浏览: 154359 次
  • 性别: Icon_minigender_1
  • 来自: 布尼塔尼亚
社区版块
存档分类
最新评论

构建更健壮的系统:不同的业务放在不同的线程/线程池里面

 
阅读更多

有时候我们会发现新上线的部分业务出现了问题,并且影响了其他功能。

我有时候想到从架构上如何避免这个问题,然后有了这样的一个思路。

 

开发的时候我们基本上不会考虑到这种问题,整个服务就共用一个线程池,甚至有些系统是单线程的。

一旦出现问题整个服务就一起挂掉了

这个肯定是我们不想看到的。

解决这个问题方法就是把不同模块放在不同的线程里面,如果之前使用的是线程池那么 不同业务也要用不同的线程池分开。因为如果这个业务有问题,这个业务所在的线程池也会很快的阻塞掉。

如果不同的业务分开到不同的线程池里面去,至少不会因为这个业务导致其他业务不可用。

 

再配合上一篇干掉耗时任务的方法,可以保证线上服务不会全完蛋

 

 

1
0
分享到:
评论

相关推荐

    Django异步任务线程池实现原理

    在Django中,可以通过配置文件对线程池的参数进行设置,例如设置线程池中线程的数量等,来满足不同业务场景的需求。 通过以上知识点的详细介绍和实际代码示例,文章帮助开发者深入理解Django中异步任务线程池的实现...

    Java并发编程面试题(2024最新版)-重点.docx

    - **用户线程:**由程序员创建来完成特定任务的线程,通常用于执行业务逻辑。 **7. 线程死锁:** - 定义:两个或两个以上的进程在执行过程中,因争夺资源而造成的一种相互等待的现象。 - 必要条件: - 互斥条件:...

    跨平台网络编程中间件ACE

    跨平台网络编程中间件ACE(Adaptive Communication Environment)是一个强大的C++库,专门设计用于构建高性能、可移植的...通过使用ACE,开发者可以将更多的精力放在业务逻辑上,而不是花费在解决平台兼容性问题上。

    改善C#程序的50种方法2015

    14. **使用Try/Catch块优化异常处理**:避免在循环体内捕获异常,尽量将它们放在更上层的代码中处理。 15. **避免使用Finalize方法**:除非必要,否则避免使用Finalize,因为垃圾回收器调用它会增加额外开销。 16....

    Thrift入门.docx

    4. THsHaServer:Half-sync/Half-async 模式,读写任务放在线程池中处理。 【Thrift 安装】 在 Windows 上安装 Thrift,需要下载对应版本的 thrift-0.9.3.exe,将其添加到环境变量 PATH 中。安装完成后,可以通过...

    多线程双图片源下载jsp

    9. **性能优化**:在大量图片下载时,可能需要考虑线程池的使用,如`java.util.concurrent.ExecutorService`,它可以更有效地管理线程的生命周期,避免频繁创建和销毁线程带来的开销。 10. **安全与合规**:在使用...

    ClickAway:使用GUI的Click Away系统的线程实现

    为避免这种情况,需要将这些操作放在单独的线程中执行,这就是线程实现的重要性。 在ClickAway项目中,可能包含了以下关键知识点: 1. **事件监听器(Event Listeners)**:Java中的事件监听器接口,如...

    JavaWeb 面试点 列表(未附答案)

    StringBuilder在单线程中构建字符串更高效;StringBuffer是线程安全的字符串操作类。 7. **重载和重写**:重载发生在同一类中,方法名相同但参数列表不同;重写发生在子类,方法名、返回类型和参数列表都必须相同,...

    Java网络爬虫(蜘蛛)源码.zip

    - **线程池**: 使用`java.util.concurrent.ThreadPoolExecutor`创建线程池,提高爬虫的并行处理能力,同时控制资源消耗。 - **异步IO**: 使用`CompletableFuture`或Netty框架实现异步网络请求,提高爬取效率。 5....

    OPC UA SDK 源码分析

    线程池是管理所有线程的核心组件,能够有效地调度任务并平衡系统资源的使用。 2. **UaThread**:表示一个线程实例,包含了基本的线程控制方法,如`run()`、`sleep()`和`wait()`等。 3. **UaThreadPoolJob**:代表一...

    可以承载20k并发量的IOCP

    这表明了单纯的利用系统的I/O线程池函数BindIoCompletionCallback()虽然简化了开发过程,但无法完全满足高性能服务器的需求,尤其是当面对大量用户连接时,可能会出现线程池管理上的问题,如线程堆栈错误。...

    java高级工程师面试总结

    - 垂直拆分:按业务模块将数据拆分到不同的表或库中。 - **如何保证不同数据结构的数据一致性**: - 使用事务管理确保原子性。 - 应用最终一致性的设计理念。 - 引入分布式事务技术(如两阶段提交)。 #### ...

    Java程序员笔试题

    - **作用域:** 可以将JavaBeans放在不同作用域(page、request、session、application)中管理。 **8. MVC设计模式** - **Model(模型):** 负责数据管理和业务逻辑。 - **View(视图):** 展示数据,通常由JSP...

    c# 服务器客户端一对多通信

    在IT行业中,网络通信是构建分布式系统的基础,而C#作为一种强大的编程语言,提供了丰富的库和API用于实现各种网络通信模式。"C# 服务器客户端一对多通信"是指一个服务器可以同时与多个客户端进行交互,这种模式常...

    java 开发规范文档 pdf

    根据给定文件的信息,我们可以提炼出以下关于Java开发规范的关键知识点: ### Java开发规范文档概览 #### 一、编程规范 **1.1 命名风格** ...开发者应当严格遵守这些规范,以构建高质量的软件系统。

    netty jar包安卓亲测可用

    通常会使用Netty的Worker线程池来处理网络I/O,而将业务逻辑处理放在单独的工作线程中,以避免阻塞UI。 总的来说,这个“netty jar包安卓亲测可用”的压缩包为Android开发者提供了一个经过验证的、强大的网络通信...

    servlet整合quartz2所需quartz2包

    SLF4J提供了一种标准的方式来插入日志框架,使得开发者可以在不修改代码的情况下切换不同的日志实现。`slf4j-api-1.6.1.jar`是API接口,而`slf4j-log4j12-1.6.1.jar`是将SLF4J绑定到Log4j的具体实现,使得Quartz2的...

    项目13:13项目的解决方案

    8. **多线程**:Java提供了内置的Thread类和Runnable接口来支持并发编程,项目中可能包含线程池、同步机制(synchronized关键字、Lock接口)的使用。 9. **网络编程**:如果是网络应用,可能会用到Socket编程,实现...

    开发手册,Java

    - 使用线程池管理线程生命周期,避免直接使用`new Thread()`创建线程。 - 对共享资源的访问使用同步机制(如`synchronized`关键字、`ReentrantLock`等)。 - 使用`AtomicInteger`等原子类来进行线程安全的计数...

    Microsoft.Net常见问题集锦

    - 处理大量并发数据通常需要使用多线程或异步处理技术,如线程池、任务并行库(TPL)、异步/等待关键字等。同时还需要考虑数据的存储和访问策略,如使用高性能的数据结构和数据库索引。 19. **进程和线程的区别?*...

Global site tag (gtag.js) - Google Analytics