系统微服务架构
系统微服务架构
⼀、系统微服务架构
⼆、什么是微服务(Microservice)
微服务英⽂名称Microservice,Microservice架构模式就是将整个Web应⽤组织为⼀系列⼩的Web服务。
这些⼩的Web服务可以独⽴地编译及部署,并通过各⾃暴露的API接⼝相互通讯。它们彼此相互协作,作为⼀个整体为⽤户提供功能,却可以独⽴地进⾏扩充。
微服务架构需要的功能或使⽤场景
1:我们把整个系统根据业务拆分成⼏个⼦系统。
2:每个⼦系统可以部署多个应⽤,多个应⽤之间使⽤负载均衡。
3:需要⼀个服务注册中⼼,所有的服务都在注册中⼼注册,负载均衡也是通过在注册中⼼注册的服务来使⽤⼀定策略来实现。
4:所有的客户端都通过同⼀个⽹关地址访问后台的服务,通过路由配置,⽹关来判断⼀个URL请求由哪个服务处理。请求转发到服务上的时候也使⽤负载均衡。
分布式和微服务的关系5:服务之间有时候也需要相互访问。例如有⼀个⽤户模块,其他服务在处理⼀些业务的时候,要获取⽤户服务的⽤户数据。
6:需要⼀个断路器,及时处理服务调⽤时的超时和错误,防⽌由于其中⼀个服务的问题⽽导致整体系统的瘫痪。
7:还需要⼀个监控功能,监控每个服务调⽤花费的时间等。
⽬前主流的微服务框架:Dubbo、 SpringCloud、thrift、Hessian等。
三、SpringCloud项⽬简介
SpringCloud是基于SpringBoot的⼀整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集状态管理等组件。最重要的是,
跟spring boot框架⼀起使⽤的话,会让你开发微服务架构的云服务⾮常好的⽅便。
SpringBoot旨在简化创建产品级的 Spring 应⽤和服务,简化了配置⽂件,使⽤嵌⼊式web服务器,含有诸多开箱即⽤微服务功能
相关组件架构图
1.Eureka简介
Eureka是Spring Cloud Netflix的⼀个⼦模块,也是核⼼模块之⼀。⽤于云端服务发现,⼀个基于REST的服务,⽤于定位服务,以实现云端中间层服务发现和故障转移。
服务注册与发现对于微服务系统来说⾮常重要。有了服务发现与注册,你就不需要整天改服务调⽤的配置⽂件了,你只需要使⽤服务的标识符,就可以访问到服务。
服务发现:服务发现是微服务基础架构的关键原则之⼀。试图着⼿配置每个客户端或某种格式的约定可以说是⾮常困难的和⾮常脆弱的。Eureka是Netflix服务发现的⼀种服务和客户端。这种服务是可以被⾼可⽤性配置的和部署,并且在注册的服务当中,每个服务的状态可以互相复制给彼此。
服务注册:当⼀个客户端注册到Eureka,它提供关于⾃⼰的元数据(诸如主机和端⼝,健康指标URL,⾸页
等)Eureka通过⼀个服务从各个实例接收⼼跳信息。如果⼼跳接收失败超过配置的时间,实例将会正常从注册⾥⾯移除
下图是基本的服务注册和发现
对于应⽤,配制⽂件通常是放在项⽬中管理的,它可能有各种各样的配置⽂件和属性⽂件,另外还可能有开发环境、测试环境、⽣产环境等,这样的话就得⼀式三份,若是传统应⽤还好说,如果是微服务呢,这样不光配置⽂件有可能冗余⽽且量⼤,繁重复杂,不好维护,这样的话就需要⼀个配置⽂件的统⼀管理了。
2.SpringCloud Config简介
SpringCloud Config为分布式系统外部化配置提供了服务器端和客户端的⽀持,它包
括ConfigServer和ConfigClient两部分。
Server:
实例⼀般多于两个,以实现HA;
配置以⽂件形式存储,快速⽀持⽬前以SpringBoot的开发⽅式的配置⽂件;
⽀持GIt,码云,SVN,本地⽂件等多种形式;
⽀持属性加密;
Client:即各⾃的微服务应⽤;
3.微服务⽹关ZUUL
由于微服务过多,可能某⼀个⼩业务就需要调各种微服务的接⼝,不可避免的就会需要负载均衡和反向代理了,以确保ui不直接与所有的微服务接⼝接触,所以我们需要使⽤⼀个组件来做分发,跨域等各种请求。
ZUUL是Netflix开源的微服务⽹关,它可以和Eureka、Ribbon、Hystrix等组件配合使⽤,它主要⽤作反向代理、Filter扩展、动态加载、动态路由、压⼒测试、弹性扩展、审查监控、安全检查等。
通过⽹关的⽅式,提供致对外的服务,具体的服务调⽤分发由⽹关根据注册中⼼进⾏分发。
4.熔断器Hystrix
在微服务架构中通常会有多个服务层调⽤,基础服务的故障可能会导致级联故障,进⽽造成整个系统不可⽤的情况,这种现象被称为服务雪崩效应。服务雪崩效应是⼀种因“服务提供者”的不可⽤导致“服务消费者”的不可⽤,并将不可⽤逐渐放⼤的过程。
如果下图所⽰:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可⽤引起了B的不可⽤,并将不可⽤像滚雪球⼀样放⼤到C和D时,雪崩效应就形成了。
熔断器(CircuitBreaker)
熔断器的原理很简单,如同电⼒过载保护器。它可以实现快速失败,如果它在⼀段时间内侦测到许多类似的错误,会强迫其以后的多个调⽤快速失败,不再访问远程服务器,从⽽防⽌应⽤程序不断地尝试执⾏可能会失败的操作,使得应⽤程序继续执⾏⽽不⽤等待修正错误,或者浪费CPU时间去等到长时间的超时产⽣。熔断器也可以使应⽤程序能够诊断错误是否已经修正,如果已经修正,应⽤程序会再次尝试调⽤操作。
熔断器模式就像是那些容易导致错误的操作的⼀种代理。这种代理能够记录最近调⽤发⽣错误的次数,然后决定使⽤允许操作继续,或者⽴即返回错误。熔断器开关相互转换的逻辑如下图:
熔断器就是保护服务⾼可⽤的最后⼀道防线。
5.熔断器监控Hystrix-dashboard
是⼀款针对Hystrix进⾏实时监控的⼯具,通过Hystrix Dashboard我们可以在直观地看到各Hystrix Command的请求响应时间, 请求成功率等数据。但是只使⽤Hystrix Dashboard的话, 你只能看到单个应⽤内的服务信息, 这明显不够. 我们需要⼀个⼯具能让我们汇总系统内多个服务的数据并显⽰到Hystrix Dashboard上, 这个⼯具就是Turbine.在复杂的分布式系统中,相同服务的节点经常需要部署上百甚⾄上千个,很多时候,运维⼈员希望能够把相同服务的节点状态以⼀个整体集的形式展现出来,这样可以更好的把握整个系统的状态。为此,Netflix提供了⼀个开源项⽬(Turbine)来提供把多个hystrix.stream的内容聚合为⼀个数据源供Dashboard展⽰
6.Spring Cloud Sleuth服务跟踪系统
⼀般的,⼀个分布式服务跟踪系统,主要有三部分:数据收集、数据存储和数据展⽰。根据系统⼤⼩不同,每⼀部分的结构⼜有⼀定变化。譬如,对于⼤规模分布式系统,数据存储可分为实时数据和全量数据两部分,实时数据⽤于故障排查(troubleshooting),全量数据⽤于系统优化;数据收集除了⽀持平台⽆关和开发语⾔⽆关系统的数据收集,还包括异步数据收集(需要跟踪队列中的消息,保证调⽤的连贯性),以及确保更⼩的侵⼊性;数据展⽰⼜涉及到数据挖掘和分析。虽然每⼀部分都可能变得很复杂,但基本原理都类似。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论