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