type
status
date
slug
summary
tags
category
icon
password
微服务架构中的进程和线程
我理解这些概念可能有点抽象,让我用更简单的方式来解释微服务架构中的进程和线程。
简单类比理解进程与线程
想象一个购物中心(服务器)里有多个独立的专卖店(微服务)。每个专卖店是一个独立的进程,有自己的空间和资源:
- 进程 = 专卖店:独立经营,有自己的库存、收银系统和员工
- 线程 = 专卖店员工:一个专卖店有多名员工同时工作,共享店铺资源
微服务架构中的进程
在微服务架构(如Spring Cloud)中:
- 每个微服务是一个独立的进程
- 每个微服务运行在自己的JVM(Java虚拟机)实例中
- 它们有独立的内存空间,互不干扰
- 一个微服务崩溃不会影响其他微服务
- 微服务独立部署
- 每个微服务可以独立更新、重启
- 可以部署在同一台服务器上,也可以分布在不同服务器上
微服务内部的线程
在一个微服务进程内部:
- 多个线程并行工作
- 处理HTTP请求的线程
- 数据库访问线程
- 后台任务线程
- 线程池管理
- Spring Boot默认使用Tomcat作为服务器
- Tomcat维护一个线程池来处理请求
- 当请求到达,从线程池分配一个线程处理该请求
实际例子:电商系统
想象一个电商系统的微服务架构:
- 用户服务(一个独立进程)
- 有10-200个线程处理用户登录、注册请求
- 所有这些线程共享同一个用户服务的内存和资源
- 订单服务(另一个独立进程)
- 有自己的10-200个线程处理订单相关请求
- 这些线程只能访问订单服务的内存和资源
- 库存服务(又一个独立进程)
- 有自己的线程池处理库存查询和更新
微服务间通信
微服务之间通过网络通信(HTTP/REST、消息队列等),而不是直接共享内存:
- 用户服务需要订单信息时,会发送HTTP请求到订单服务
- 订单服务处理完成后,返回结果给用户服务
线程池的重要性
在每个微服务中:
- 线程池大小很关键
- 太小:无法处理高并发请求
- 太大:消耗过多资源,可能导致服务器崩溃
- 默认配置
- Spring Boot默认最小10个线程
- 最大可扩展到200个线程
- 可以根据服务器性能和业务需求调整
总结来说,微服务架构中:每个微服务是一个独立的进程(JVM实例),内部有多个线程协同工作。这种设计让系统更加灵活、可扩展,同时提高了系统的容错能力。
Spring Boot应用默认使用Tomcat作为内嵌服务器,Tomcat使用基于线程池的并发模型

Tomcat线程模型详解
在Spring Boot微服务中,Tomcat服务器的线程模型包含:
- Acceptor线程:接收客户端Socket连接请求
- Poller线程:处理已连接的Socket,检测I/O事件
- 工作线程池:处理HTTP请求的线程池
- 默认最小线程数:10
- 默认最大线程数:200
- 可通过配置文件调整
当HTTP请求到达时:
- Acceptor线程接收连接
- Poller线程将请求分配给工作线程池中的一个线程
- 工作线程处理整个请求,通过Spring MVC的DispatcherServlet分发到对应的