微服务架构
需要解决的问题
- 这么多服务,客户端如何访问
- 这么多服务,服务与服务之间如何通信
- 这么多服务,如何管理
- 这么多服务,挂了怎么办
微服务架构=
水疗会所
服务消费者=你
服务提供者=技师
你怎么联系技师?需要注册中心=会所
- 如果没有注册中心?
- 你就需要社交软件,例如,微信,你要一个一个手机号码留着,联系方式,姓名等个人信息你要存着,就很麻烦,还要维护关系
- 有注册中心?
- 消费者(你)并不用维护和提供者(技师)的关系,可以找注册中心(会所)找到提供者(技师)
- 缓存
- Redis 缓存穿透,缓存击穿,缓存雪崩
- 什么是缓存?
- 8号技师(key),去会所直接说我找8号就可以直接提供服务.
- 什么是缓存穿透?
- 数据库和缓存里都没有这个数据(你拿着8号技师去会所找她服务,她离职了,你去找会长,会长就去技师房问8号技师在不在?不在)
- 这就相当于穿透,拿着东西要服务的时候,没有key为8的值,就去数据库找,也没有.(又经过缓存又经过数据库),效率低
- 什么是缓存击穿?
- 例如,key很热门,属于爆款商品,就存到缓存,有可能有缓存失效时间,这笔数据失效的一瞬间,我就拿着id去缓存拿不到数据,就去数据取数据
- (会长以为8号在会所,实际去吃饭了,然后通知技师,本来刚刚是在的,会长跟你说在,你去了,突然8号去吃饭去了,要想8号提供服务,等她回来路上会花点时间)
- 什么是缓存雪崩?
- 同一时间,集中式的key消失了(比如,我存10条数据,过期时间都是60秒,60秒一到,10条数据都失效了)
- (你有8,9,10三个号码牌,你跟会长说”8号在不在?”,”不在”,”9号在不在?”,”不在”,”10号在不在?”,”也不在”,这就是雪崩,要么跟你额外安排吧,这就是去数据库里查,要么把她从家里喊过来)
- 什么是缓存?
- Redis 缓存穿透,缓存击穿,缓存雪崩
- 熔断机制
- 警察来了,你去会所问会长,今天有什么服务啊,会长说”只有足疗”,谁问都一样只有足疗,返回一个固定的结果,因为警察来了嘛,对不对
- 高可用
- 你去会所找8号技师,8号不在,还有9号,你可以找9号,9号不在找10号,这就高可用,一直可以用
- 高性能
- 通过训练,提高技师们的能力,进行优化
- 高并发
- 负载均衡,8号,9号技师轮流服务
- 如果没有注册中心?
盖房子
- 分布式,可以高可用
- 一个人搬砖,一个人砌墙,一个人和泥,很多人干不同的事情
- 集群,可以高可用
- 十个人搬砖,十个人砌墙,十个人和泥,很多人干相同的事情
- 高可用(集群,负载均衡,限流,降级,熔断)
- 十个人干活,病了一个人没来干活,剩下九个人依然可以继续工作下去,一台服务器挂掉了不影响服务运行
- 可扩展
- 十个人这个活干不完,需要再叫几个人来帮忙一起干
- 负载均衡
- 有十个人,第一个先干一会,然后第一个人歇着让第二个人再干依次…
- 如果不做负载均衡,第一个人干活,其他九个人看着,第一个累死了,然后上第二个人,最后都累死了,工程也没干完…
- 限流
- 老板说就100台服务器,你还问我要服务器,不能干就滚蛋,这时候,你需要做限流
- 比如高峰期,放一部分请求过去,大部分请求拦截,这就是限流
- 限流的方案秒杀
- 限流的方案zuul网关(比如一秒钟只放一万个请求,剩下的先做拦截
- 做一个熔断,返回一个提示信息,比如提示”服务器繁忙,稍后再试!”,两三秒之后没有那么繁忙了,就可以正常访问了)
高并发
(分布式,静态技术,缓存技术,异步并发,池化,队列)
- 分布式集群
- 很多台服务器,加服务器
- 静态技术
- 比如商品详情页,被人访问的特别多,我们就可以生产静态页面,保存到服务器端,下次访问就不用渲染,通过静态页面做响应
- 缓存技术
- redis,缓存数据库,减少每次的请求访问时间,可能之前200毫秒,现在只需50毫秒,剩下更多的时间去处理更多的其他请求了
- 异步并发
- rabbitmq,消息中间件,用户访问有波峰和波谷,波峰的时候,先返回默认数据,把消息发送到队列
- 比如,你下个订单,我先让你下载成功,然后我紧跟着再去处理库存问题,生产订单,处理物流信息,先把消息放队列里面去
- 到了波谷,比较空闲了,然后从队列中获取消息再进行处理
- 池化
- 例如使用Tomcat线程池
- 队列
- 例如异步并发的消息队列