SpringCloud微服务实战:带你走进微服务架构的世界

微服务概述

微服务架构被认为是当下最流行的技术架构。它并不是一个新鲜事物,最早由 Martin Fowler 在20世纪80年代提出,他倡导使用面向对象技术构建多层企业应用。随着时间的推移,尤其是在用户量与数据量激增的当下,微服务这个概念逐渐被重视,变得流行起来。

我们要学习微服务架构,就要了解它,本章将带领大家初步了解微服务,为后面系统学习微服务架构奠定良好的基础。

应用架构概述

如今,互联网技术正在飞速发展,应用架构也在不断更新,它给我们带来了挑战,但同时也带来了机遇。从互联网诞生之初到现在的大数据时代,应用架构主要分为单体架构和分布式架构,而微服务架构是分布式架构中粒度最细的一种方式。

单体架构

单体架构,顾名思义,就是一个项目工程包含了系统的所有功能模块,它最终会打包为一个应用程序包(比如 war包)。图1-1展示了单体应用架构图。

SpringCloud微服务实战:带你走进微服务架构的世界_第1张图片

在系统上线初期,用户量和访问量较小,系统功能也不多,采用单体架构将所有功能模块部署到一台服务器上,没有太多影响。但随着用户量和访问量的增加,系统功能变得复杂,单体架构已经不能适应系统的需求。于是单体架构的劣势逐渐凸显,主要体现在以下几个方面:

  1. 代码臃肿,结构复杂,不利于扩展;
  2. 一个工程包含所有功能模块,导致启动周期长;任何模块崩溃,均会导致整个应用无法访间;
  3. 扩展能力有限,只能作为一个整体扩展,伸缩困难。

单体架构虽然有上述劣势,但是并不代表一无是处,它也有一些优点:

  • 易于开发和测试,只需要启动一个工程便可进行开发和测试;
  • 部署简单,维护方便,只需一个应用程序包即可发布整个应用。

微服务架构

鉴于单体架构的诸多不足,随着互联网技术的发展,微服务架构应运而生。

微服务架构,通俗来说就是将一个系统的功能模块按照一定的粒度划分为不同的服务,其中粒度划分情况根据系统的实际情况而定,可以是一个模块,也可以是一个方法。此外,我们既可以将每个服务独立部署,也可以将多个服务部署到一台服务器上。各个服务之间是松耦合的,它们通过一定的方式进行通信,比如HTTP和 RPC。

严格来说,微服务不属于一个具体的架构,而是一种架构风格。图1-2描绘了一个微服务架构。

SpringCloud微服务实战:带你走进微服务架构的世界_第2张图片

对比单体架构,微服务架构有以下几个优势:

  1. 一个服务只做一件事,结构清晰;
  2. 一个应用由多个工程组成,每个服务启动周期短;
  3. 各服务之间是独立的,一个服务宕机不会影响全局;
  4. 低耦合,易于扩展,如果要加入一个新的需求,只需要创建一个微服务,同一个系统下的其他微服务通过HTTP、RPC等方式就可以访问新服务的数据。

如何选择架构风格

前面分析了单体架构和微服务架构各自的特点,针对不同的应用,我们需要选择不同的架构风格。

单体架构:适用于功能简单、用户量小、访问量小以及需求变更不频繁的应用。

微服务架构:适用于功能模块复杂多变、用户量和访问量较大的应用。

综上所述,我们在选择架构风格时,不要一味地追求新技术,也不要一味地固守成规,应该根据自身的业务需求以及未来的发展方向,选择适合自己系统的架构。

微服务现状及发展趋势

过去,系统应用功能单一、架构简单,企业级应用广为流行,从EJB到 Struts,再到 Spring。如今,为了适应不断变化的需求,微服务进入了我们的视野。

要学习微服务,首先应该了解微服务的现状以及今后的发展趋势,微服务能够带给我们什么,有哪些第三方框架能够帮助我们快速搭建微服务架构。

微服务现状

从微服务开始流行到现在不过几年时间,小到创业型公司,大到集团公司,无一不在谈论微服务,可见其火爆程度,但又有多少人真正了解它呢?可能有一个现象:不论什么项目,在立项之初设计架构时都会先把微服务的概念放进去,而最终上线后发现维护成本增加,部署困难。这一方面可以看出微服务的流行程度,另一方面可以看出大多数人对微服务的认识并不深刻,只是觉得微服务是一种趋势,于是跟风而去。

下面我主要从以下几个方面来总结微服务的现状。

  1. 微服务框架盛行。Spring Cloud和Dubbo等技术框架已经被各大技术公司广泛应用,企业大多会要求员工使用这些框架。
  2. 容器技术日渐成熟。微服务因维护和部署的门槛高,越来越依赖容器技术,而当下最流行的容器技术非 Docker莫属。利用Docker 部署微服务应用变得越来越方便,Kubernetes作为Docker的搭档,已经成为当前部署微服务应用的首选。
  3. 云平台备受推崇。云平台提供中间件和云服务器等资源,即使是不懂运维的开发人员,都可以很轻松地部署一套微服务应用,这使得微服务应用的门槛越来越低。

综上所述,微服务作为一种架构风格,已经被越来越多的企业所采纳,今后还会有更多的企业将微服务作为系统架构的首选方案。

微服务发展趋势

技术随着时代的发展而不断进步,微服务也在不断发展。

以Spring Cloud和 Dubbo为代表的微服务框架作为第一代微服务,曾经占据着市场主导地位,甚至一度成为微服务的代名词。后来,随着应用越来越复杂,服务间通信越来越频繁,如何保证服务间通信的稳定性,成为企业最为头疼的问题。有问题就有应对方案,下一代微服务解决方案Service Mesh应运而生。

Service Mesh被称作“服务网格”,是服务间通信的基础设施。换句话说,它负责服务间的通信、熔断、监控和限流。和Spring Cloud不同,它是一种非侵入式框架,并不关心各个服务的实现细节,应用层也无须关心TCP/IP这一层。

可以看出,微服务发展非常迅速,我们称之为“业务驱动技术”,即有什么样的业务,就会有什么样的技术应对。

微服务架构面临的挑战

微服务有很多优点,但它并不是万能的。要想成功实施微服务解决方案,需要面临许多挑战。

  1. 更高的运维要求。对于单体架构的系统,我们只需要维护一个应用即可;而对于微服务架构,一个大型的微服务系统可能由成千上万个服务组成,每一个服务都需要投入人力去维护。因此,需要保证如此多的服务正常稳定地运行,这给运维工程师带来了巨大的挑战。
  2. 学习成本增加。一个微服务系统往往涵盖了很多技术栈,比如注册与发现有 Eureka 、ZooKeeper 和 Consul,配置中心有Spring Cloud Config,服务网关有Zuul和 Gateway。每项技术都需要去研究,在有限的时间内,我们要“吃透”这么多技术,无疑充满了挑战。
  3. 复杂的系统架构。微服务架构由多个工程组成,相比单体架构,不同的服务会分布在不同的服务器上。在我们的开发过程中,经常需要同时开启多个工程,开发人员也只有理解各个工程之间的复杂关系,才能顺利做好开发工作。

怎样实现微服务架构

探讨了微服务的理论基础后,我们的最终目的还是要回到实践上来。如何实现微服务架构?如何选择微服务框架?微服务的整体架构又是怎样的?本节将带领大家一起来探讨这些问题。

技术选型

我们知道,现在是Spring Cloud和 Dubbo的天下。而技术框架越多,开发者越迷茫,不清楚到底该采用何种框架。下面就对Spring Cloud和 Dubbo进行比较,以便读者能够清晰地认识两种框架的特点,在实际项目中选择适合自身的框架。

Spring Cloud实现了微服务架构的方方面面,而Dubbo只实现了服务治理,它仅是其中的一个方面。下面通过表1-1对其进行比较。

SpringCloud微服务实战:带你走进微服务架构的世界_第3张图片

可以看出,Spring Cloud 比较全面,而 Dubbo由于只实现了服务治理,在集成其他模块时,需要单独引入,这无疑增加了学习成本和集成成本。虽然如此,但目前国内采用Dubbo的公司较多,原因如下:

  1. Dubbo是阿里巴巴出品的RPC服务治理框架,国内很多公司尤其是中小创业型公司的技术部负责人都曾就职于阿里巴巴,于是他们更习惯于使用Dubbo框架;
  2. Dubbo是国内的开源框架,技术文档由中文书写,学习门槛较低。

本文中,我们将选用Spring Cloud作为实战框架,以实战为导向,带领大家逐步搭建一套完整的微服务架构。

整体架构思路

图1-3给出了利用Spring Cloud搭建一套完整微服务解决方案的整体架构。

SpringCloud微服务实战:带你走进微服务架构的世界_第4张图片

通过图1-3,我们大概可以知道,所有的客户端请求都是通过服务网关来完成的,而服务网关通过注册中心才能找到具体的服务。因此,我们的服务在启动后都必须注册到注册中心。在实际中,为了保证微服务的高可用性,一个服务往往会启动多个端口,甚至部署到不同的服务器上,这样一来,即使某个端口宕机,也不会影响全局。当然,这就需要注册中心来管理这些服务。

在解决了应用的并发瓶颈后,数据库就成为了整个应用的瓶颈。因此,不同的微服务可能会连接不同的数据库,甚至每个服务对应的数据库都可能部署集群,服务间在保证低耦合的前提下也需要进行相互通信,它们通信的基础就是HTTP。

小结

本篇中,我们首先比较了单体架构和微服务架构的优劣,并分析了如何选择适合自己项目的架构方案。

其次,我们大致了解了微服务的基本概念,也了解到当今微服务的发展趋势和现状,进而对比了当前最流行的微服务框架。

最后,结合一张简单的微服务架构图,让读者对微服务架构有了清晰的认识,为后续搭建一套完整的微服务框架打下基础。

本文给大家讲解的内容是springcloud实战:带你走进微服务的世界

  1. 下篇文章给大家讲解的是springcloud实战:springboot的基础;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持!

你可能感兴趣的:(编程,程序员,Java,spring,cloud,微服务,架构)