基于CSE的微服务架构实践-Spring Boot技术栈选型
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来满足业务开发需求。
业务场景 | 技术选型 | 选型考虑 |
网关 | CSE Edge Service | 非常高效的异步通信支持的网关实现,同时最大限度开放了底层vert.x API,转发逻辑可以由业务灵活定制。 |
实例隔离、重试、隔离仓等 | CSE RPC内置功能 | Hystrix在早期应用广泛,但是由于其性能问题、错误定位以及在业务场景上适应性问题,不建议用户采用,最新版本目前已经停止维护。 |
数据库访问 | Spring Data JPA | Spring |
Redis访问 | Spring Data Redis | Spring |
消息中间件 | Spring Kafka, spring-boot-starter-activemq等 | Spring |
分布式事务 | ServiceComb pack (TCC) | Spring未提供分布式事务支持 |
认证鉴权 | Spring Security | Spring |
从上面功能看,除了网关服务,用户开发习惯基本和Spring Boot保持一致。上面网关的选型继续采用CSE Edge Service,是因为其他网关都没有提供“接口兼容转发能力”,这个能力,只有CSE框架能够提供,这个特性在灰度发布等应用场景下非常有用,允许用户多个不兼容的微服务版本同时并存,可以实现不兼容场景的升级零中断。
上面展示了“接口兼容转发能力”是如何工作的。采用CSE Edge Service的另外一个理由,是它提供了原始的路由扩展能力和异步编程能力。公开原始路由扩展能力使得用户可以自由的定制各种复杂的路由规则,这个在单体应用改造等需要“持续迭代演进”,多种开发技术并存和需要频繁调整路由规则的场景非常重要,而异步编程能力对于性能优化则是非常重要的。当然灵活的定制能力和异步编程接口都使得Edge Service在使用上显得复杂。从经验看,理解这种复杂性是必要的,网关在业务系统中扮演者举足轻重的作用,开发者需要理解其工作原理,以更好的让应用系统适应各种复杂的性能优化需要。当然掌握这种复杂性也不难,虽然编码复杂,但是网关功能单一,随着技能的深入,掌握优化技巧是很迅速的。给“业务”设置一些必要的技巧,让开发者保持技术热情,有时候会有意外的收获。
- 点赞
- 收藏
- 关注作者
评论(0)