SOA、分布式、微服务之间有生命关系和区别?

1、分布式:是指将单体架构中的各个部分拆分,然后部署不同的机器或进程中去,SOA和微服务基本上都是分布式架构。
2、SOA:是一种面向服务的架构,系统的所有服务都注册到总线上,当调用服务时,从总线上查找服务信息,然后调用。
3、微服务:是一种更彻底的面向服务的架构,系统中各个功能个体抽成一个个小的应用程序,基本保持一个应用对应一个服务的架构。

spring cloud核心组件及其作用?

一:Eurka:服务注册与发现(是CS框架,单独部署)
1、注册:每个服务都向Eurka登记自己提供服务的元数据,包括服务的ip地址、端口号、版本号、通信协议等。eurka将各个服务维护在一个服务清单(双层Map,第一层key是服务名,第二层key是实例名,value是服务地址加端口)中。同时对服务维持心跳,剔除不可用的服务,eurka集群各个节点相互注册(注册不了也不影响eurka的使用,保证高可用)每个实例中都有一样的服务清单。
2、发现:eurka注册的服务之间调用不需要指定服务地址,而是通过服务名在注册中心找,并获取所有服务实例清单(缓存到本地),然后实现服务的请求访问。
二: Ribbon:客户端负载均衡
服务间发起请求的时候,基于Ribbon做负载均衡,从一个服务的多台机器中选择一台(被调用方的服务地址有多个),Ribbon也是通过发起http请求,来进行的调用,只不过是通过调用服务名的地址来实现的。虽然说Ribbon不用去具体请求服务实例的ip地址或域名了,但是每调用一个接口都还要手动去发起Http请求。

@RestController
public class ConsumerController{
	@AutoWired
	RestTemplate restTemplate ;
	@GetMapping("/ribbon-consumer")
	public String helloConsumer(){
		// 调用服务名的地址
		return restTemplate.getForEntity("http://exampleservice/index",String.class).getBody();
	}
}

三:Feign:Ribbon的基础上进行进一步的封装
基于Feign的动态代理机制,根据注解和选择器,拼接URL地址,发起请求,简化服务间的调用,在Ribbon的基础上进行进一步的封装。单独抽出了一个组件,就是spring cloud Feign。在引入spring cloud feign后,我们只需要创建一个接口并用注解的方式来配置它,即可完成对服务提供方的接口绑定。调用远程就像调用本地一样。

@RestController
public class UserController {
   @GetMapping("/getUser")
   public String getUser(){
       List<String> list = new ArrayList<>();
       list.add("张三");
       return list.toString();
   }
}

@FeignClient(name = "user")
public interface UserClient{
   @GetMapping("/getUser")
   String getUser();
}

@RestController
public class TestController{
   @Resource
   UserClient userClient;
   @RequestMapping("test")
   public String test(){
       return userClient.getUser();
   }
}

四、Hystrix:服务熔断
发起请求是通过Hystrix的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,通过统计接口超时次数返回默认值,实现服务熔断和降级(不立即响应,延长相应时间)。
五:Zuul:服务网关
如果前端、移动端要调用后端系统,统一从Zuul网关转发请求给相应的服务,通过与Eureka进行整合,将自身注册为Eureka下的应用,从Eureka下获取所有的服务实例,来进行服务的路由。Zuul还提供了一套过滤机制,开发者可以自己指定哪些规则的请求需要执行校验逻辑,只有通过校验逻辑的请求才会被路由到具体服务实例上,否则返回错误提示。

spring cloud和dubbo有哪些区别?

spring cloud 是一个微服务框架,提供了微服务领域中的很多功能组件, dubbo一开始是一个RPC调用框架,核心是解决服务调用的问题;
spring cloud 是一个大而全的框架,dubbo则更侧重于服务调用,所以dubbo所提供的功能没有spring cloud全面,但是dubbo的服务调用性能比spring clou高,不过spring cloud和dubbo并不是对立的,是可以结合起来一起使用的。

spring cloud和spring cloud Alibaba都有哪些组件?都解决了什么问题?

更多推荐

面试题_SpringCloud