https://gitee.com/Mikeyuyu/spring-cloud-learning中有具体的演示代码
微服务是分布式架构的一种;分布式架构其实就是要把服务做一个拆分;而springcloud只是解决了拆分过程中的服务治理问题。微服务在拆分的时候;会根据业务功能模块把一个单体的应用拆分成许多个独立的项目;每个项目完成一部分的业务功能;然后独立开发和部署。这些独立的项目就成为一个微服务。进而构成一个服务集群。
微服务化的核心就是将传统的一站式应用;根据业务拆分成一个一个的服务;彻底地去耦合;每一个微服务提供单个业务功能的服务;一个服务做一件事情;从技术角度看就是一种小而独立的处理过程;类似进程的概念;能够自行单独启动或销毁;拥有自己独立的数据库。
微服务的特点是服务数量特别多;服务和服务之间也需要有交互;这就涉及到服务间的调用;即服务与服务之间如何通信。提到服务与服务之间的通信;最通用的莫过于HttpClient;在其它的通信架构中基本都使用HttpClient来作为底层的通讯模型。在SpringCloud中依然可以使用HttpClient进行服务与服务调用;只不过如果采用HttpClient调用的话;会有一些弊端;例如: 如果同一个服务有多个负载的话;采用HttpClient调用时;没有办法处理负载均衡的问题。还有另一个问题就是HttpClient只是提供了核心调用的方法并没有对调用进行封装;所以在使用上不太方便;需要自己对HttpClient进行简单的封装。
在SpringCloud提供了两种方式来解决服务与服务通信的问题;RestTemplate和Feign。虽然从名字上看这两种调用的方式不同;但在底层还是和HttpClient一样;采用Http的方式进行调用的。只不过是对HttpClient进行的封装。
Spring-Cloud Euraka是Spring Cloud集合中一个组件;它是对Euraka的集成;用于服务注册和发现。Eureka是Netflix中的一个开源框架。它和 zookeeper、Consul一样;都是用于服务注册管理的。
自我保护机制
Eureka和zookeeper的区别
CAP即;
这三个性质对应了分布式系统的三个指标;
而CAP理论说的就是;一个分布式系统;不可能同时做到这三点。
①**一致性;**对于客户端的每次读操作;要么读到的是最新的数据;要么读取失败。换句话说;一致性是站在分布式系统的角度;对访问本系统的客户端的一种承诺;要么我给您返回一个错误;要么我给你返回绝对一致的最新数据;不难看出;其强调的是数据正确。
②**可用性;**任何客户端的请求都能得到响应数据;不会出现响应错误。换句话说;可用性是站在分布式系统的角度;对访问本系统的客户的另一种承诺;我一定会给您返回数据;不会给你返回错误;但不保证数据最新;强调的是不出错。
③**分区容忍性;**由于分布式系统通过网络进行通信;网络是不可靠的。当任意数量的消息丢失或延迟到达时;系统仍会继续提供服务;不会挂掉。换句话说;分区容忍性是站在分布式系统的角度;对访问本系统的客户端的再一种承诺;我会一直运行;不管我的内部出现何种数据同步问题;强调的是不挂掉。
1、随机策略——RandomRule
2、轮询策略——RoundRobinRule;默认策略;
3、重试策略——RetryRule
4、最低并发策略——BestAvailableRule
5、可用过滤策略——AvailabilityFilteringRule
过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server;并过滤掉那些高并发的的后端server;active connections 超过配置的阈值;
性能仅次于最低并发策略。
6、响应时间加权策略——WeightedResponseTimeRule
每隔30秒计算一次服务器响应时间;以响应时间作为权重;响应时间越短的服务器被选中的概率越大。
7、区域权衡策略——ZoneAvoidanceRule
Ribbon的负载均衡策略使用建议
一般情况下;推荐使用最低并发策略;这个性能比默认的轮询策略高很多。
Feign是Netflix开发的声明式、模板化的HTTP客户端; Feign可以帮助我们更快捷、优雅地调用HTTP API。
Feign集成了Ribbon、RestTemplate实现了负载均衡的执行Http调用;只不过对原有的方式;Ribbon;RestTemplate;进行了封装;开发者不必手动使用RestTemplate调服务;而是定义一个接口;在这个接口中标注一个注解即可完成服务调用;这样更加符合面向接口编程的宗旨;简化了开发。
服务熔断;服务降级
当整个微服务架构整体的负载超出了预设的上限阈值或即将到来的流量预计将会超过预设的阈值时;为了保证重要或基本的服务能正常运行;我们可以将一些 不重要 或 不紧急 的服务或任务进行服务的 延迟使用 或 暂停使用。
配置统一路由过滤
springcloud config为微服务架构中的微服务提供集中化的外部支持;配置服务器为各个不同的微服务应用的所有环节提供了一个中心化的外部配置。
分为服务端和客户端两部分。
SpringCloud学习笔记(一)-搭建一个SpringCloud