SpringCloud之微服务概述

SpringCloud之微服务和SpringCloud

一、微服务架构

随着互联网的快速发展,云计算近十年也得到蓬勃发展,企业的IT环境和I架构也逐渐在发生变革,从过去的单体应用架构发展为至今广泛流行的微服务架构。微服务是一种架构风格,能给软件应用开发带来很大的便利,但是微服务的实施和落地会面临很大的挑战,因此需要一套完整的微服务解决方案。因此SpringCloud应运而生。

1. 1 应用架构的发展

应用是可独立运行的程序代码,提供相对完善的业务功能。目前软件架构有三种架构类,分别是业务架构、应用架构、技术架构。它们之间的关系是业务架构决定应用架构,技术架构支撑应用架构。架构的发展历程是从单体架构、分布式架构、SOA架构再到微服务架构。如下图所示。

在这里插入图片描述

单体应用架构

单体架构在Java领域可以理解为一个Java Web应用程序,包含表现层、业务层、数据访 问层。从Controller到Service再到Dao层,“一杆子捅到底”,没有任何应用拆分,开发完毕 之后变成一个超级大型的War部署。简单的单体架构水平分层逻辑如图下图所示。

在这里插入图片描述

单体架构的优点:

  • 易于开发:开发人员使用当前开发工具在短时间内就可以开发出单体应用。
  • 易于测试:因为不需要依赖其他接口,测试可以节约很多时间。
  • 易于部署:你只需要将目录部署在运行环境中即可。

单体架构的缺点:

  • 灵活度不够:如果程序有任何修改,修改的不只是一个点,而是自上而下地去修改, 测试时必须等到整个程序部署完后才能看出效果。在开发过程可能需要等待其他开发 人员开发完成后才能完成部署,降低了团队的灵活性。
  • 降低系统的性能:原本可以直接访问数据库但是现在多了一层。即使只包含一个功能 点,也薄要在各个层写上代码。
  • 系统启动慢:一个进程包含了所有业务逻辑,涉及的启动模块过多,导致系统的启动 时间延长。
  • 系统扩展性比较差:增加新东西的时候不能针对单个点增加,要全局性地增加。牵一 发而动全身。

分布式架构

分布式架构什么是传统的分布式架构?简单来说,按照业务垂直切分,每个应用都是单体架构,通过 API 互相调用。见下图所示。

面向服务的SOA架构

面向服务的架构是一种软件体系结构,其应用程序的不同组件通过网络上的通信协议向其他组件提供服务或消费服务,所以也是一种分布式架构。简单来说, SOA 是不同业务建立不同的服务,服务之间的数据交互粗粒度可以通过服务接口分级,这样松散藕合提高服务的可重用,也让业务逻辑变得可组合,并且每个服务可以根据使用情况做出合理的分布式部署,从而让服务变得规范,高性能,高可用。

在这里插入图片描述

SOA架构中有两个主要角色:服务提供者( Provider)和服务消费者( Consumer)。阿里开源的 Dubbo是SOA的典型实现。

SOA架构的优点

  • 把模块拆分,使用接口通信,降低模块之间的耦合度。
  • 把项目拆分成若干个子项目,不同的团队负责不同的子项目。
  • 增加功能时只需要增加一个子项目,调用其他系统的接口即可。
  • 可以灵活地进行分布式部署

SOA架构的缺点:系统之间的交互需要使用远程通信,接口开发增加工作量。

1. 2 微服务架构

微服务架构在某种程度上是SOA架构继续发展的下一步。微服务的概念最早源于 Martin Fowler的一篇文《Microservices》。总体来说,微服务是一种架构风格,对于一个大型复杂的业务系统,它的业务功能可以拆分为多个相互独立的微服务,各个微服务之间是松耦合的通过各种远程协议进行同步/异步通信,各微服务均可以被独立部署、扩/缩容以及升/降级。这里对微服务技术选型做了对比,如下所示。

在这里插入图片描述

1. 3 微服务解决方案

现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性。同时支持微服务的技术栈也是多种多样的。下面介绍两种实现微服务的解决方案。

基于 Spring Cloud的微服务解决方案
Spring Cloud的技术选型是中立的,因此可以随需更换搭配使用,基于 Spring Cloud的微
服务落地解决方案可以分为三种.

在这里插入图片描述
基于 Dubbo实现微服务解决方案

2012年,阿里巴巴在 Github上开源了基于Java的分布式服务治理框架 Dubbo,但是Dubb未来的定位并不是要成为一个微服务的全面解决方案,而是专注于RPC领域,成为微服务生态体系中的一个重要组件。至于微服务化衍生出的服务治理需求, Dubbo正在积极适配开源解决方案,并且已经启动独立的开源项目予以支持,比如最近宣布的开源的 Nacos,加之今年6月springCloud Alibaba也正式毕业,所以我们又多了一种微服务的解决方案。

二、中间件

2.1 什么是中间件

中间件与操作系统、数据库并列为传统基础软件的三驾马车。其中,中间件也是难度极高的软件工程。传统中间件的概念,诞生于上一个“分布式”计算的年代,也就是小规模局域网中的服务器/客户端计算模式,在操作系统之上、应用软件之下的“中间层”软件。
随着互联网的快速发展,以及云计算的出现,企业的IT架构正在发生深刻的变革。在这个过程中,软件向大规模互联网云服务演化,无论是操作系统还是数据库都发生了深刻的化,中间件也在这个过程不断演进和扩大自己的边界。中间件向下屏蔽异构的硬件、软件网络等计算资源,向上提供应用开发、运行、维护等全生命周期的统一计算环境与管理,属于承上启下的中间连接层,对企业来说有着极其重要的价值。中间件本质上可以归属为技术架构,常见的中间件分别是服务治理中间件(例如: Dubbo等RPC框架)配置中心、全链路监控、分布式事务、分布式定时任务、消息中间件、API网关、分布式缓存、数据库中间件等。

2.2 Spring Cloud中的中间件

在这里插入图片描述

三、SpringCloud生态增强

3.1 SpringCloud分布式事务

微服务倡导将复杂的单体应用拆分为若干个功能简单合的服务,这样可以降低开发难度,增强扩展性,便于敏捷开发。当前微服务被越来越多的开发者推崇,很多互联网行业巨头、开源社区等都开始了徵服务的讨论和实践。很多中小型互联网公司,由于经验、技术实力等问题,想要让微服务落地还比较困难。如著名架构师 Chris richardson所言,目前存在的主要困难有如下几方面.

  • 单体应用拆分为分布式系统后,进程间的通信机制和故障处理措施变得更加复杂
  • 系统微服务化后,一个看似简单的功能,内部可能需要调用多个服务并操作多个数据库实现,服务调用的分布式事务问题变得非常突出
  • 微服务数量众多,其测试、部署、监控等都变得更加困难
  • 随着RPC框架的成熟,第一个问题已经逐渐得到解决。例如HSF、 Dubbo可以支持多
    种通信协议, Spring Cloud可以非常好地支持 RESTful调用

对于第三个问题,随着 Docker、 Devops技术的发展以及各公有云PAAS平台自动化运维工具的推出,微服务的测试、部署与运维变得越来越容易。而对于第二个问题,现在还没有个通用方案可以很好地解决微服务产生的事务问题。分布式事务问题已经成为微服务落地最大阻碍,也是最具挑战性的一个技术难题。我们后续会介绍 企业级的Spring Cloud与分布式事务的各种解决方案及分析。

3.2 SpringCloud和领域驱动

Spring Cloud组件很多,更像是一套中间件体系,是实现微服务架构的基础实施。 SpringCloud作为微服务架构的基础设施,能够快速帮助企业开发者搭建微服务架构。 Spring Cloud解决了框架层面的问题,但是对于业务怎么开发,业务架构怎么治理,架构怎么防腐,怎么解决应用架构的复杂性问题,还需要方法论去指导实践。所以在微服务架构落地的过程中Spring Cloud和领域驱动相辅相成显得十分重要。 Spring Cloud解决架构分布式等问题,领域驱动作为理和架构防腐的方法论,两者并驾齐驱,为企业I架构变革与微服务改造保驾护航。在本书的第25章将会详细介绍领域驱动Halo框架的设计。Halo框架无缝整合目前支持 Spring Cloud Finchley版本,后续也会通过案例的方式讲解如何运用prCloud和领域驱动来进行业务架构治理和代码防腐。

3.3 SpringCloud和gRpc

通过 Spring Cloud构建微服务应用,大多数开发者使用官方提供的服务调用组件 Feign来进行内部服务调用通信,这种声明式的HTTP客户端使用起来极为简单、优雅、方便。然而Feign的底层调用实现走的还是HTTP协议,相对于Dubbo、gRPC等RPC框架走RPC协议来说,通过HTTP来进行服务之间的调用,性能相对低下。那么我们是否可以通过SpringCloud集成其他RPC框架来实现服务之间的高性能调用,答案是肯定的。后续会以案例的方式为大家讲解如何在 Spring Cloud中集成 Google开源框架gRPC。

发布了158 篇原创文章 · 获赞 147 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/weixin_39723544/article/details/100417607