微服务项目小结1

01.微服务的概念

  • 单体、分布式、集群 (面试用到)
  • 微服务
  • 把之前的大的应用,按照业务功能拆分成若干个小的模块,每个模块都是独立的开发,测试,上线,维护
  • 缺点: 开发成本高,众多服务出错的处理(容错),分布式事务的问题.

02.搭建项目的环境
- shop-parent(管理统一依赖)
- shop-product-api(存放商品服务实体类)
- shop-product-server(提供商品服务项目)
- shop-order-api(存放订单服务的实体类)
- shop-order-server(提供订单服务项目)

03.基于RestTemplate实现订单服务调用商品的服务.

04.注册中心 (面试常考的点)

  • 解决服务调用的IP端口管理的问题
  • 所有服务启动的时候将IP和端口注册到注册中心
  • 所有服务在启动的时候,拉取服务器上最新服务列表,周期性更新最新的服务列表
  • 实际在远程调用的时候,读取本地的缓存的服务列表
  • 通过心跳的机制实现服务的动态感知.(注册中心在15秒没有收到客户端的心跳,把该服务实例信息健康状态修改成false,在30秒没有客户端心跳,把该服务的实例信息从列表中移除掉)

04.自定义负载均衡
@Autowired
private DiscoveryClient discoveryClient; ===>存储本地服务列表信息,根据服务名获取服务列表

05.SpringCloud提供的负载均衡组件
- 添加依赖
- 在RestTemplate对象中添加@LoadBalanced===>给RestTemplate添加拦截器,在发送请求前将服务名替换成的具体IP地址
- 在程序中 写这样的地址 http://product-service/product/get?pid=1
- 可以修改负载均衡策略,在配置类添加负载均衡的bean

06.远程调用组件Feign
- 调用远程接口像调用本地代码一样.
- 定义接口,在接口上定义@FeignClent(name=“product-service”,path=“/product”)
/**
name: 定义远程调用服务明后才能
path: 远程访问路径前缀
*/
@FeignClient(name = “product-service”,path = “/product”)
public interface ProductFeignApi {
//具体的地址信息
@RequestMapping(“/get”)
//定义参数的名称
Product get(@RequestParam(“pid”) Long pid);
}
工作原理: 通过动态代理+反射的方式,拼接成远程调用的服务的地址,底层httpURLConnection,发送请求,访问远程接口. (面试可能问到)

07.服务雪崩的问题

  • 由于微服务众多,中间存在相互调用关系. 如果某个微服务出现问题,导致其他微服务调用,出现请求阻塞,导致资源被耗尽,出现连锁反应,导致所有的微服务都不可用.
  • 常见容错机制
  • 资源的隔离 (并不会把所有的资源都分配给某一个微服务)
  • 超时机制(当服务调用长时间没有响应,可以主动断开请求,这个线程就可以重新接受其他请求)
  • 限流操作(对服务器提前做压测,了解服务器的情况,对服务接口做限流,保护系统)
  • 熔断机制(对服务器做监控,当CPU,内存,响应时间,错误率,错误数达到设定的阈值,此时服务器压力很大了,主动熔断)
  • 降级机制(当调用其他服务,其他服务不可用的情况下,此时为了用户体验感更好些,走本地的备用方案)
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值