微服务架构被认为是当下最流行的技术架构。它并不是一个新鲜事物,最早由 Martin Fowler 在20世纪80年代提出,他倡导使用面向对象技术构建多层企业应用。随着时间的推移,尤其是在用户量与数据量激增的当下,微服务这个概念逐渐被重视,变得流行起来。
我们要学习微服务架构,就要了解它,本章将带领大家初步了解微服务,为后面系统学习微服务架构奠定良好的基础。
如今,互联网技术正在飞速发展,应用架构也在不断更新,它给我们带来了挑战,但同时也带来了机遇。从互联网诞生之初到现在的大数据时代,应用架构主要分为单体架构和分布式架构,而微服务架构是分布式架构中粒度最细的一种方式。
单体架构
单体架构,顾名思义,就是一个项目工程包含了系统的所有功能模块,它最终会打包为一个应用程序包(比如 war包)。图1-1展示了单体应用架构图。
在系统上线初期,用户量和访问量较小,系统功能也不多,采用单体架构将所有功能模块部署到一台服务器上,没有太多影响。但随着用户量和访问量的增加,系统功能变得复杂,单体架构已经不能适应系统的需求。于是单体架构的劣势逐渐凸显,主要体现在以下几个方面:
单体架构虽然有上述劣势,但是并不代表一无是处,它也有一些优点:
微服务架构
鉴于单体架构的诸多不足,随着互联网技术的发展,微服务架构应运而生。
微服务架构,通俗来说就是将一个系统的功能模块按照一定的粒度划分为不同的服务,其中粒度划分情况根据系统的实际情况而定,可以是一个模块,也可以是一个方法。此外,我们既可以将每个服务独立部署,也可以将多个服务部署到一台服务器上。各个服务之间是松耦合的,它们通过一定的方式进行通信,比如HTTP和 RPC。
严格来说,微服务不属于一个具体的架构,而是一种架构风格。图1-2描绘了一个微服务架构。
对比单体架构,微服务架构有以下几个优势:
如何选择架构风格
前面分析了单体架构和微服务架构各自的特点,针对不同的应用,我们需要选择不同的架构风格。
单体架构:适用于功能简单、用户量小、访问量小以及需求变更不频繁的应用。
微服务架构:适用于功能模块复杂多变、用户量和访问量较大的应用。
综上所述,我们在选择架构风格时,不要一味地追求新技术,也不要一味地固守成规,应该根据自身的业务需求以及未来的发展方向,选择适合自己系统的架构。
过去,系统应用功能单一、架构简单,企业级应用广为流行,从EJB到 Struts,再到 Spring。如今,为了适应不断变化的需求,微服务进入了我们的视野。
要学习微服务,首先应该了解微服务的现状以及今后的发展趋势,微服务能够带给我们什么,有哪些第三方框架能够帮助我们快速搭建微服务架构。
微服务现状
从微服务开始流行到现在不过几年时间,小到创业型公司,大到集团公司,无一不在谈论微服务,可见其火爆程度,但又有多少人真正了解它呢?可能有一个现象:不论什么项目,在立项之初设计架构时都会先把微服务的概念放进去,而最终上线后发现维护成本增加,部署困难。这一方面可以看出微服务的流行程度,另一方面可以看出大多数人对微服务的认识并不深刻,只是觉得微服务是一种趋势,于是跟风而去。
下面我主要从以下几个方面来总结微服务的现状。
综上所述,微服务作为一种架构风格,已经被越来越多的企业所采纳,今后还会有更多的企业将微服务作为系统架构的首选方案。
微服务发展趋势
技术随着时代的发展而不断进步,微服务也在不断发展。
以Spring Cloud和 Dubbo为代表的微服务框架作为第一代微服务,曾经占据着市场主导地位,甚至一度成为微服务的代名词。后来,随着应用越来越复杂,服务间通信越来越频繁,如何保证服务间通信的稳定性,成为企业最为头疼的问题。有问题就有应对方案,下一代微服务解决方案Service Mesh应运而生。
Service Mesh被称作“服务网格”,是服务间通信的基础设施。换句话说,它负责服务间的通信、熔断、监控和限流。和Spring Cloud不同,它是一种非侵入式框架,并不关心各个服务的实现细节,应用层也无须关心TCP/IP这一层。
可以看出,微服务发展非常迅速,我们称之为“业务驱动技术”,即有什么样的业务,就会有什么样的技术应对。
微服务有很多优点,但它并不是万能的。要想成功实施微服务解决方案,需要面临许多挑战。
探讨了微服务的理论基础后,我们的最终目的还是要回到实践上来。如何实现微服务架构?如何选择微服务框架?微服务的整体架构又是怎样的?本节将带领大家一起来探讨这些问题。
技术选型
我们知道,现在是Spring Cloud和 Dubbo的天下。而技术框架越多,开发者越迷茫,不清楚到底该采用何种框架。下面就对Spring Cloud和 Dubbo进行比较,以便读者能够清晰地认识两种框架的特点,在实际项目中选择适合自身的框架。
Spring Cloud实现了微服务架构的方方面面,而Dubbo只实现了服务治理,它仅是其中的一个方面。下面通过表1-1对其进行比较。
可以看出,Spring Cloud 比较全面,而 Dubbo由于只实现了服务治理,在集成其他模块时,需要单独引入,这无疑增加了学习成本和集成成本。虽然如此,但目前国内采用Dubbo的公司较多,原因如下:
本文中,我们将选用Spring Cloud作为实战框架,以实战为导向,带领大家逐步搭建一套完整的微服务架构。
整体架构思路
图1-3给出了利用Spring Cloud搭建一套完整微服务解决方案的整体架构。
通过图1-3,我们大概可以知道,所有的客户端请求都是通过服务网关来完成的,而服务网关通过注册中心才能找到具体的服务。因此,我们的服务在启动后都必须注册到注册中心。在实际中,为了保证微服务的高可用性,一个服务往往会启动多个端口,甚至部署到不同的服务器上,这样一来,即使某个端口宕机,也不会影响全局。当然,这就需要注册中心来管理这些服务。
在解决了应用的并发瓶颈后,数据库就成为了整个应用的瓶颈。因此,不同的微服务可能会连接不同的数据库,甚至每个服务对应的数据库都可能部署集群,服务间在保证低耦合的前提下也需要进行相互通信,它们通信的基础就是HTTP。
本篇中,我们首先比较了单体架构和微服务架构的优劣,并分析了如何选择适合自己项目的架构方案。
其次,我们大致了解了微服务的基本概念,也了解到当今微服务的发展趋势和现状,进而对比了当前最流行的微服务框架。
最后,结合一张简单的微服务架构图,让读者对微服务架构有了清晰的认识,为后续搭建一套完整的微服务框架打下基础。