1.什么是微服务
微服务(Microservices)由Martin Fowler在2014年提出(原文链接:Microservices),是一种架构风格。与传统的单体应用架构相比,微服务是一种分布式架构的实现,采用了分而治之的思想,微服务架构提倡将各个模块进行拆分(如用户模块、支付模块等)。每个模块有其自己的服务,时整个应用更加的轻量级,同时降低了代码之间的耦合度,各个服务之间采用HTTP进行通信。
除此之外,在微服务中,各个服务可以使用不同的发开语言进行开发,也可以使用不同的存储技术进行数据存储。比如,用户服务随着我们的业务逐渐复杂,发现用户服务的请求也越来越慢,就可以使用golang重构用户服务或采用性能更优的数据库进行数据存储。
2.从单体架构到微服务
在我们学习的过程中,将所有的业务模块都打包到一个jar包中,然后将其部署运行就是单体应用,在简单的业务中,单体架构能够满足我们的需求。但随着业务的逐渐复杂,一个服务器可能无法承受如此大的访问量,响应越来越慢,这时候能够想到的最简单的方法就是购买多个服务器,将应用在服务器上一个个部署,再结合负载均衡,这样就将我们的单体应用变成了一个简单分布式应用。
思考一个问题,是不是我们应用中的所有模块都有如此大的业务需求和访问量呢?比如12306抢票软件的主要访问量在车票、机票的购买,而用户的管理模块访问量并不大。如果采用上述的方式,将造成服务器资源的浪费。但是如果我们将单体应用中的各个服务进行拆分,而后根据实际的需求,将实际需求对服务进行集群部署,就可以解决服务器资源浪费的情况了,如下图所示:
但在实际的开发过程中,选择单体架构还是微服务架构需要从多个方面进行考量,如成本、项目规模、技术难度等。下面列出微服务架构和单体架构各自的优缺点:
单体架构:
优点:部署成本低, 架构简单便于实现,技术实现难度低
缺点:代码耦合度高,不利于性能扩展
微服务:
优点:服务间耦合度低,各个服务便于各自升级维护,开发更加灵活,不同服务可以用 不同的技术实现,只要能保证服务之间能够正常通信
缺点:部署成本高、运维和监控难度大,技术难度高。
3.Spring Cloud与微服务的关系
很多人一提到Spring Cloud和微服务会将两者认为是同一个东西,其实这是不对的。
微服务是一种架构风格和方案,微服务不仅仅是将应用进行拆分而已,还包括服务的管理、监控、通信等。
Spring Cloud其实也并不是一种新的框架,而是基于Spring Boot将各种微服务框架进行了整合,能够实现微服务的落地框架。如Spring Cloud中集成了服务的管理(Nacos、Eureka),服务的远程调用(Fegin、Dubbo)等。
4.Spring Cloud Alibaba
Spring Cloud是由阿里巴巴开源提供,符合Spring的设计规范,已被Spring官方纳入Spring体系中的一个微服务框架。Spring Cloud Alibaba是目前最火的微服务框架。
Spring Cloud Alibaba中集成了大量阿里的开源组件:
Nacos:用户注册和管理服务
Gateway:API网关
Sentinel:用于控制服务流量管理
RocketMQ:用于解决服务之间消息的推送
Dubbo:高性能RPC(远程调用) 框架。
Seata:用于解决分布式事务
依靠SpringCloud Alibaba,引入少量依赖,就可以与实现阿里巴巴微服务的解决方案。同时由于这些开源框架的官方文档都是中文的,学习也更加容易。