springcloud带来的优点
1.相比于传统式集中式架构来说,他提供了一种新的架构思想,相比于原来的架构它更容易水平或者垂直的扩展
2.在编译时 由于将整个项目拆分成很多小块,编译更加的迅速,方便我们调试。
3.在部署的时候,当项目上线,不会因为一个点挂掉整个项目瘫痪,只会单点故障
4.在大型的互联网公司,用到的开发语言不止一种,拆分成服务的话,我们只需要调接口取数据即可。
5.极大程度上的进行了松耦合
一个简单的分布式下图是我理解的分布式架构,水平不够,很片面。
springcloud有哪些缺点
1.拆分项目时的颗粒度不好确定,一个服务最好只做一件事情。
2.对于分布式的架构来讲,或者说在使用这种微服务式的架构时,数据的一致性是一个大的问题。我看了很多篇文章讲的都很深奥,也没有个学习的方向。可以百度搜索一些经常用的方式二阶段提交和三阶段提交,分布式事务等等。在大的电商平台,一般都有对账的系统以及消息队列方式或者重试机制(当然重试机制一定要保证接口的正确性以及接口的幂等性,而这个幂等性的度要由自己控制)或者补偿机制。
切入正题,今天想学习一下springcloud,于是看了一些博文,总结了一些。
项目搭建环境
使用开发工具Eclipse,jdk1.7,maven
eclipse版本构建项目
目标:搭建一个maven工程,其下有两个子模块,一个服务,一个注册中心
1. 首先我们搭建一个maven的父工程,搭就完事儿了。
maven的父工程2.我们搭建一个注册中心,我们需要用的的组件上Spring Cloud Netflix的Eureka ,eureka是一个服务注册和发现模块。
不多说废话开搭。
选中父工程new maven module 这里我直接使用的是jar形式的包
然后在pom中添加我们需要的依赖,我不知道为什么简书一复制xml 就只有文本了,那些标签全都不能复制过来,希望大神们指导下。
dependency dependency management接下来是我们application.yml中的配置,eureka是一个高可用的注册中心,没有缓存,实时发送心跳包检测注册的服务是否在线,默认情况下eureka server既是一个server也是一个client,所以在client我们配置的registerwithrureka 为false 和fetchRegistry false都是为了表明自己是一个server。
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
贴出springboot启动类的代码:@EnableEurekaServer表明自己是一个注册中心
启动成功banner样式的显示package cn.yiside.eurekaServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServerpublic class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
接下来我们访问 http://localhost:8761去看一下
springcloud的可视化管理我们发现注册的application没有任何东西,因为我们没有注册,并且springcloud进入了保护模式
默认情况下,如果Eureka Server在一定时间内没有接收到某个微服务实例的心跳,Eureka Server将会注销该实例(默认90秒)。但是当网络分区故障发生时,微服务与Eureka Server之间无法正常通信,这就可能变得非常危险了----因为微服务本身是健康的,此时本不应该注销这个微服务。
Eureka Server通过“自我保护模式”来解决这个问题----当Eureka Server节点在短时间内丢失过多客户端时(可能发生了网络分区故障),那么这个节点就会进入自我保护模式。一旦进入该模式,Eureka Server就会保护服务注册表中的信息,不再删除服务注册表中的数据(也就是不会注销任何微服务)。当网络故障恢复后,该Eureka Server节点会自动退出自我保护模式。
自我保护模式是一种对网络异常的安全保护措施。使用自我保护模式,而已让Eureka集群更加的健壮、稳定。
在Spring Cloud中,可以使用eureka.server.enable-self-preservation=false来禁用自我保护模式
这个问题并不影响我们继续去进行接下来的步骤,所以继续。
3.我们要搭建一个服务,并且将其注册到注册中心中。
类似于注册中心的搭建模式,但是启动类和配置要有一些变化
启动类代码
@RestController注解是集成了controller和ajax的默认注解,需要导入jackson包
package cn.yiside.eurakaClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
@EnableEurekaClient
public class EurakaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurakaClientApplication.class, args);
}
@Value(value="${server.port}")
private String port;
@RequestMapping("hi")
public String sayHi(@RequestParam String name){
return "你好"+name+"我来自"+port;
}
}
application.yml配置如下
表示我们注册的地址,以及我们这个服务的端口和发布到注册中心的服务名
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8762
spring:
application:
name: service-sayHi
启动我们的服务。
注册服务成功Status显示UP表示服务正常,可以使用。其它取值DOWN、OUT_OF_SERVICE、UNKNOWN等,只有UP的微服务会被请求。
访问我们的服务,看展示效果
访问成功今天只学习了Eureka 注册中心 springCloud还有很多要学,加油。
以下是后期需要学习的springcloud的其他组件
分布式/版本化/集中化配置 - spring cloud config 服务注册发现 -Netflix Eureka
路由 -Netflix Zuul 服务之间的点对点调用(Service-to-service calls)
负载均衡-Netflix Ribbon
断路器 -Netflix Hystrix 分布式消息
五大核心组件:
服务注册发现 -Netflix Eureka
配置中心- spring cloud config
负载均衡-Netflix Ribbon
断路器 -Netflix Hystrix
路由(网关) -Netflix Zuul
网友评论