1.什么是单体架构
1.1单体项目就是只有一个Tomcat服务器启动的,业务和代码在一个项目中
1.2优点:
.易于开发:架构简单,技术成本低
.易于测试:所有功能在一个项目中,方便测试
.易于部署:一个Tomcat就可以实现部署,简单方便
1.3缺点:
.单机故障
.并发处理差
.代码臃肿
集群/多实例
概念:把项目赋值多份进行部署
作用:处理高并发,高可用
负载均衡(Nginx)
概念:把请求分发到服务应用集群
算法:随机,轮训,权重
分布式/SOA
概念:按照业务拆分成多个子系统,使用多个服务器部署
作用:解决并发,代码臃肿
SOA:把业务服务化(把功能暴露处理,直接调用),业务调用更加方便,功能重组
缺点:运维成本高,硬件成本高,技术成本高
微服务
概念:基于SOA/分布式 , 系统拆分成多个服务,每个服务的独立的负责一部分功能,有自己的数据库,服务之间项目调用
优势:解决高并发,解决代码臃肿,单个服务业务简单,扩展性强,对敏捷开发支持友好
缺点:运维成本高,硬件成本高,技术成本高 , 服务调用网络开销 ,事务处理麻烦
Eureka
概念
1.1服务注册:客户端启动向服务端注册(服务名,IP,端口等),服务端维护一个服务注册表
1.2服务发现:客户端30s/次拉取注册表缓存到本地,服务调用的时候,去注册表中根据服务名查找服务实例,拿到通信地址,发起HTTP请求
1.3服务续约:客户端30s/次向服务端发送心跳续约请求,报告自己的健康状态,超过3次续约失败,会被剔除
eurekaServer注册中心
1.1.导入依赖:eureka-server
1.2.启动类:@EnableEurekaServer加上这个注解就可以表示开启Eureka服务器
1.3.yaml配置
端口
主机名
禁用服务注册,服务发现
注册地址
eurekaClient(user,order服务)客户端的搭建
1.1.导入依赖:eureka-client + web包
1.2.启动类 @EnableEurekaClient 或者@EnableDiscoveryClient标记为Eureka客户端
1.3yml配置
端口
服务名
注册地址
实例ID
RestTemplate服务通信
1.搭建公共的实体类模块写一个实体类对象
2.订单服务 和 用户服务 : 导入 实体类模块的.jar
3.用户服务:编写controller,返回一个User
4.订单服务:编写一个controller,远程调用User
.定义Bean : RestTemplate
.注入RestTemplate.getForObject(url , 类型)
Ribbon负载均衡
1.用户服务集群
.修改端口,修改实例ID,启动多个
.读取端口:@Value("${server.port}") ,用来区分
2.订单整合Ribbon
.导入Ribbon的依赖
.定义RestTemplate的方法加:@LoadBalanced
.修改RestTemplate调用方式:把ip:端口改成服务名
面试必备
-
微服务的优缺点
-
优点:易于开发和维护,因为一个服务只关注一个特定的业务功能,业务清晰,代码量少,同时技术栈不受限制,比如有些服务可以使用redis,有些服务使用mysql,部分服务使用JAVA开发,部分微服务使用Node.js开发,微服务代码独立,数据独立,如果修改应用,可以对单服务进行修改再部署,并且可根据需求,对各个微服务进行突破瓶颈,比如升级CPU,增加内存等
-
缺点:
提升了运维难度(发版、问题排查、配置管理、监控) -->催生了Jenkins + ELK +Spring Config + Spring Admin + Docker
性能降低,网络延迟,接口调整成本高,微服务之间通过接口进行通信 -
什么是集群什么是分布式,有什么区别
-
集群的概念:集群中每台服务器就叫做这个集群的一个“节点”,所有节点构成了一个集群。每个节点都提供相同的服务,那么这样系统的处理能力就相当于提升了好几倍(有几个节点就相当于提升了这么多倍)。
-
分布式概念:
将一个完整的系统,按照业务功能,拆分成一个个独立的子系统,
在分布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中,它们之间通过RPC方式通信。
-
集群解决什么问题,分布式解决什么问题
-
集群解决高并发问题,分布式解决代码臃肿的问题也就是耦合度的问题
-
SpringCloud常用组件和作用
-
bus:消息总线
-
Eureka的工作流程
-
服务发现,服务注册,服务续约是什么
-
Ribbon的工作流程是什么
-
Ribbon有哪些负载均衡算法
-
随机,轮训,权重