- 1.开发人员需求少,一个开发师即可完成
- 2.部署简单
- 3.技术单一
- 1.启动效率低,全部资源在一个单体项目
- 2.隔离性差
- 3.可伸缩性差
- 4.跨语言程度差
- 1.易于开发和维护
- 2.单个服务启动较快
- 3.局部修改容易部署
- 4.伸缩性强
- 5.技术栈不受限
- 1.运维成本变大
- 2.带来的分布式系列问题
使用SpringCloud,提供了完美的解决方案,是一系列框架组成的集合体,封装了许多组件,解决微服务带来的一些分布式问题
三、服务的注册与发现 1.硬编码暴露端口 弊端:- 维护难度大,IP变化必须修改代码
- 如果服务端有集群,客户端自己实现负载均衡
- 客户端无法动态感知服务的上线与下线(服务端集群的服务器数量变化)
- 服务注册(服务提供者),将元数据信息(metadata)加入到map(key:服务名,value:端口)集合中,放到注册中心
- 服务发现(服务消费者),从** 注册中心中根据服务名称,返回服务的实例列表,使用ribbon**实现负载均衡
- 端点监控的依赖
- 注册中心的依赖
spring:
cloud:
nacos:
discovery:
username:nacos
password:nacos
server-addr:localhost:8848 #指定nacos地址端口
namespace:dev #指定命名空间
group:dev-group #指定分组
application:
name:goods #指定应用名(就是注册中心的名称)
server:
port:9001 #指定进程启动端口号
集群配置
@Value("${port}")
private String PORT;
3. 服务分为提供者和消费者
1)提供者按照正常的controller写,启动类需要加上@EnableDiscoveryClient
2)消费者需要加上@EnableDiscoveryClient
六、Ribbon(蝴蝶结),客户端负载均衡器(存放在客户端)
nginx就是服务端负载均衡器
1.使用在Template实体类上加上@LoadBalence注解
2.实现原理 注册中心双层map集合- 外层:key:命名空间,value:内层map
- 内层:key:组+服务名,value:实例服务地址
- 拦截所有http请求
- 获取请求地址,解析出servicename
- 根据servicename获取实例列表,先在本地缓存获取,



