认识Spring Cloud与微服务

  • 为什么说微服务是趋势
  • 微服务的自动化部署
  • 服务集中化管理
  • 分布式架构(只讲SpringCloud)
  • 版本对应关系(取自[源地址](https://www.jianshu.com/p/863b46694d65))
  • 微服务的不足
  • 是否使用微服务


为什么说微服务是趋势

随着互联网的发展,人们的生活也在不断改变,目前超过一大半的人口都在使用互联网,一个优秀的平台的用户量是在不断增多的,业务场景也是越来越复杂,传统的单体架构已经不能满足日益增长的平台用户,一是随着业务的增多,维护成本增加和代码可读性和扩展性在不断降低;二是将所有的功能全部堆积在一台服务器上,即便是做了负载均衡,依然可能存在系统宕机的风险
微服务应运而来,将一个系统按照功能或者业务拆分成多个模块,每个模块独立开发,独立部署,实现模块化开发,系统之间通过HTTP或者mina,netty长连接实现相互调用,降低模块之间的耦合性,实现分布式系统,有自动化部署、系统容错、快速演进的特点

微服务的自动化部署

在微服务架构中,一个系统往往会被拆成若干个微服务,每个微服务又是单独的应用,单体架构只需要部署一次,而微服务架构有多少个微服务就需要部署多少次,如果按照单体架构的方式部署微服务系统,部署的难度将会大大增加。随着现在技术的发展,尤其是docker容器技术的推进,以及自动化部署(CI/CD持续集成、持续交付和持续部署;如开源工具jenkins等)
自动化部署可以提高部署的效率,减少人为工作将,在部署过程中出错率降低,提高软件质量,构建一个自动化部署系统前期需要技术人员学习。这种去中心化的模式使得后期维护和开发变得更加灵活和方便。由于各个服务单独部署,所以可以使用不同的语句来开发各个业务服务模块

服务集中化管理

微服务是按照业务或者功能来划分模块,一个优秀的系统,后期肯定是微服务模块越来越多,管理起来就比较麻烦,所以必须集中化管理;现在流行的微服务框架中,springCloud采用Eureka来注册服务和发现服务,dubbo采用zookeeper来实现注册服务和发现服务,可以修改默认管理平台,consul也是不错的服务集中化管理框架

分布式架构(只讲SpringCloud)

Spring Cloud是一个基千Spring Boot实现的微服务架构开发工具。它为微服务架构中涉及的配置管理、断路器、服务治理、智能路由、控制总线、分布式会话和集群状态管理等操作提供了一种简单的开发方式。Spring Cloud的诞生并不是为了解决微服务中的某一个问题,而是提供了一套解决微服务架构实施的综合性解决方案。

版本对应关系(取自源地址

Finchley使用Spring Boot 2.0.x构建

Dalston和Edgware发行版建立在Spring Boot 1.5.x之上

微服务的限流策略_微服务的限流策略

微服务的不足

1、构建一个微服务系统并非一件简单的事情,微服务系统是分布式系统,构建的复杂程度远远高于单体服务,并且服务之间相互调用,修改一个服务,可能对其他服务产生影响,如果修改了一个基础服务,可能需要重启所有的服务才行

2、既是分布式系统,肯定会存在分布式系统的难题,分布式系统有一个著名的CAP理论,即同时满足“一致性”、“可用性”、“分区容错性”现阶段是不可能的,在分布式系统中P(分区容错性)是基本要求,而单体服务是CA系统,分布式系统有AP系统和CP系统。

  • Zookeeper是基于CP来设计的,即任何时刻对Zookeeper的访问请求能得到一致的数据结果,同时系统对网络分割具备容错性,但是它不能保证每次服务请求的可用性。
  • 而Spring Cloud Netflix在设计Eureka时遵守的就是AP原则。Eureka Server也可以运行多个实例来构建集群,解决单点问题,但不同于ZooKeeper的选举leader的过程,Eureka Server采用的是Peer to Peer对等通信。这是一种去中心化的架构,无master/slave区分,每一个Peer都是对等的。
  • ZooKeeper基于CP,不保证高可用,如果zookeeper正在选主,或者Zookeeper集群中半数以上机器不可用,那么将无法获得数据。Eureka基于AP,能保证高可用,即使所有机器都挂了,也能拿到本地缓存的数据。作为注册中心,其实配置是不经常变动的,只有发版(发布新的版本)和机器出故障时会变。对于不经常变动的配置来说,CP是不合适的,而AP在遇到问题时可以用牺牲一致性来保证可用性,既返回旧数据,缓存数据。

3、微服务部署需要机器数量比单体服务要多,投入成本更高

是否使用微服务

  • 如果是前期系统业务还未明确,用户量比较少,系统还未真正投入使用,系统针对的用户并非增长状态满足其一则不建议选择使用微服务分布式架构
  • 如果业务方向已经明确,并且用户量很多,单体架构已经不能满足需求,负载均衡已经使用并且依然抵挡不住流量,则建议考虑微服务分布式架构