基于CSE的微服务架构实践-Spring Boot技术栈选型
【摘要】 本文在前一篇“基于CSE的微服务架构实践-基础架构”基础上,介绍了在Spring Boot中集成CSE的技术选型参考。本文介绍了Spring Boot集成CSE的基本原理和工作流程,Spring Boot进行微服务开发组件选型参考,以及CSE的Edge Service的选型考量。
Spring Boot技术使得用户开发Spring应用更加容易,而Spring是JAVA领域被广泛使用的框架。它提供了大量的组件供开发者使用,可以简化用户开发步骤,提升开发效率。CSE能够很好的被Spring Boot集成,集成以后,程序运行采用CSE运行时,能够使用CSE提供的各种开箱即用的能力,同时能够很好的使用Spring Boot提供的其他开发组件。
CSE在Spring Boot集成的原理是将Spring MVC(DispatcherServlet)提供的REST框架替换为CSE(RestServlet)提供的REST框架。
这两个框架也是可以并存的,只需要给两个Servlet指定不一样的URL前缀即可。
server.servlet.path=/mvc
servicecomb.rest.servlet.urlPattern=/cse/*
Spring MVC和CSE都采用Spring MVC提供的标签定义REST接口,CSE支持的标签集合是Spring MVC的子集,CSE去掉了一些不符合Open API要求的开发支持,要求开发者在定义接口的时候,更加规范。这意味着用户任何时候,都可以非常方便的将CSE开发的应用替换为Spring Boot应用,而不需要做任何改动。
Spring MVC和CSE的本质区别在于处理流程。Spring MVC的主要运行逻辑在客户端包括一系列的MessageConverters,在服务端的主要处理逻辑则在DispatcherServlet,可以由用户注入各种过滤器(Filter)和拦截器(Interceptor)。
CSE运行逻辑的特点是统一了客户端和服务端的处理模型,灵活配置一系列的Hanlder,并且引入了契约和异步处理机制。
由于CSE提供的一系列开发能力都是开箱即用的,因此能够快速在Spring Boot应用中构建商业特性。同时CSE引入了Open API作为整个运行时基础,能够更好的对服务进行接口管控,并且提供了大量的创新能力。
Spring Boot选型下,用户可以使用大量Spring Boot Starters来满足业务开发需求。
从上面功能看,除了网关服务,用户开发习惯基本和Spring Boot保持一致。上面网关的选型继续采用CSE Edge Service,是因为其他网关都没有提供“接口兼容转发能力”,这个能力,只有CSE框架能够提供,这个特性在灰度发布等应用场景下非常有用,允许用户多个不兼容的微服务版本同时并存,可以实现不兼容场景的升级零中断。
上面展示了“接口兼容转发能力”是如何工作的。采用CSE Edge Service的另外一个理由,是它提供了原始的路由扩展能力和异步编程能力。公开原始路由扩展能力使得用户可以自由的定制各种复杂的路由规则,这个在单体应用改造等需要“持续迭代演进”,多种开发技术并存和需要频繁调整路由规则的场景非常重要,而异步编程能力对于性能优化则是非常重要的。当然灵活的定制能力和异步编程接口都使得Edge Service在使用上显得复杂。从经验看,理解这种复杂性是必要的,网关在业务系统中扮演者举足轻重的作用,开发者需要理解其工作原理,以更好的让应用系统适应各种复杂的性能优化需要。当然掌握这种复杂性也不难,虽然编码复杂,但是网关功能单一,随着技能的深入,掌握优化技巧是很迅速的。给“业务”设置一些必要的技巧,让开发者保持技术热情,有时候会有意外的收获。
相关文章
- spring: 使用profiles选择数据源(结合嵌入式数据源EmbeddedDatabaseBuilder)
- spring boot: spring Aware的目的是为了让Bean获得Spring容器的服务
- Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling
- Spring Boot 整合 Log4j2 日志并压测性能
- spring boot2X 获取版本号
- Spring boot整合log4j2
- spring boot 2 : 开发快递100订阅运单数据(spring boot v2.5.4)
- Spring Boot使用redis处理重复点赞的问题
- Spring Boot:定制拦截器
- spring的controller默认是单例还是多例
- Java Spring源码研究之BeanNameUrlHandlerMapping
- MongoDB 入门教程系列之二:使用 Spring Boot 操作 MongoDB
- Atitit spring注解事务的demo与代码说明 目录 1.1. Spring框架中,要如何实现事务?有一个注解,@EnableTransactionManagement1 1.2. 事务管理
- Atitit spring单元测试 注解 获取服务名 Spring文件单独放在一个文件夹,去掉dubbo配置,方便测试 里面包含的mybatis 找不到,只好设置成相对于class绝对路径可以了
- 优雅处理 Spring Boot 日志文件:高效、可维护的日志管理方案详解
- 【spring】Spring Data --Spring Data JPA
- 学习Spring Boot:(二十六)使用 RabbitMQ 消息队列
- spring boot + redis --- 心得
- Spring Boot 项目打包问题集锦: jar依赖多出boot-inf 文件夹问题/多环境动态打包/缺少BOOT-INF目录问题等...
- Spring MVC 学习总结(二)——控制器定义与@RequestMapping详解
- Spring Mvc和Spring Boot配置Tomcat支持Https
- 009-Spring Boot 事件监听、监听器配置与方式、spring、Spring boot内置事件
- Spring MVC视图解析器