技术栈
- redis
- shiro
- logback
- slf4j
- zipkin
- actuator
- elk
技术栈
平台相关
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进行滚动升级。