赞
踩
springcloud面试题汇总一、微服务架构四个核心问题?
1、服务很多,客户端怎么访问
2、这么多服务,服务之间如何通信
3、这么多服务,如何治理
4、服务挂了怎么办
springcloud面试题汇总二、微服务优缺点
优点
1、单一职责
2、每个服务足够内聚,足够下小,代码容易理解,这样能聚焦一个指定的业务功能或业务需求
3、开发简单,开发效率高,一个服务可能就是专一的干一件事
4、微服务能够被小团队单独开发,可以是2-5人组成
5、微服务是松耦合,是有功能意思的服务,无论是在开发解读那还是部署阶段都是独立
6、微服务能使用不同的语言开发
7、每个服务都是自己的存储能力
缺点
1、开发人员要处理分布式系统的复杂行
2、随着服务的增加,运费的压力也增大
3、系统部署依赖
4、服务间的通信成本
5、数据一致性
6、系统集成测试
7、性能监控
springcloud面试题汇总三、为什么要选择cloud做微服务架构
1、整体解决方案和框架成熟度
2、社区热度
3、可维护性
springcloud面试题汇总四、cloud深入了解
1、所有实体类必须实现序列化,传输汇报错误
2、热部署 spring-boot-devtools
3、请求接口 Get/postForObject4、RestTemplate{请求接口地址,参数,返回值类型}
5、需要通过bean把接口注入进去
springcloud面试题汇总五、Eureka注册中心
1、理念:Eureka:服务注入,显示当前已有的服务,自我保护机制:好死不如赖活着,宁可同时保留所有的服务,也不盲目的注销监看的服务,自我保护机制也可以关闭
2、client.getServices获取微服务列表,getInstances根据服务名字获取服务信息
3、CAP原则:c:强一致性,a:可用性,p:分区容错性,ca:单点集群,满足一致性,可用性的系统,通常可扩展性较差,ap:满足一致性,分区容错性的系统,通常性能不是特比高,cp:满足可用性,分区容错性的系统,通常可能对一致性要求低
4、ACID原则:a:原子性,c:一致性,I:隔离性,d:持久性
5、Zookeeper:保证cp原则:容忍注册中心返回几分钟以前的信息,但是不能容忍服务直接死掉,当master节点失去联系回重新选择master节点,选取时间过长,服务期间不能使用,
6、Eureka:保证ap原则:各个节点平等,其中一个节点死掉也会正常运行,只不过信息可能不是最新的,如果在15分钟内超过85%的节点没有正常心跳,会采取一下措施
a:不会从列表中移除
b:任然能够接受新服务的注册和查询请求,但是不会被同步到其他节点上
c:当前网络稳定时,单前实例新的注册信息会被同步到其他节点中
总结:Eureka可以很好的应对因网络故障导致的部分节点失去联系的情况,而不会像zookeeper那样使整个注册服务瘫痪
springcloud面试题汇总六、Ribbon负载均衡
1、cloud ribbon是基于netflix ribbon实现的一套客户端负载均衡工具,提供客户端的软件负载均衡算法,将netflix的中间层链接起来,配置项:丽娜姐超市,重试,ribbon会自动的帮你基于某种规则如(单轮询,随机链接),
2、ribbon能干嘛
将用户的请求平均分配到,多个服务上,从而达到系统的HA
3、常见的负载均衡软件,nginx,lvs
4、dubbo,springcloud中均给我提供了负载均衡,cloud的负载均衡算法可以自定义
5、依赖:cloud-starter-ribbon,cloud-starter-eureka
6、原先Eureka是指定服务链接,现在是指定服务名字
7、LoadBalanced 开启负载均衡
springcloud面试题汇总七、负载均衡类型
1、RoundRobinRule 轮询
2、RandomRule随机
3、AvailabilityFilteringRule 先过滤掉故障服务,对剩下的服务进行轮询
4、RetryRule 先按照轮询获取服务,如果服务获取失败,则会在指定时间内进行重试
5、负载均匀用法 @Configuration @Bean 外加算法
自己写的不能与主应用程序统计目录,因为会被@ComponentScan扫描到
6、RibbonClient(name="服务名称", configuration = 负载均衡算法类名.class)
springcloud面试题汇总7、随机服务源码
八、FeignClient(注入服务名,让别的服务能获取到你的方法)
Component FeignClient(vlaue="服务名")
启动类:@EnableFeignClients 扫描FeignClient @COmponentScan让所有的注解都生效
单体应用存在哪些问题。‘
答:1)。代码结构混乱
2)。开发效率降低,多人开发代码合并,修改一处逻辑,可能影响全部功能。
3)。排查解决问题成本高。单体系统部署在一个进程内,我们修改了一个很小的功能,为了部署上线,可能会影响其他功能的运行。
4)。扩展能力受限,有的模块是计算密集型的,需要强大的cpu,有的是io密集型的,需要更大的内存,这些模块部署在一起,不得不做出硬件上的选择。比如有的微服务,专门做图片的上传和下载,就比单体应用做上传和下载好。
5)。阻碍技术创新,一直用单体应用,很多技术都限制死了,无法自由发挥。比如以前使用struts2,不能切换为springmvc。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。