共计 2123 个字符,预计需要花费 6 分钟才能阅读完成。
0. 前言
这是一个新的系列,来源于工作中的一个需求,领导准备新开一个项目线路,要求使用 Java,项目符合现有主流技术,并要求对并发量有一定的承受能力,支持扩展。我和公司的几个小伙伴一起沟通了一下,这不就是标准的 Spring Cloud 微服务的系统架构吗。
之前读过小高之前发的文章的小伙伴也清楚我是 C# 开发,不过想当年我也系统学过 Java,多年下来虽然手生,但也好歹没有落下技术。于是就揽下了这个活。毕竟学习是终身的。
不怎么简明的介绍了这个系列成立的原因,让我们言归正传,这个系列是我在搭建该项目过程的一个总结,如果后续开发中对框架有调整,也会在这个系列发布后续的更新。这也是为什么叫实战系列,而不是实战教程的原因。
那么,有兴趣的小伙伴,跟我一起来吧~
1. 项目结构
项目采用 maven 作为软件包管理工具,Spring boot+Spring Cloud 作为项目基础架构,设有配置中心、服务发现中心、网关中心和链路追踪中心以及服务集群,其中服务集群之间添加链路熔断和负载均衡机制。
当然,目前参照了几个系统都按照这种逻辑搭建的框架,所以我们大致上也参考了这个模型。具体如下图:
2. 主要技术组件使用
这里大概介绍一下,我在实践中选用的技术组件,选用这些技术没多少原因,很大程度上考虑到团队喜好以及后续维护的方便,还有就是官方团队的维护上考虑。
2.1 Maven
Maven 翻译为 ” 专家 ”、” 内行 ”,是 Apache 下的一个纯 Java 开发的开源项目,我主要用来进行包管理。老开发大多都知道如果一个项目使用了大量的三方包,如果没有统一的三方包管理就会出现三个人可能会引用四个版本的同一个包,这对于项目协同来说简直就是噩梦。所以 Maven 诞生了,从此 Javaer 有了一个进行包管理的神器。再次声明一下哈,maven 不只是用来做包管理的,只是我使用的基本想法。当然还有编译、批量测试等功能。
2.2 Spring Boot
Spring Boot 被誉为是 Spring 的一个跨时代发明,一度被认为是“不能更好了”的技术。Spring Boot 解决了开发一个 Web 网站必须启动一个 Tomcat 或者其他的服务器才能进行调试的问题;又解决了 Spring 之前需要大量 xml 文件配置;Spring Boot 集成了很多常见的 Bean 组件,在开发过程中只需要设置对应的参数值就可以了。
Spring Boot 创建了 Spring Boot maven 的 pom 文件,这个文件里设置了大量 java 三方库的版本,依赖于一个 Spring Boot 的 pom 文件就可以统一的使用对应版本的 java 三方库。
2.3 Spring Cloud
Spring Cloud,嗯,怎么说呢。Spring Cloud 可以说是一系列框架的有序集合,利用 Spring Boot 简化了基础设施的开发。Spring Cloud 是实现微服务的一个有力的武器,我们利用 Spring Cloud 搭建服务发现注册、配置中心、消息总线、负载均衡、断路器和数据监控等。
总而言之,这是一个很神奇的项目。
2.4 Nacos
Nacos,阿里巴巴又一个“KPI”产品。最开始的时候,很多人都说又是阿里的一个 KPI 产品。但实际上 Nacos 现在成长为业内一个很强的技术框架,它集成了服务发现、配置管理等功能。
以下是我从 nacos 官方扒的图,有兴趣的小伙伴可以看看。
2.5 Feign 服务接口化
Feign 的英文是“伪装、变形”等意思,是一种 HTTP 调用框架。它使 Http 调用变成了一种接口式的调用,而不用写一堆 Http 请求的代码。在 Spring Cloud 中,对 Feign 进行了加强,使得在各个服务之间可以通过定义 Interface 来调用其他服务的代码。与此同时,Spring Cloud Feign 集成了 Ribbon 作为负载均衡组件,Hystrix 作为链路熔断组件。
具体为什么要使用负载均衡和链路熔断可以参考该系列的 Feign 配置篇。
2.6 Zipkin
之所以使用链路追踪系统,主要是为了跟踪各服务之间的调用信息。跟踪之后,可以通过链路信息确认各服务之间的调用关系;可以在发生错误的时候,通过链路追踪定位具体的错误;可以根据链路信息确认服务之间的负载是否均衡,是否满负荷是否超负荷等。
而 Zipkin 正是链路追踪系统中的佼佼者,项目中选型选中了 Zipkin,让我们欢呼吧。
2.7 ElasticSearch
在使用了链路追踪之后,每次都会启动大量的链路数据,所以就需要一个数据库,为了方便查找然后选中了 ElasticSearch。那么什么是 ElasticSearch 呢?
暂且抛开官网中的 Elastic Stack,因为我也不知道它说的是啥。简单来讲,ElasticSearch 是一种文档型的数据引擎或者数据库。我们可以通过 ElasticSearch 实现全文检索功能。
2.8 其他
项目还集成了 Spring Boot Admin,计划集成 ELK、jwt 这些框架。不过业务暂时没有其他方面的需求,所以暂时没有加入其他组件。后续如有变更会更新到该系列中。
3. 其他
这一篇简单介绍了一下项目的技术选型,从下一篇开始正式说明我是如何从零开始搭建项目框架的。真的是从零开始,很多技术框架都是新接触的。
更多内容烦请关注我的博客《高先生小屋》