Java面试必备:Feign 与 Dubbo 的区别:微服务通信框架对比_dubbo和feign的区别
SpringCloud面试题 - Feign 和 Dubbo 的区别?
1. 概述
Feign 和 Dubbo 都是 Java 生态中广泛使用的微服务通信框架,但它们在设计理念和使用场景上有显著差异。
#mermaid-svg-jkfBoLKsGPOK7FHz {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jkfBoLKsGPOK7FHz .error-icon{fill:#552222;}#mermaid-svg-jkfBoLKsGPOK7FHz .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jkfBoLKsGPOK7FHz .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-jkfBoLKsGPOK7FHz .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jkfBoLKsGPOK7FHz .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jkfBoLKsGPOK7FHz .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jkfBoLKsGPOK7FHz .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jkfBoLKsGPOK7FHz .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jkfBoLKsGPOK7FHz .marker.cross{stroke:#333333;}#mermaid-svg-jkfBoLKsGPOK7FHz svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jkfBoLKsGPOK7FHz .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-jkfBoLKsGPOK7FHz .cluster-label text{fill:#333;}#mermaid-svg-jkfBoLKsGPOK7FHz .cluster-label span{color:#333;}#mermaid-svg-jkfBoLKsGPOK7FHz .label text,#mermaid-svg-jkfBoLKsGPOK7FHz span{fill:#333;color:#333;}#mermaid-svg-jkfBoLKsGPOK7FHz .node rect,#mermaid-svg-jkfBoLKsGPOK7FHz .node circle,#mermaid-svg-jkfBoLKsGPOK7FHz .node ellipse,#mermaid-svg-jkfBoLKsGPOK7FHz .node polygon,#mermaid-svg-jkfBoLKsGPOK7FHz .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jkfBoLKsGPOK7FHz .node .label{text-align:center;}#mermaid-svg-jkfBoLKsGPOK7FHz .node.clickable{cursor:pointer;}#mermaid-svg-jkfBoLKsGPOK7FHz .arrowheadPath{fill:#333333;}#mermaid-svg-jkfBoLKsGPOK7FHz .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jkfBoLKsGPOK7FHz .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jkfBoLKsGPOK7FHz .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-jkfBoLKsGPOK7FHz .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-jkfBoLKsGPOK7FHz .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jkfBoLKsGPOK7FHz .cluster text{fill:#333;}#mermaid-svg-jkfBoLKsGPOK7FHz .cluster span{color:#333;}#mermaid-svg-jkfBoLKsGPOK7FHz div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jkfBoLKsGPOK7FHz :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}微服务通信框架FeignDubboHTTP/RESTRPC
2. 核心区别
3. 架构对比
Feign 架构
#mermaid-svg-LSC6Rmy2V4cYvOQP {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-LSC6Rmy2V4cYvOQP .error-icon{fill:#552222;}#mermaid-svg-LSC6Rmy2V4cYvOQP .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-LSC6Rmy2V4cYvOQP .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-LSC6Rmy2V4cYvOQP .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-LSC6Rmy2V4cYvOQP .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-LSC6Rmy2V4cYvOQP .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-LSC6Rmy2V4cYvOQP .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-LSC6Rmy2V4cYvOQP .marker{fill:#333333;stroke:#333333;}#mermaid-svg-LSC6Rmy2V4cYvOQP .marker.cross{stroke:#333333;}#mermaid-svg-LSC6Rmy2V4cYvOQP svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-LSC6Rmy2V4cYvOQP .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-LSC6Rmy2V4cYvOQP text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-LSC6Rmy2V4cYvOQP .actor-line{stroke:grey;}#mermaid-svg-LSC6Rmy2V4cYvOQP .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-LSC6Rmy2V4cYvOQP .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-LSC6Rmy2V4cYvOQP #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-LSC6Rmy2V4cYvOQP .sequenceNumber{fill:white;}#mermaid-svg-LSC6Rmy2V4cYvOQP #sequencenumber{fill:#333;}#mermaid-svg-LSC6Rmy2V4cYvOQP #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-LSC6Rmy2V4cYvOQP .messageText{fill:#333;stroke:#333;}#mermaid-svg-LSC6Rmy2V4cYvOQP .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-LSC6Rmy2V4cYvOQP .labelText,#mermaid-svg-LSC6Rmy2V4cYvOQP .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-LSC6Rmy2V4cYvOQP .loopText,#mermaid-svg-LSC6Rmy2V4cYvOQP .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-LSC6Rmy2V4cYvOQP .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-LSC6Rmy2V4cYvOQP .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-LSC6Rmy2V4cYvOQP .noteText,#mermaid-svg-LSC6Rmy2V4cYvOQP .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-LSC6Rmy2V4cYvOQP .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-LSC6Rmy2V4cYvOQP .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-LSC6Rmy2V4cYvOQP .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-LSC6Rmy2V4cYvOQP .actorPopupMenu{position:absolute;}#mermaid-svg-LSC6Rmy2V4cYvOQP .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-LSC6Rmy2V4cYvOQP .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-LSC6Rmy2V4cYvOQP .actor-man circle,#mermaid-svg-LSC6Rmy2V4cYvOQP line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-LSC6Rmy2V4cYvOQP :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}客户端FeignRibbon服务端调用接口方法获取服务实例返回实例列表HTTP请求HTTP响应返回结果客户端FeignRibbon服务端
Dubbo 架构
#mermaid-svg-Qx1dQnaxFIsEmCfe {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Qx1dQnaxFIsEmCfe .error-icon{fill:#552222;}#mermaid-svg-Qx1dQnaxFIsEmCfe .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Qx1dQnaxFIsEmCfe .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-Qx1dQnaxFIsEmCfe .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Qx1dQnaxFIsEmCfe .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Qx1dQnaxFIsEmCfe .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Qx1dQnaxFIsEmCfe .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Qx1dQnaxFIsEmCfe .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Qx1dQnaxFIsEmCfe .marker.cross{stroke:#333333;}#mermaid-svg-Qx1dQnaxFIsEmCfe svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Qx1dQnaxFIsEmCfe .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Qx1dQnaxFIsEmCfe text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-Qx1dQnaxFIsEmCfe .actor-line{stroke:grey;}#mermaid-svg-Qx1dQnaxFIsEmCfe .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-Qx1dQnaxFIsEmCfe .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-Qx1dQnaxFIsEmCfe #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-Qx1dQnaxFIsEmCfe .sequenceNumber{fill:white;}#mermaid-svg-Qx1dQnaxFIsEmCfe #sequencenumber{fill:#333;}#mermaid-svg-Qx1dQnaxFIsEmCfe #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-Qx1dQnaxFIsEmCfe .messageText{fill:#333;stroke:#333;}#mermaid-svg-Qx1dQnaxFIsEmCfe .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Qx1dQnaxFIsEmCfe .labelText,#mermaid-svg-Qx1dQnaxFIsEmCfe .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-Qx1dQnaxFIsEmCfe .loopText,#mermaid-svg-Qx1dQnaxFIsEmCfe .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-Qx1dQnaxFIsEmCfe .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-Qx1dQnaxFIsEmCfe .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-Qx1dQnaxFIsEmCfe .noteText,#mermaid-svg-Qx1dQnaxFIsEmCfe .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-Qx1dQnaxFIsEmCfe .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Qx1dQnaxFIsEmCfe .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Qx1dQnaxFIsEmCfe .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-Qx1dQnaxFIsEmCfe .actorPopupMenu{position:absolute;}#mermaid-svg-Qx1dQnaxFIsEmCfe .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-Qx1dQnaxFIsEmCfe .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-Qx1dQnaxFIsEmCfe .actor-man circle,#mermaid-svg-Qx1dQnaxFIsEmCfe line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-Qx1dQnaxFIsEmCfe :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}消费者提供者注册中心注册服务订阅服务返回提供者列表RPC调用返回结果消费者提供者注册中心
4. 代码示例对比
Feign 示例
// 1. 定义Feign客户端接口@FeignClient(name = \"user-service\", url = \"${user.service.url}\")public interface UserServiceClient { @GetMapping(\"/users/{id}\") User getUserById(@PathVariable(\"id\") Long id); @PostMapping(\"/users\") User createUser(@RequestBody User user);}// 2. 使用Feign客户端@Servicepublic class UserService { @Autowired private UserServiceClient userServiceClient; public User getUser(Long id) { return userServiceClient.getUserById(id); }}
Dubbo 示例
// 1. 服务提供者接口public interface UserService { User getUserById(Long id); User createUser(User user);}// 2. 服务提供者实现@Servicepublic class UserServiceImpl implements UserService { @Override public User getUserById(Long id) { // 实现逻辑 }}// 3. 服务消费者@Servicepublic class ConsumerService { @Reference private UserService userService; public User getUser(Long id) { return userService.getUserById(id); }}
5. 详细对比分析
5.1 通信协议
-
Feign: 基于HTTP协议,通常是RESTful风格
- 优点:通用性强,跨语言支持好
- 缺点:性能开销较大
-
Dubbo: 自定义二进制RPC协议
- 优点:高性能,低延迟
- 缺点:跨语言支持需要额外工作
#mermaid-svg-7kbpwmDJXsDtK480 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7kbpwmDJXsDtK480 .error-icon{fill:#552222;}#mermaid-svg-7kbpwmDJXsDtK480 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-7kbpwmDJXsDtK480 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-7kbpwmDJXsDtK480 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-7kbpwmDJXsDtK480 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-7kbpwmDJXsDtK480 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-7kbpwmDJXsDtK480 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-7kbpwmDJXsDtK480 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-7kbpwmDJXsDtK480 .marker.cross{stroke:#333333;}#mermaid-svg-7kbpwmDJXsDtK480 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-7kbpwmDJXsDtK480 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-7kbpwmDJXsDtK480 .cluster-label text{fill:#333;}#mermaid-svg-7kbpwmDJXsDtK480 .cluster-label span{color:#333;}#mermaid-svg-7kbpwmDJXsDtK480 .label text,#mermaid-svg-7kbpwmDJXsDtK480 span{fill:#333;color:#333;}#mermaid-svg-7kbpwmDJXsDtK480 .node rect,#mermaid-svg-7kbpwmDJXsDtK480 .node circle,#mermaid-svg-7kbpwmDJXsDtK480 .node ellipse,#mermaid-svg-7kbpwmDJXsDtK480 .node polygon,#mermaid-svg-7kbpwmDJXsDtK480 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-7kbpwmDJXsDtK480 .node .label{text-align:center;}#mermaid-svg-7kbpwmDJXsDtK480 .node.clickable{cursor:pointer;}#mermaid-svg-7kbpwmDJXsDtK480 .arrowheadPath{fill:#333333;}#mermaid-svg-7kbpwmDJXsDtK480 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-7kbpwmDJXsDtK480 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-7kbpwmDJXsDtK480 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-7kbpwmDJXsDtK480 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-7kbpwmDJXsDtK480 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-7kbpwmDJXsDtK480 .cluster text{fill:#333;}#mermaid-svg-7kbpwmDJXsDtK480 .cluster span{color:#333;}#mermaid-svg-7kbpwmDJXsDtK480 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-7kbpwmDJXsDtK480 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}HTTP/文本二进制Feign网络传输Dubbo
5.2 服务发现
-
Feign: 依赖外部服务发现组件(Eureka, Consul等)
@FeignClient(name = \"user-service\") // 通过服务名发现
-
Dubbo: 内置服务发现机制,支持多种注册中心
@Reference(url = \"dubbo://localhost:20880\") // 直连或注册中心
5.3 负载均衡
-
Feign: 集成Ribbon实现客户端负载均衡
- 策略:轮询、随机、响应时间加权等
-
Dubbo: 内置多种负载均衡策略
- 策略:随机、轮询、最少活跃调用等
6. 性能对比
7. 适用场景
Feign 适用场景
- Spring Cloud生态系统项目
- 需要与多种语言服务通信
- 简单的RESTful服务调用
- 快速原型开发
Dubbo 适用场景
- 高性能要求的内部服务调用
- 复杂参数类型的调用
- 需要多种RPC特性的场景(如隐式传参)
- 已有Dubbo基础设施的项目
8. 总结
Feign和Dubbo各有优劣,选择取决于项目需求:
- 如果需要简单、通用的HTTP通信,选择Feign
- 如果需要高性能、低延迟的RPC,选择Dubbo
- 在Spring Cloud生态中,Feign集成更顺畅
- 在传统分布式系统中,Dubbo可能更合适
#mermaid-svg-GDBT42Vy1im6EdR7 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GDBT42Vy1im6EdR7 .error-icon{fill:#552222;}#mermaid-svg-GDBT42Vy1im6EdR7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GDBT42Vy1im6EdR7 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-GDBT42Vy1im6EdR7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GDBT42Vy1im6EdR7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GDBT42Vy1im6EdR7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GDBT42Vy1im6EdR7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GDBT42Vy1im6EdR7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GDBT42Vy1im6EdR7 .marker.cross{stroke:#333333;}#mermaid-svg-GDBT42Vy1im6EdR7 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GDBT42Vy1im6EdR7 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GDBT42Vy1im6EdR7 .cluster-label text{fill:#333;}#mermaid-svg-GDBT42Vy1im6EdR7 .cluster-label span{color:#333;}#mermaid-svg-GDBT42Vy1im6EdR7 .label text,#mermaid-svg-GDBT42Vy1im6EdR7 span{fill:#333;color:#333;}#mermaid-svg-GDBT42Vy1im6EdR7 .node rect,#mermaid-svg-GDBT42Vy1im6EdR7 .node circle,#mermaid-svg-GDBT42Vy1im6EdR7 .node ellipse,#mermaid-svg-GDBT42Vy1im6EdR7 .node polygon,#mermaid-svg-GDBT42Vy1im6EdR7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GDBT42Vy1im6EdR7 .node .label{text-align:center;}#mermaid-svg-GDBT42Vy1im6EdR7 .node.clickable{cursor:pointer;}#mermaid-svg-GDBT42Vy1im6EdR7 .arrowheadPath{fill:#333333;}#mermaid-svg-GDBT42Vy1im6EdR7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GDBT42Vy1im6EdR7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GDBT42Vy1im6EdR7 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-GDBT42Vy1im6EdR7 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-GDBT42Vy1im6EdR7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GDBT42Vy1im6EdR7 .cluster text{fill:#333;}#mermaid-svg-GDBT42Vy1im6EdR7 .cluster span{color:#333;}#mermaid-svg-GDBT42Vy1im6EdR7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GDBT42Vy1im6EdR7 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}REST/HTTP高性能RPC选择通信框架需求类型FeignDubboSpring Cloud生态传统分布式系统