发表于: 2019-10-21 23:16:15

1 856


今天做了什么
spring cloud:

为什么要使用spring cloud?spring cloud可以解决什么问题?
在微服务架构中,当一个大型系统被拆分成微服务系统以后,不仅包括功能拆分,还包括系统拆分、代码拆分、数据库拆分、缓存拆分等,多个系统的部署、维护、调用关系、调度、监控、fail over就会成为一系列问题。同时微服务系统划分越多,调用链路可能会越长,调用链监控、全链路trace也会成为问题。
spring cloud的组件:
  • spring cloud config
    远程配置服务。
    远程配置是每个都必不可少的中间件,远程配置的特点一般需要:多节点主备、配置化、动态修改、配置本地化缓存、动态修改的实时推送等。
    config允许配置文件放在git上或者svn上,和spring boot的集成非常容易,但是缺点就是修改了git上的配置以后,只能一个一个的请求每个service的接口,让他们去更新配置,没有修改配置的推送消息。而且,如果要根据配置文件的修改,做一些重新初始化操作的话(如线程池的容量变化等),会需要一些work around的方法,所以建议如果有其他方案,不建议选择spring cloud config。
  • spring cloud bus
    事件、消息总线,用于在集群(例如,配置变化事件)中传播状态变化。经常与Spring Cloud Config联合使用。
    spring cloud config本身不能向注册过来的服务提供实时更新的推送。比如我们配置放在了git上,那么当修改github上配置内容的时候,最多可以配置webhook到一台config-server上,但是config-server自己不会将配置更新实时推送到各个服务上。
    bus的作用就是将大家链接在一条总线上,这条线上的所有server共享状态,当webhook到bus上的某一台server的时候,其他server也会收到相同的hook状态。
  • eureka
    spring cloud的服务发现组件。这个组件讲起来需要大篇幅,最好和consul一起讲。
    eureka负责服务注册和服务发现,为了高可用,一般需要多个eureka server相互注册,组成集群。Eureka Server的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步。
    eureka内部对于注册的service主要通过心跳来监控service是否已经挂掉,默认心跳时间是15s。这就意味着,当一个服务提供方挂掉以后,服务订阅者最长可能30s以后才发现。
    service启动连上eureka之后,会同步一份服务列表到本地缓存,服务注册有更新时,eureka会推送到每个service。
  • consul
    也是一个服务发现工具,而且自带key-value存储服务、健康检查 和 web页面。
    听起来好像比eureka高大上一些,里面使用了gossip协议和Raft协议,但是他的缺点就是比eureka难维护。
    服务注册是微服务架构的关键节点。所以我们现阶段选择的是eureka,然后远程配置使用的是spring cloud config。如果要上容器和编排的话,会再看具体情况做选择。
  • ribbon:
    客户端负载均衡组件。
    服务发现以后,每个service在本地知道自己要调用的服务有多少台机器,机器的ip是什么,端口号是多少,那这个service在本地需要有一个负载均衡策略,为每一次请求选择一台目标机器进行调用,而ribbon做的就是负载均衡策略的选择。
  • 声明式、模板化的HTTP客户端。
    微服务之间的调用本质还是http请求,如果对于每个请求都需要写请求代码,增加请求参数,同时对请求结果做处理,就会存在大量重复工作,而feign非常优雅的帮助我们解决了这个问题,只需要定义一个interface,fegin就知道http请求的时候参数应该如何设置。
  • hystrix
    断路器,类似于物理电路图中的断路器。
    正常情况下,当整个服务环境中,某一个服务提供方由于网络原因、数据库原因或者性能原因等,造成响应很慢的话,调用方就有可能短时间内累计大量的请求线程,最终造成调用方down,甚至整个系统崩溃。而加入hystrix之后,如果hystrix发现某个服务的某台机器调用非常缓慢或者多次调用失败,就会短时间内把这条路断掉,所有的请求都不会再发到这台机器上。
    如果某个服务所有的机器都挂了,hystrix会迅速失败,马上返回,保证被调用方不会有大量的线程堆积。
    Feign默认集成了hystrix。
  • zuul
    是一个网关组件。提供动态路由,监控,弹性,安全等边缘服务的框架。
    zuul主需要简单配置一下properties文件,不需要写具体的代码就可以实现将请求转发到相应的服务上去。
    还可以定制化一些filter做验证、隔离、限流、文件处理等切面,对于网关来说,使用zuul能减少大量的代码。
  • turbine
    是聚合服务器发送事件流数据的一个工具,用来监控集群下hystrix的metrics情况.
    在复杂的分布式系统中,相同服务的节点经常需要部署上百甚至上千个,很多时候,运维人员希望能够把相同服务的节点状态以一个整体集群的形式展现出来,这样可以更好的把握整个系统的状态。
    turbine提供把多个hystrix.stream的内容聚合为一个数据源供Dashboard展示.
  • Spring Cloud Starters
    spring boot热插拔、提供默认配置、开箱即用的依赖。
    starter 是spring boot框架非常基础的部分。可以自定义starter。
收获
问题
tuscany打jar包运行报错:
没有注册的提供者工厂.
Exception in thread "main" java.lang.IllegalStateException: org.apache.tuscany.sca.runtime.ActivationException: org.apache.tuscany.sca.runtime.ActivationException: org.oasisopen.sca.Se
rviceRuntimeException: No provider factory is registered for binding {http://tuscany.apache.org/xmlns/sca/1.1}binding.rmi
        at org.apache.tuscany.sca.node.impl.NodeImpl.start(NodeImpl.java:178)
        at com.jnshu.mainApplication.MainApplication.main(MainApplication.java:12)
Caused by: org.apache.tuscany.sca.runtime.ActivationException: org.apache.tuscany.sca.runtime.ActivationException: org.oasisopen.sca.ServiceRuntimeException: No provider factory is reg
istered for binding {http://tuscany.apache.org/xmlns/sca/1.1}binding.rmi
        at org.apache.tuscany.sca.core.assembly.impl.CompositeActivatorImpl.activate(CompositeActivatorImpl.java:95)
        at org.apache.tuscany.sca.node.impl.NodeImpl.start(NodeImpl.java:146)
        ... 1 more
Caused by: org.apache.tuscany.sca.runtime.ActivationException: org.oasisopen.sca.ServiceRuntimeException: No provider factory is registered for binding {http://tuscany.apache.org/xmlns
/sca/1.1}binding.rmi
        at org.apache.tuscany.sca.core.assembly.impl.CompositeActivatorImpl.activateComponent(CompositeActivatorImpl.java:140)
        at org.apache.tuscany.sca.core.assembly.impl.CompositeActivatorImpl.activate(CompositeActivatorImpl.java:92)
        ... 2 more
Caused by: org.oasisopen.sca.ServiceRuntimeException: No provider factory is registered for binding {http://tuscany.apache.org/xmlns/sca/1.1}binding.rmi
        at org.apache.tuscany.sca.core.assembly.impl.RuntimeEndpointImpl.getBindingProvider(RuntimeEndpointImpl.java:885)
        at org.apache.tuscany.sca.core.assembly.impl.RuntimeEndpointImpl.getBindingInterfaceContract(RuntimeEndpointImpl.java:1007)
        at org.apache.tuscany.sca.core.assembly.impl.RuntimeEndpointImpl.validateServiceInterfaceCompatibility(RuntimeEndpointImpl.java:626)
        at org.apache.tuscany.sca.core.assembly.impl.CompositeActivatorImpl.activate(CompositeActivatorImpl.java:258)
        at org.apache.tuscany.sca.core.assembly.impl.CompositeActivatorImpl.activate(CompositeActivatorImpl.java:240)
        at org.apache.tuscany.sca.core.assembly.impl.CompositeActivatorImpl.activateComponent(CompositeActivatorImpl.java:131)
        ... 3 more
明天的计划



返回列表 返回列表
评论

    分享到