微服务架构是一种架构思想,采用的开发方式是分布式开发,架构就是为了解耦,分布式系统开发一定会遇到四个问题

本篇博客是对我的偶像撸帝讲解微服务架构做的总结,第一次用这么长的名字做题目。看本篇博客前一定要看以下这篇博客。

 RPC框架—Dubbo的由来到微服务架构(分布式系统开发)演进过程

1.什么是微服务?

   微服务架构是一种思想,采用的开发方式是分布式系统开发,架构就是为了解耦,分布式系统开发一定会遇到四个问题。

2.微服务架构需满足三大指标

       2.1高可用:一直可以用

                k8s,自动重启,自动扩 / 缩容, 主要解决单点故障。

       2.2高并发

            垂直扩展(对单台机器进行硬件升级)

            水平扩展(扩展多台机器,实现多台并行工作,减少单台压力),负载均衡,集群

       2.3高性能

             rpc通信,以及Kyro高速序列化

             HikariCp 连接池,高速连接数据库

            SQL优化 , Redis 缓存

            JVM优化,GC优化   

3.微服务需要解决的四大问题

      服务这么多,客户端是如何访问的

      服务这么多,服务和服务之间是如何通信的

      服务这么多,服务是如何管理的

      服务这么多,服务挂掉了怎么办

4.四大问题

4.1服务这么多,客户端是如何访问的

     如下图:许多服务分布在不同的服务器上面,客户端难道需要记录各个服务器的IP,然后根据IP地址去访问?——永远不可能

我们要知道如果各个服务在同一局域网中,客户端也是无法访问的,必须通过网关访问各个服务。

     

 解决方案(如下图):

    需要有一个统一的网关(API Gateway),客户端只需要记住一台服务器IP,这台服务器提供一个统一的服务入口。

这台服务器聚合后台服务,节省流量,可以提供安全、过滤、流控等API管理功能。有没有一种外观设计模式和代理设计模式的思想。

  此时产生了一个问题,API Getway单点故障,如果该服务器挂掉,所有的服务将无法使用

4.2服务这么多,服务和服务之间是如何通信的

   4.2.1同步通信 ——对内RPC,对外REST

   同步通信有两种,一种是HTTP通信,一种是RPC通信方式,且这两种方式有所不同。

   服务不在一个局域网中,服务之间通信是HTTP通信,不在一个局域网中就存在跨防火墙的问题。HTTP是无状态的,网络传输过程成中认识字符串,然而计算机只认识二进制,此时需要将对象转化为json字符串,然后将json字符串转换为二进制文件,需要序列化两次和反序列化两次,传输效率低。

   服务在一个局域网中,服务之间通信是RPC通信,同一个局域网没有防火墙,则只序列化和反序列化只需要一次。

   4.2.2异步通信

         消息队列,例如kafka rabbitmq Notify

4.3服务这么多,服务是如何管理的

    服务这么多,如果记录每一服务的IP是相当费时间的,此时我们想,如果一个服务器不能使用,则还需要更新服务。

  如果此时有一个服务注册与发现中心,每个服务将自己的信息注册到服务注册与发现中心,当发现服务挂掉以后,该中心自动更新服务并通知给客户端或者其它服务,该服务已经挂掉了,你们将无法使用。而客户端或者其它服务只需要去服务注册中心请求自己需要的服务。——是否用到了观察者模式???

4.4服务这么多,服务挂掉了怎么办?

 服务注册与发现中心管理各个服务,如果该中心挂掉了,所有的服务都将无法使用。此时我们考虑为什么服务注册于发现中心会挂掉???。——所有的鸡蛋(服务)不要放在一个篮子里(服务注册与发现中心)

   挂掉的原因(网络中断,请求过多,服务器处理不过来

     网络中断 

             重试,多次重试连接

      请求过多,服务器处理不过来

           限流,让后来的请求排队。

           负载均衡,水平扩展多个服务注册发现中心。

           熔断机制,当请求超过一定数量,停止请求服务。

            降级(保证主要业务可用)

     

发布了240 篇原创文章 · 获赞 435 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/fjxcsdn/article/details/103338772