微服务容器化开发实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 技术栈选型

如2.1节介绍,通过对比Dubbo服务框架和Spring Cloud微服务框架的异同之处,服务调用侵入性以及社区成熟度和活跃度等,选择Spring Cloud微服务框架作为微服务开发的基础框架。微服务运行在Docker容器中具备天然的优势,而Docker容器服务编排的领导者是Google公司开发的Kubernetes。考虑到Spring Cloud和Kubernetes都具备服务注册发现、路由与负载均衡、配置管理等能力,所以笔者的生产项目只使用了Spring Cloud微服务框架的网关组件、调用链追踪组件、熔断组件这3个组件,其余使用Kubernetes提供的能力。

基于Oracle、Weblogic等单体架构的项目,在进行微服务容器化改造时,为了能够实现快速开发迁移、方便部署运维、扩容简单等特性,技术栈选型主要涉及开发、编译、测试、部署、服务编排等。

如图2-3所示,技术栈选型分为运行技术栈(左侧线框)和开发技术栈(右侧线框)。基于Docker容器的系统逻辑架构主要分为展示层、网关鉴权层、微服务层、编排与调度层、存储与消息层。

img

图2-3 技术栈选型全景图

(1)展示层:可以适配电脑端Web、手机端App或第三方调用API。

(2)网关鉴权层:使用Zuul作为API网关,对调用进行路由分发和权限校验,基于SpringSecurity、Auth2和JWT的认证鉴权技术。

(3)微服务层:分为前端微服务和后端微服务。前端微服务面向用户业务,为前端提供数据;后端微服务面向数据库、消息等组件,为前端微服务提供调用。

(4)编排与调度层:使用基于Rancher技术的Kubernetes编排管理集群Pod,使用Harbor做Docker的私有镜像仓库,使用OpenSSL对镜像仓库服务进行安全访问。

(5)存储与消息层:为了使系统在部署到生产环境中之后依然能快速稳定地运行,持久化层、消息、日志等组件先不部署在Kubernetes集群中,而采用独立部署。

开发技术栈主要使用GitLab做代码管理、AngularJS做前后端分离、Spring Boot+Spring Cloud+Mybatis做微服务应用开发、Maven做模块依赖和编译构建管理、Jekins做持续开发集成部署的CI/CD管理、Sonar做代码规范漏洞扫描等。