
布景
特性
分布式/版别化装备
服务注册和发现
路由
service - to - service调用
负载均衡
分布式/版别化装备
Spring cloud包括两个根本模块:
spring cloud context和spring cloud commons
Spring cloud context即spring cloud运用上下文,包括引导上下文(加载bootstrap装备)作为主运用程序父上下文、装备加密解密(运用java jce加密装备文件,运用EnvironmentDecryptApplicationInitializer类在运用初始化时解密装备)、装备改写规模(RefreshScope)、操控端点(/env/reset,/refresh,/restart等)功用。
Spring cloud commons 供给服务注册(运用ServiceRegistry笼统),服务发现(运用DiscoveryClient笼统,经过@EnableDiscoveryClient敞开),负载均衡(运用LoadBalancerClient笼统,经过@LoadBalanced启用),断路器(经过@EnableCircuitBreaker敞开)等形式的一个共用笼统层,为详细实践供给一致笼统。
实践运用过程中,咱们运用了
spring cloud consul作为服务注册和发现组件
spring cloud config作为分布式/版别化装备办理
spring cloud bus作为音讯总线用于改写分布式运用装备
spring boot admin作为一致的运用监控后台
spring cloud Netflix feign 作为rest服务调用client
spring cloud Netflix zuul 作为路由、过滤网关
架构图
运用状况
spring boot运用现已遍及以它为根底的spring cloud也是作为微服务结构快速在迭代开展,公司中的快递事务以及商家事务,对接事务都接入了相关服务,相对于dubbo,spring cloud运用更为简略便利,http服务更偏运用层,而服务调用能够运用线程池、异步调用、连接池、io多路复用等技能,在高并发性能上也很强壮。
Spring Cloud Consul
Consul 是运用Go开发的开源的服务发现和健康检查的东西.Consul还供给K/V存储.能够很便利的运用Consul集群建立高可用的微服务根底架构. Consul还包括web ui 能够检查各服务状况。
由于consul内置了服务注册发现功用,所以spring cloud consul代码完成上比较简略,运用ConsulServiceRegistry(完成ServiceRegistry)进行服务注册操作,运用ConsulDiscoveryClient(完成DiscoveryClient)获取一切服务或许up的服务,内部则是运用ConsulClient恳求consul集群进行操作。
在运用过程中呈现了一个问题,一个服务多个机器注册的时分有时注册的服务会被掩盖,检查源码发现,运用servlet容器初始化事情被监听之后会进行consul运用的主动注册,注册运用ConsulAutoRegistration目标,内部会有一个NewService目标,经过NewService目标的id判别服务的仅有性,而NewService的id默许是ApplicationContext目标的id,也便是运用称号加port加profile,所以同一个运用这个id是相同的所以注册会被掩盖。 找到问题了那么就来解决问题吧,添加装备bean经过掩盖ConsulAutoRegistration目标,设置id为ApplicationContext的id加机器的ip确保运用多台机器的id仅有。
public ConsulAutoRegistration consulRegistratio(ConsulDiscoveryProperties properties,
ApplicationContext applicationContext, ServletContext servletContext, HeartbeatProperties heartbeatProperties) {
properties.setInstanceId(applicationContext.getId()+"-"+ DigestUtils.sha1Hex(properties.getIpAddress()));
}
2
Spring Cloud Config
Spring Cloud Config供给服务端和客户端在分布式体系中扩展装备。支撑不同环境的装备(开发、测验、出产)。运用Git做默许装备后端,可支撑装备环境打版别标签。
spring cloud config架构图如下:
Spring cloud config包括4部分
# git config
spring.cloud.config.server.git.uri=http://60.191.68.43:19090/config/{application}-config.git spring.cloud.config.server.git.username=xxx
spring.cloud.config.server.git.password=xxx
spring.cloud.config.server.git.force-pull=true (这个装备能够在装备库房抵触的时分强制拉取,而不会取不到最新的装备)
运用如上git库房装备,经过MultipleJGitEnvironmentRepository(承继JGitEnvironmentRepository(完成EnvironmentRepository接口))运用git api获取git库房装备文件资源。
经过得到的装备资源以ResourceController rest方法供给装备资源,如下所示:
-
config client,经过装备的url或许服务发现拉取config server装备 Config server 经过服务发现注册后,config client能够经过服务发现找到config server,经过config server rest服务拉取装备,经过ConfigServicePropertySourceLocator(完成PropertySourceLocator)获取PropertySource参加Environment中供运用运用。
咱们的config client运用consul服务发现来找到config server来拉取装备,默许ConsulDiscoveryClient获取服务的时分是依据服务id获取一切服务节点,即获取了down的服务,形成拉取装备失利,检查consul服务发现的装备类ConsulDiscoveryProperties发现默许queryPassing=false,经过装备改为true即可回来一切健康检查经过的服务。
-
Spring cloud bus分布式运用装备更新告诉Spring cloud bus支撑rabbitmq和kafka。
由于公司现已布置kafka,所以运用了kafka作为spring cloud bus的音讯组件。装备如下:
#spring cloud bus kafka
spring.cloud.bus.enabled=true
spring.cloud.bus.trace.enabled=false
spring.cloud.stream.kafka.binder.zk-nodes=192.168.11.30:2181,192.168.11.33:2181,192.168.11.35:2181 spring.cloud.stream.kafka.binder.brokers=192.168.11.30:9092,192.168.11.33:9092,192.168.11.35:9092
架构如下:
这时Spring Cloud Bus做装备更新过程如下:
-
提交代码,运用 git 的 webhook 触发post恳求给 bus/refresh
-
Server端接收到恳求并发送给Spring Cloud Bus
-
Spring Cloud bus接到音讯并告诉给其它客户端
-
其它客户端接收到告诉,恳求Server端获取最新装备
-
悉数客户端均获取到最新的装备
3
Spring Boot Admin
spring boot admin是spring boot运用的监控办理服务,经过spring boot actuator监控端点监控spring boot运用的各项目标,地址:http://middleware.nidianwo.com/
剖析下要点类
-
AdminServerCoreConfiguration装备类界说了运用注册ApplicationRegistry类注册刊出运用,StatusUpdateApplicationListener用于监控运用的状况改变,运用ThreadPoolTaskScheduler守时监控运用状况。
-
DiscoveryClientConfiguration装备类运用ApplicationDiscoveryListener监听器经过服务发现DiscoveryClient获取的服务列表运用ApplicationRegistry注册运用,经过内部的部的map存储或许运用Hazelcast分布式存储。
-
RevereseZuulProxyConfiguration装备类界说了zuul相关的装备类,ApplicationRouteLocator扩展zuul的RouteLocator对各个运用的spring boot actuator endpoint进行路由恳求
界面如下:
能够经过界面检查运用的健康状况,内存磁盘运用,java gc状况,装备,日志,thread dump heap dump等各项运用数据。界面如下: