0%

初识SpringCloud

开篇

SpringCloud越来越火,咱也得跟上潮流啊,闲暇之余,自己学习并代码实战了下,其实发现并不难,知道其各个模块是干什么的并且能够运用就够了,下面我就简单说下自己学习过程的心得,也算是总结一下。

微服务

简而言之,微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。 这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。

为什么要用微服务

特点:
1、独立部署,灵活扩展
2、资源的有效隔离
3、团队组织架构的调整
和soa的区别:
soa架构是一种粗粒度松耦合的服务架构,SOA架构强调的是异构系统之间的通信和解耦合,而微服务架构强调的是系统按业务边界做细粒度的拆分和部署。

微服务组件

包含的主要组件以及各组件主要是干什么的

EurekaRibbonFeignHystrixZuul这几个组件

一、Eureka:服务注册与发现。包含Eureka Server和Eureka Client

Eureka Server:注册中心,里面有一个注册表,保存了各个服务所在的机器和端口号.
Eureka Client:负责将这个服务的信息注册到Eureka Server中

二、Feign:关键机制就是使用了动态代理

过程:
首先,如果你对某个接口定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理
接着你要是调用那个接口,本质就是会调用 Feign创建的动态代理,这是核心中的核心
Feign的动态代理会根据你在接口上的@RequestMapping等注解,来动态构造出你要请求的服务的地址
最后针对这个地址,发起请求、解析响应

三、Ribbon:负载均衡。假如一个服务部署到几台服务器上,它的作用是负载均衡,会帮你在每次请求时选择一台机器,均匀的把请求分发到各个机器上。

四、断路器(Hystrix)

这么多服务互相调用,要是不做任何保护的话,某一个服务挂了,就会引起连锁反应,导致别的服务也挂。如果系统处于高并发的场景下,大量请求涌过来的时候,订单服务的100个线程都会卡在请求积分服务这块。导致订单服务没有一个线程可以处理请求,造成服务雪崩问题。
Hystrix是隔离、熔断以及降级的一个框架。说白了,Hystrix会搞很多个小小的线程池,比如订单服务请求库存服务是一个线程池,请求仓储服务是一个线程池,请求积分服务是一个线程池。每个线程池里的线程就仅仅用于请求那个服务。
就是对请求的已经挂了的服务直接返回错误,不要去走网络请求卡住几秒钟,这个过程,就是所谓的熔断。咱不单单只是直接返回错误,这样也没有太大的意义,还要处理点什么,比如,在数据库里增加一条记录,说给某某用户增加了多少积分,因为积分服务挂了,导致没增加成功!这样等积分服务恢复了,你可以根据这些记录手工加一下积分。这个过程,就是所谓的降级。

五、服务网关(Zuul)

一般微服务架构中都必然会设计一个网关在里面,像android、ios、pc前端、微信小程序、H5等等,不用去关心后端有几百个服务,就知道有一个网关,所有请求都往网关走,网关会根据请求中的一些特征,将请求转发给后端的各个服务。
而且有一个网关之后,还有很多好处,比如可以做统一的降级、限流、认证授权、安全,等等。

六、服务配置中心 (Spring Cloud Config)

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client。

七、服务链路追踪(Spring Cloud Sleuth)

Spring Cloud Sleuth 主要功能就是在分布式系统中提供追踪解决方案,并且兼容支持了 Zipkin,你只需要在pom文件中引入相应的依赖即可。服务间相互调用,Zipkin收集数据.

八、 消息总线(Spring Cloud Bus)

Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。例如github上的配置文件有更新时,只需发送请求/bus/refresh/,再请求配置文件发现内容已更新。

九、高可用的服务中心:Eureka通过运行多个实例,使其更具有高可用性。事实上,这是它默认的熟性,你需要做的就是给对等的实例一个合法的关联serviceurl。简单来说就是建多个服务注册中心,具体做法就是写多个application_xx.yml,改变etc/hosts,linux系统通过vim /etc/hosts ,加上:127.0.0.1 xx , 127.0.0.1 yy(xx,yy就是你application的后缀名),windows电脑,在c:/windows/systems/drivers/etc/hosts 修改。启动工程:

1
2
java -jar eureka-server-0.0.1-SNAPSHOT.jar - -spring.profiles.active=xx
java -jar eureka-server-0.0.1-SNAPSHOT.jar - -spring.profiles.active=yy

Eureka-eserver xx ,Eureka-eserver yy 相互感应,当有服务注册时,两个Eureka-eserver是对等的,它们都存有相同的信息。这就是通过服务器的冗余来增加可靠性,当有一台服务器宕机了,服务并不会终止,因为另一台服务存有相同的数据。

断路器聚合监控(Hystrix Turbine)

看单个的Hystrix Dashboard的数据并没有什么多大的价值,要想看这个系统的Hystrix Dashboard数据就需要用到Hystrix TurbineHystrix Turbine将每个服务Hystrix Dashboard数据进行了整合。Hystrix Turbine的使用非常简单,只需要引入相应的依赖和加上注解和配置就可以了。

网关(Spring Cloud Gateway)

Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。

欣赏此文?求鼓励,求支持!