技术栈

技术栈

平台相关

gradle

引入gradle管理spring boot和spring cloud相关的jar包。同时自定义gradle打包操作,实现定制化的打包、部署、发布等自动化流程。

spring boot

SpringBoot是一种全新的框架,目的是为了简化Spring应用的初始搭建以及开发过程。该框架使用特定的方式(集成starter,约定优于配置)来进行配置,从而使开发人员不需要再定义样板化的配置。SpringBoot提供了一种新的编程范式,可以更加快速便捷地开发Spring项目,在开发过程当中可以专注于应用程序本身的功能开发,而无需在Spring配置上花太大的工夫。

SpringBoot基于Spring4进行设计,继承了原有Spring框架的优秀基因。SpringBoot并不是一个框架,而是一些类库的集合。maven或者gradle项目导入相应依赖即可使用SpringBoot,而无需自行管理这些类库的版本。

spring cloud

Spring Cloud是一个基于Spring Boot实现的微服务应用开发工具,它为基于JVM的云应用开发中涉及的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。

apache dubbo

Dubbo是一个分布式服务框架,以及阿里巴巴内部的SOA服务化治理方案的核心框架。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。现已为apache基金会顶级项目。目前我们的系统架构依赖alibaba dubbo进行构建并部署在tomcat下运行,为了达到去tomcat的目的,现采用平滑升级到apache dubbo版本(2.7.1)以实现与spring boot的无缝对接。后续线上逐渐向spring clould套件过渡。

http rest

jersey

spring cloud(spring mvc)

Feign Client

使用spring cloud 中的feign作为远程调用,废弃了原来的dubbo方式。

Ribbon

使用ribbon实现负载均衡的远程调用。

Database

druid

采用druid驱动 ,暂时不使用spring boot默认的HikariCP。因为HikariCP不能实现最大查询条数限制的功能。原因是最大查询条数是通过对jdbc的ResultSet中的next方法进行拦截统计过查询结果fetch条数的。Druid通过ResultSetProxy接口扩展了ResultSet接口并通过其实现类ResultSetProxyImpl对next方法进行了拦截处理的扩展。

flywawy

spring boot 默认采用flyway对db脚本进行管理。只要classpath下引入flyway jar包后就可以按flyway的默认配置进行db脚本升级操作。

aop 事务

事务处理采用aop 全局拦截处理。

jpa和hibemate

采用spring 默认的 jpa,hibernate。

mybatis

较为复杂的查询,使用mybatis实现。

pagehelper

大数据量或者需要分页的时候,使用pagehelper。

redis

缓存

使用redis做为缓存中间件。

分布式锁

使用redis分布式锁的方式,实现分布式锁。

guava

使用guava作为本地缓存。使用LoadCache作为本地缓存,配置好数据来源后,直接从cache中取即可。

message

rabbit mq

使用rabbit mq作为消息中间件。

config manage

spring-cloud-starter-kubernates-config

微服务最终部署于kubernates集群中,所以kubernates集群中的配置,微服务需要能够读取。

nacos

使用nacos管理不同版本,不同环境的配置。同时对yaml格式的配置进行检测,版本管理。

security

shiro

使用shiro作为安全验证。

swagger

使用swagger作为接口文档管理。

log

logback

使用logback格式化输出日志,并根据配置进行管理。

slf4j

在代码中使用slf4j提供的jar进行输出

zipkin

微服务之间的调用采用zipkin进行跟踪。微服务将远程调用信息通过压缩的http post将信息上报给zipkin server,然后zipkin server提供可视化查询。

actuator

提供运行时监控指标。

elk

ElasticSearch、Logstash、Kibana实现日志数据的分析与可视化输出。

docker

微服务部署到kubernates集群中是以docker images的方式进行部署。所以微服务开发完毕后,使用ide相关的功能,结合gradle,将微服务打包成docker images,上传到私有得到docker镜像仓库。

kubernates

微服务最终运行在kubernates集群中,每次发布,集群从私有的docker镜像仓库中更新最新的docker images,然后使用kubernates进行滚动升级。