我与狗子的日常1
学习spring-cloud的知识差不多都快10天了,但是真真正正对cloud有认知的还是从这两天开始的。next let me write some idea about spring-cloud.
关于spring-cloud 的概念,跟许多大佬一样,copy 官网:
Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer's own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。
In my eyes : spring-cloud是一种以微服务架构为基础的快速便捷搭建分布式系统的一套组件。
以前傻傻的总是分不清 分布式 和 集群
分布式:将一个大的服务拆分成多个独立的小的服务,分别部署在不同的服务器上,这些服务共同完成整个大的业务流程。这种工作方式称为分布式。
集群:则指的是同一个业务,部署在不同服务器上。强调的是一个服务部署在多台服务器上。一个服务器挂了,其他的还能正常工作。
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率的。
eg: 一个任务由10个子任务组成,每个子任务单独执行需要1个小时,则在一台服务器上执行该任务需要10小时。
采用分布式,提供10台服务器,每台服务器只负责处理一个子任务,不考虑子任务之间的依赖关系,则执行该任务需要1个小时。
采用集群方案,同样10台服务器,每台部署均可独立处理改任务,则10个任务同时到达,1小时候同时完成,整体来说还是1小时完成。
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务。微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。
以上均是某位牛逼大佬说的,我觉得灰常有道理。
Spring-Cloud 是一组基于微服务架构快速开发分布式系统的框架集合,这里的微服务的构成来自与Spring-boot星系。然后我们就得清楚该框架集合中都包含了哪些东东,各自有什么忒点。
1.Eureka
各个微服务之间的调用是通过接口相互访问的,不同的服务怎么晓得调用辣锅服务,这就有了服务注册和服务发现的概念了。
服务注册 Service Registry : 各个微服务将自己注册到统一管理所有微服务的系统中。Spring-Cloud 组件中的Eureka就是专门从事服务治理工作,为各服务提供服务注册和服务发现的功能。
Eureka 包含服务端和客户端,服务端是统一管理各个微服务的一个独立服务,同时Eureka的服务端也可部署在多个服务器上,各个服务端相互注册已增加服务端的健壮性。
每个微服务则是客户端,都需要配置Eureka 服务信息
pom文件引入Eureka 服务端jar
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency>
Eureka服务端的application.yml (PS:这里是Eureka服务相互注册的)
spring: application: name: zhaiyt-cloud-eureka-security #安全配置 security: user: name: zhaiyt password: root roles: SERVICE_NODE #eureka配置 eureka: client: service-url: defaultZone: http://zhaiyt:root@localhost:11001/eureka/ fetch-registry: true register-with-eureka: true server: port: 11000
启动类添加 @EnableEurekaServer 注解
2.Ribbon实现负载均衡
如果一个服务的提供者在Eureka服务注册了多个服务,那么客户端如何选择服务呢? 这就需要客户端实现负载均衡,Spring-cloud使用Ribbon实现。
ribbon 添加pom依赖
<!-- 添加Ribbon依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> </dependency>
RestTemplate 实例化方法上添加注解 @LoadBalanced
3Hystrix:容错保护
在微服务架构中,存在这么多的服务单元,若一个单元出现故障,就很容易因依赖关系引发故障蔓延,最终导致整个系统瘫痪, 这种现象被称之为为雪崩效应. 服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。
引入依赖
<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-javanica</artifactId> <version>RELEASE</version> </dependency>
处理方法添加注解:
@HystrixCommand(fallbackMethod = "defaultReturnMethod")
启动类上添加开启容错保护
@EnableHystrix
东西太多,看了也会忘
代码路径:
https://git.lug.ustc.edu.cn/zhaiyt/spring-cloud-item.git
https://git.lug.ustc.edu.cn/zhaiyt/spring-cloud-order.git
https://git.lug.ustc.edu.cn/zhaiyt/spring-cloud-securitycloud.git