先交代一下背景。我手上有一套跑了一年多的Nacos集群,注册中心和配置中心都挂在上面,业务端是Spring Cloud Alibaba体系,还有一部分Dubbo服务也走Nacos做服务发现。年初排进信创改造清单,第一项就是把Nacos内置的Tomcat替换成保兰德的应用服务器中间件(资料里也有写作宝兰德的,同一家)。改造过程中踩了不少坑,也和中间件厂商来回拉锯了好几轮。这篇就把整个替换思路、实操步骤和问题排查方法整理出来,给后面要做同样事情的同学做个参照。
先说个基本判断:这个活儿的难点不在“换一个中间件”本身,而在“换完之后Nacos还能不能按原来的方式工作”。Nacos封装得很深,内置Tomcat是它对外提供HTTP服务的基础设施,控制台界面、开放API、配置拉取、服务注册,全都走这一层。你把它换掉,本质上不是删一个组件再加一个组件,而是把Nacos的运行时环境换了,牵一发动全身。所以动工之前,我建议先把下面这几个问题想清楚,再决定怎么改。
1. 改造前先搞懂:Nacos里Tomcat到底是干什么的
1.1 Nacos的架构里,Tomcat管着哪一块
Nacos拆开看,服务端就两大块职责:注册中心和配置中心。对外表现上,控制台页面是一套Web应用,Open API是一组HTTP接口,客户端SDK拉配置、注册实例、发送心跳,也都是通过HTTP或gRPC协议与服务端交互的。
在Nacos 1.x时代,服务端基本就是一个Spring Boot应用,内嵌了Tomcat作为Servlet容器,负责接收所有HTTP请求。控制台的静态资源、接口路由、鉴权过滤器,全在Tomcat的容器里跑。到了2.x版本,虽然引入了gRPC作为客户端长连接通信的主通道,控制台和一大半HTTP API依然走的是内置Tomcat。也就是说,你通过浏览器打开Nacos的控制台,或者用curl调它的Open API,背后处理的都是这个内置Tomcat。
说人话就是:Nacos从设计之初就默认“你是跑在内嵌Servlet容器里的”,它不是一个可以直接扔到任意Java应用服务器里跑的标准Web应用。做信创替换时,需要把它改造成可以被外置应用服务器接管的形式,这就是整个改造的核心。
1.2 替换前必须想清楚的三个问题
第一个问题:替换范围。你换的是HTTP层的内置Tomcat,还是连2.x的gRPC通道一起换?保兰德中间件是应用服务器,它接管的是Servlet规范的请求处理,gRPC是另一个协议,不在同一层。改造时通常只替换HTTP/Servlet这一层,gRPC端口和通讯逻辑保持原样。
第二个问题:对外端口和协议。Nacos原来的8848端口提供HTTP服务,9848端口提供gRPC服务,9849是gRPC服务端向集群其他节点同步用的端口。改造后,8848上的HTTP服务由保兰德接管,端口规划需要重新设计,不能和保兰德默认端口冲突。
第三个问题:数据与集群层面。Nacos的配置数据、服务实例数据都存在它的存储层(默认是内嵌Derby,生产建议用MySQL),这部分和运行容器完全解耦。替换Tomcat不会动数据和集群成员的选举逻辑,但这个前提是改造过程中不能引入对配置目录、数据目录的破坏性改动。
1.3 为什么非要把“中间件”这个身份落实下来
从纯技术角度讲,Nacos继续用内置Tomcat一点问题没有,跑得还挺稳。但信创改造看的不只是功能,还看整条技术链路上每个组件是否有明确的产品形态、生命周期、安全可控性。内置Tomcat是Nacos代码里的一个依赖,它没有独立的交付形态,运维侧无法对它做单独的安全加固、补丁升级、运行监控。保兰德应用服务器是一个标准的、可独立部署的中间件产品,有完整的管理控制台、启停脚本、安全配置体系,符合应用服务器类中间件的替换要求。
理解了这一点,就不会陷入“到底有没有必要换”的纠结里。接下来就是在技术层面把替换变成一件可控的事。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 改造前的环境准备与风险评估
2.1 版本选型:Nacos和保兰德的兼容性怎么对
版本兼容是整个改造里最容易出问题的地方。Nacos 1.x比较老,内置Tomcat的逻辑和Spring Boot版本都比较旧,放到新版保兰德上可能出现Servlet API版本不匹配、JSP引擎缺失等问题。Nacos 2.x的内置Tomcat和依赖体系新一些,但2.x引入了gRPC,改造时要处理的东西更多——不是不好改,而是要评估清楚。
我的建议是:如果条件允许,先把Nacos升级到2.2.0以上的稳定版本再做替换,版本太老会增加
