我正在参加「掘金·启航计划」
一、背景
在从事java开发工作的路漫漫上,我们是披荆斩浪,不断学习,从Java的基础语法到工作项目上的各种框架,我们苦笑着知难而上,随着微服务的发展普及,掌握学习微服务是我们每个Java程序员必须掌握的知识,微服务组件有许多,不同架构师可能采用不同组件搭建微服务项目,下面就跟着我采用下面得组件一起搭建一下微服务项目吧。
二、技术架构
架构组成
Nacos + Gateway + Springboot + SpringCloud + OpenFeign + Skywalking
- Nacos:配置中心和服务注册中心
- Gateway:服务网关
- Springboot:Springboot框架
- SpringCloud:微服务架构
- OpenFeign:微服务间调用
- Skywalking:链路追踪,日志查看
名词解释
Nacos
Nacos 是阿里巴巴推出来的一个新开源项目,这是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
Gateway
服务网关的作用在微服务框架中可以提供统一入口、鉴权校验、动态路由、降低耦合度的功能;Gateway本身就是基于webflux(webflux是一个非阻塞的web框架,类似springmvc)基础之上实现的,底层则使用了高性能的Reactor模式通信框架Netty;一套非阻塞的网络异步网关,是在Spring生态系统之上构建的API网关服务,基于Spring5,SpringBoot2和ProjectReactor等技术。Gateway旨在提供-种简单而有效的方式来对API进行路由, 以及提供一些强大的过滤器功能, 例如: 熔断、限流、重试等。
三要素
- Route(路由) 路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由
- Predicate(断言) 判断请求的转发条件
- Filter(过滤) 指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。
工作原理
- 客户端向Spring Cloud Gateway发出请求,然后在Gateway Handler Mapping中找到与请求相匹配的路由,将其发送到Gateway web hander
- Handler再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。过滤器之间用虚线分开是因为过滤器可能会在发送代理请求之前( "pre" )或之后( "post" )执行业务逻辑。
- Filter在"pre” 类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,在"post"类型的过滤器中可以做响应内容、响应头的修改,日志的输出,流量监控等有着非常重要的作用。
Springboot
Springboot是Spring的一套快速配置脚手架,SpringCloud是基于SpringBoot实现的微服务架构开发组件,SpringCloud也需要对应SpringBoot的版本;Springboot专注于快速、方便集成的单个个体,SpringCloud是关注全局的服务治理框架;springboot使用了默认大于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置,SpringCloud很大的一部分是基于Springboot来实现。
SpringCloud
Spring Cloud 是分布式微服务架构的一站式解决方案,它提供了一套简单易用的编程模型,使我们能在 Spring Boot 的基础上轻松地实现微服务系统的构建。 Spring Cloud 被称为构建分布式微服务系统的“全家桶”,它并不是某一门技术,而是一系列微服务解决方案或框架的有序集合。它将市面上成熟的、经过验证的微服务框架整合起来,并通过 Spring Boot 的思想进行再封装,屏蔽调其中复杂的配置和实现原理,最终为开发人员提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。 Spring Cloud 中包含了 spring-cloud-config、spring-cloud-bus 等近 20 个子项目,提供了服务治理、服务网关、智能路由、负载均衡、断路器、监控跟踪、分布式消息队列、配置管理等领域的解决方案。
Spring Cloud 本身并不是一个拿来即可用的框架,它是一套微服务规范,共有两代实现。 Spring Cloud Netflix 是 Spring Cloud 的第一代实现,主要由 Eureka、Ribbon、Feign、Hystrix 等组件组成。 Spring Cloud Alibaba 是 Spring Cloud 的第二代实现,主要由 Nacos、Sentinel、Seata 等组件组成。
OpenFeign
OpenFeign是一种声明式、模板化的HTTP客户端。在SpringCloud中使用OpenFeign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。
Skywalking
Skywalking是一个国产的开源框架,2015年有吴晟个人开源,2017年加入Apache孵化器,国人开源的产品,主要开发人员来自于华为,2019年4月17日Apache董事会批准SkyWalking成为顶级项目,支持Java、.Net、NodeJs等探针,数据存储支持Mysql、Elasticsearch等,跟Pinpoint一样采用字节码注入的方式实现代码的无侵入,探针采集数据粒度粗,但性能表现优秀,且对云原生支持,目前增长势头强劲,社区活跃。
Skywalking是分布式系统的应用程序性能监视工具,专为微服务,云原生架构和基于容器(Docker,K8S,Mesos)架构而设计,它是一款优秀的APM(Application Performance Management)工具,包括了分布式追踪,性能指标分析和服务依赖分析等。
三、开始搭建
此篇文章只作为基础知识的介绍,后面将对每一个模块进行服务搭建,喜欢的童鞋,请订阅我的Springcloud微服务学习篇哦,大家一起学习(免费的哦),有不对的地方请及时提出大家一起探讨学习。