【Spring Cloud】微服务架构选型方案
1、技术架构
2、组件介绍
1、服务注册与发现——Eureka
服务注册与发现中心采用Eureka,以AP为核心的高可用注册中心,保证高可用性和最终一致性,server之间互相注册的replicate机制可以单点注册、全局感知,通过集群式部署来避免单点故障导致服务不可用。
提供云端服务发现,一个基于Rest的服务,用于定位服务,以实现云端中间层的服务发现和故障转移。
主要用来实现服务治理,统一管理众多微服务应用的地址信息,以及复杂的调用关系,减少应用之间的耦合,通过提供服务方在Eureka Server注册服务,服务消费方在Server上订阅所需服务得到提供者的地址信息,完成一次服务之间的请求调用。
由Eureka Server和Eureka Client组成,Eureka Server用作注册中心,支持集群部署;Eureka Client是一个Java客户端,用来处理服务注册与发现。
2、服务网关——Spring Cloud GateWay
Spring Cloud GateWay作为Spring Cloud生态系统中的网关,旨在为微服务架构提供一种简单有效的统一的API路由管理方式,并且基于Filter链的方式提供了网关基本的功能,如:安全、授权、监控/指标、限流等。
GateWay特征有:动态路由、基于HTTP请求的路由匹配、Predicates和Filters作用于特定路由、集成Hystrix熔断器、易于编写的Predicates和Filters、限流、路径重写、与服务注册发现组件结合根据serviceId转发。
重要的概念
- 过滤器:用于拦截和链式处理web请求,实现横切的、与应用无关的需求。可在代理请求处理之前(pre)执行,也可以在请求之后(post)执行。pre类型过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等;post类型过滤器可以做响应内容、响应头的修改、日志输出、流量监控等。过了pre和post的区分,根据作用范围还可以分为针对单个路由的gateway filter和针对所有路由的global gateway filter。
- Predicate:在将web请求和路由进行匹配时,用到的就是predicate,决定请求走哪一个路由。GateWay内置了多种类型的Predicate。
请求时,客户端向GateWay发起请求,如果在GateWay Handler Mapping中找到与请求相匹配的路由(此处用到Predicate),将其发送到GateWay Web Handler,Handler再通过指定的过滤链来将请求发送到实际的服务执行业务逻辑,然后返回。期间,过滤器可能在发送代理请求之前(pre过滤器)或之后(post过滤器)执行。
GateWay基于Webflux,支持异步非阻塞编程。
3、服务调用——Ribbon + Hystrix + Feign
一次服务调用请求过程,提供某个服务的应用可能有多个(集群部署),消费方需要从中选择一个进行调用,即客户端负载均衡技术,Ribbon主要提供客户端的软件负载均衡算法。
Ribbon支持许多常见的负载均衡策略,同时也支持自定义负载均衡策略。
Hystrix的主要作用是熔断器,控制故障范围,是一个容错管理工具,通过熔断机制控制服务和第三方库的节点,对延迟和故障提供更强大的容错能力。
由于网络分区环境的复杂性,通常服务不能保证100%的可用性,如果某个服务出现故障,调用该服务就会出现线程阻塞,此时若有大量请求涌入,线程资源耗尽后造成服务瘫痪。而由于服务之间的调用依赖性,故障会快速在服务群中扩散,严重时导致大量微服务不可用,这就是服务故障的“雪崩 ”效应。
Hystrix可以在服务故障时拦截请求,快速返回错误信息,同时自动探测服务状态以便后续恢复服务请求,另外也支持实现服务降级机制,可以显著增加整个分布式系统的健壮性和稳定性。
Feign是一个声明式的Web服务客户端,支持可插入注释、可插拔编码解码器,以及Ribbon的负载均衡、Hystrix和它的fallback和HTTP请求和响应的压缩。
将对Rest服务请求封装成接口形式,以调用本地接口的形式调用远程Rest服务,对开发更加直观友好。
Feign通过编写简单的接口和插入注解,Feign就会根据自定义的HTTP请求的参数、格式、地址等信息,来完全代理HTTP请求,通过调用接口就可以完成服务请求。
4、业务集群——SpringBoot + SpringMVC
Spring Cloud基于SpringBoot工程构建,利用SpringBoot可以快速开发单个微服务应用。
通过SpringMVC的相关注解可以对外暴露Rest服务。
5、服务配置中心——Spring Cloud Config
随着微服务规模的增大,以及生产、测试等环境隔离的要求,由每个微服务应用单独维护各自的配置信息会非常混乱,而且每次配置信息的变更都需要应用的重启才能生效,因此需要一个分布式配置中心,提供统一的配置信息管理。
Spring Cloud中的分布式配置中心组件Spring Cloud Config,支持配置信息放在配置服务器本地,也支持存放在远程Git仓库中,集中化管理集群配置,可以分为两个角色,Config Server和Config Client。
Config Server保存配置信息在本地或远程仓库中,然后对外发布配置服务,将配置信息服务化;Config Client通过访问Config Server提供的服务接口,获取相关的配置信息来完成自身的应用初始化。
为了避免单点故障,同样可以部署成集群模式。
同样另一个问题,由配置中心统一管理,配置信息变更时,无需重启应用,就可以做到配置信息实时更新生效。
6、消息总线——Bus
Spring Cloud Bus通过轻量的消息代理连接各个分布的节点,称为事件、消息总线,用于在集群中传播状态变化,可以与Spring Cloud Config联合使用实现配置信息热部署。主要功能有两点:
- 对指定主题的消息进行订阅和发布
- 事件监听,包括刷新事件、环境变更事件、远端应用的ack事件以及本地服务端发送事件等。
其本质是利用了MQ的广播机制在分布式系统中传播消息。
- 提交代码或变更配置触发post请求给bus/refresh
- server端接受请求并发送给Bus
- Bus接到消息后通知给客户端
- 客户端收到通知后,请求server获取最新配置
- 全部客户端更新配置
7、认证、授权、安全——spring cloud security + OAuth2 + JWT
Spring Security是一个强大的、高度可定制化的身份验证和访问控制框架,两个主要目标就是 认证 和 授权,一般为先认证身份,然后进行授权。
认证协议——JWT。基本思路就是用户提供用户名和密码给认证服务器,服务器验证用户提交信息的合法性,验证成功返回一个Token,用户用这个Token访问服务器上受保护的资源。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
授权框架——OAuth2。OAuth允许用户提供一个令牌,而不是用户名和密码,每一个令牌授权一个特定的第三方应用在特定的时段内访问特定的资源。
8、链路跟踪——zipkin(spring cloud sleuth)
随着系统和微服务应用的增多,一个业务可能需要多个微服务协同完成,链路上任何一个应用的服务出现问题都会导致业务失败,需要快速跟踪故障位置。
Spring Cloud Sleuth,主要功能是在分布式系统中提供追踪解决方案,并且兼容支持zipkin、HTrace和log-base追踪。
服务追踪从客户都拿发起请求到达被追踪系统边界开始,到被追踪系统向客户返回响应结束,称为一次trace;在trace过程每次调用服务时,埋入一个调用记录("span"),再附带上响应时间和请求成功与否等信息,这样,若干有序的span就组成了一个trace。
Sleuth为服务之间调用提供链路跟踪,可以做到理清服务间调用关系;耗时分析;可视化错误(借助zipkin);链路优化。
结合zipkin,将数据发到zipkin,进行数据可视化,展示微服务调用请求链、错误信息可视化。可以直观地看到一次请求经过了那些微服务,以及每个服务的耗时,在请求失败时可以快速定位到请求链中哪一环出了问题。
9、监控中心——Turbine、Dashboard + Spring Boot Admin
首先介绍两个Hystrix监控工具:
- Hystrix Dashboard是一个针对Hystrix进行实时监控的工具,可以直观地看到各个Hystrix Command的请求响应时间、请求成功率等。
- Dashboard只能看到单个应用内的服务信息,Hystrix Turbine可以聚合监控系统内多个服务的数据。由于分布式系统中服务通常集群部署,Turbine可以把多个相同服务的节点状态聚合为一个数据源,以一个整体集群的形式供Dashboard展示。
Actuator时Spring Boot提供的对应用系统的自省和监控的集成功能,可以查看应用配置的详细信息等,为了保证Actuator暴露的监控接口的安全性,需要添加安全管理的Security依赖。
Actuator监控分为原生端点和用户自定义端点两类,可以观察应用运行期间的各种性能指标和内部状况。
Spring Boot Admin:
由于使用Actuator监控,需要对每个应用单独调用固定的接口来进行监控,而且返回数据均为json数据。
Spring Boot Admin是一个开源社区项目,用于管理和监控SpringBoot应用程序。应用程序作为Spring Boot Admin Client向为Spring Boot Admin Server注册(通过HTTP)或使用SpringCloud注册中心(例如Eureka,Consul,Zookeeper)发现。 在前端界面展示Admin Client的Actuator端点上的一些监控信息。
提供了安全登录界面的组件,并且和Spring Boot Security相结合,提供安全登录功能。
Spring Boot Admin Server中还可以集成Turbine组件,让Turbine中展示的内容整合到Admin Server中,和应用实例一起监控,方便查看和管理。
10、消息队列——Kfaka
11、分布式日志系统——ELK
ElK,即ElasticSearch+Logstash+Kibana。
- ElasticSearch是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
- Logstash是一个完全开源的工具,它可以对日志进行收集、过滤、分析,支持大量的数据获取方法,并将其存储供以后使用(如搜索)。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作再一并发往elasticsearch上去。
- Kibana是一个基于浏览器页面的Elasticsearch前端展示工具,可以为 Logstash 和 ElasticSearch 提供日志分析友好的 Web 界面。
- 每台服务器集群节点安装Logstash日志收集系统插件,将日志输入到Logstash中
- Logstash将该日志格式化为json格式,根据每天创建不同的索引,输出到ElasticSearch中
- 另外,zipkin的流也可以直接传给ElasticSearch,便于运维管理和分析
- 浏览器使用安装Kibana查询日志信息
12、分布式事务
由于在微服务架构中,不同的业务集群维护各自独立的数据库,互相之间数据不互通,调用也只是接口的调用,再加上网络环境的不稳定性,分布式事务的一致性就显得非常重要。
常见的分布式事务解决方案有:
- 两阶段提交
- 补偿事务机制
- 本地消息表
- MQ事务消息
13、分布式缓存——Redis
Redis可以用来做分布式系统Session共享,同时,Redis做二级缓存对降低整个服务响应时间、减少数据库访问次数也有帮助,可选Redis Cluster(集群模式)和Redis Sentinel(哨兵模式)。
【Spring Cloud】微服务架构选型方案的更多相关文章
- 全链路实践Spring Cloud 微服务架构
Spring Cloud 微服务架构全链路实践Spring Cloud 微服务架构全链路实践 阅读目录: 网关请求流程 Eureka 服务治理 Config 配置中心 Hystrix 监控 服务调用链 ...
- Dubbo和Spring Cloud微服务架构比较
Dubbo 出生于阿里系,是阿里巴巴服务化治理的核心框架,并被广泛应用于中国各互联网公司:只需要通过 Spring 配置的方式即可完成服务化,对于应用无入侵,设计的目的还是服务于自身的业务为主. 微服 ...
- Dubbo 和 Spring Cloud微服务架构 比较及相关差异
你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构. 微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务, ...
- Spring Cloud 微服务架构解决方案
1 理解微服务 1.1 软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程. 1.1.1 单体架构 特点: 1.所有的功能集成在一个项目工程中. 2.所有的功能打一个 ...
- 一张图了解Spring Cloud微服务架构
Spring Cloud作为当下主流的微服务框架,可以让我们更简单快捷地实现微服务架构.Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟.经得起实际考验的服务框架组合起来 ...
- Spring Cloud 微服务架构全链路实践
阅读目录: 1. 网关请求流程 2. Eureka 服务治理 3. Config 配置中心 4. Hystrix 监控 5. 服务调用链路 6. ELK 日志链路 7. 统一格式返回 Java 微服务 ...
- 放弃Dubbo,选择最流行的Spring Cloud微服务架构实践与经验总结
http://developer.51cto.com/art/201710/554633.htm Spring Cloud 在国内中小型公司能用起来吗?从 2016 年初一直到现在,我们在这条路上已经 ...
- Dubbo和Spring Cloud微服务架构'
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...
- 你真的了解微服务架构吗?听听八年阿里架构师怎样讲述Dubbo和Spring Cloud微服务架构
微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...
随机推荐
- html常见的块元素与内联(行内)元素用法说明(一)
html平时常见的块元素有:div, p, h1, h2, h3等,内联元素有:span, a, img等. 块元素的属性:无论内容是什么,都会独占一整行.主要用于页面布局. 内联元素的属性:只占自身 ...
- Docker下实战zabbix三部曲之二:监控其他机器
在上一章<Docker下实战zabbix三部曲之一:极速体验>中,我们快速安装了zabbix server,并登录管理页面查看了zabbix server所在机器的监控信息,但是在实际场景 ...
- WPF 将字体文件 添加到 资源文件,并在后台代码使用
先看结果 1.将字体文件,导入到资源文件,如: 添加后,自动生成 2.在窗体xaml中添加如: 3.在xaml窗体对应的cs文件中,为TextBlock指定字段 创建一个字段对象,并指定字体文件的所在 ...
- js中的计时器事件`setTimeout()` 和 `setInterval()`
js中的计时器事件 在js中,通常会有一些事件,我们需要让它 间隔一段时间之后再发生,或者 每隔一段时间 发生一次,那就需要用到我们js中的计时事件 计时事件主要有两种: setTimeout() - ...
- 【求赐教】VMware workstation 转VSphere
首先我从其他电脑拷贝过来一台虚拟机(这个说法不知道准不准确,就是把所有文件夹都拷贝过来了),然后打开VMware,通过"打开虚拟机"这个操作,直接找到本地的.vmx文件,如下图所示 ...
- layer.open打开一个新的jsp页面,如何关闭并刷新父页面问题
layer.open打开一个新的jsp页面弹框,如何关闭呢? 在新的页面提交完毕之后,关闭并刷新父页面列表. layer.closeAll(); parent.layer.closeAll(); wi ...
- PSSH工具
目录 PSSH工具 参考 PSSH工具的介绍 PSSH工具的使用 PSSH工具
- pyinstaller 打包exe程序读不到配置文件No such file
挺久没更新博客的,一来之前是觉得才疏学浅,记录下来的太简单没人看.二来时间上不是很充裕(不是借口,有时间打游戏,没时间总结) 偶然有一次发现同事在搜索解决问题的时候正在看我博客的解决思路,很奇妙的感觉 ...
- Docker 第一个HelloWorld镜像
Docker 创建第一个HelloWorld镜像: 创建Dockerfile FROM alpine CMD "echo" "Hello World!" 通过D ...
- 深圳市网络安全中心发出通告,TeamViewer已被APT41黑客攻破
上期我们讲了东南亚赌局为什么都是福建老板了,这次来介绍下黑客组织APT41 ,这个组织在 HT界 比较出名,很早之前是匿名在地下交易所的,而在近年频繁出现在大众视野中,这不,刚刚又把我们常用的远程工具 ...