共计 2995 个字符,预计需要花费 8 分钟才能阅读完成。
微服务与 Spring Cloud
随着互联网的快速发展,云计算近十年也得到蓬勃发展,企业的 IT 环境和 IT 架构也逐渐在发生变革,从过去的单体应用架构发展为至今广泛流行的微服务架构。微服务是一种架构风格,能给软件应用开发带来很大的便利,但是微服务的实施和落地会面临很大的挑战,因此需要一套完整的微服务解决方案。在 Java 领域,Spring 框架的出现给 Java 企业级软件开发带来 了福音,提高了开发效率。在 2014 年底,Spring 团队推出 Spring Cloud, 目标使其成为 Java 领域微服务架构落地的标准,发展至今,Spring Cloud 已经成为 Java 领域落地微服务架构的完整解决方案,为企业 IT 架构变革保驾护航。
微服务架构概述
1. 应用架构的发展
应用是可独立运行的程序代码,提供相对完善的业务功能。目前软件架构有三种架构类型,分别是业务架构、应用架构、技术架构。它们之间的关系是业务架构决定应用架构,技术架构支撑应用架构。架构的发展历程是从单体架构、分布式架构、SOA 架构再到微服务架构。
1.1 单体架构
单体架构在 Java 领域可以理解为一个 Java Web 应用程序,包含表现层、业务层、数据访问层,从 controller 到 service 再到 dao,就像一条单行道,从头一路走到底,没有任何业务的拆分,开发完毕之后就是一个超级大型的 War 包部署。简单的单体架构示例图如下:
这种开发方式对于大型应用来说非常复杂,也有“单体地狱”的称号。
我们来说说单体架构的优缺点:
单体架构的优点:
- 易于开发:开发人员使用当前开发工具在短时间内就可以开发出单体应用。
- 易于测试:因为不需要依赖其他接口,测试可以节约很多时间。
- 易于部署:你只需要将目录部署在运行环境中即可。
单体架构的缺点:
- 灵活度不够:如果程序有任何修改,修改的不只是一个点,而是自上而下地去修改,测试时必须等到整个程序部署完后才能看出效果。在开发过程可能需要等待其他开发 人员开发完成后才能完成部署,降低了团队的灵活性。
- 降低系统的性能:原本可以直接访问数据库但是现在多了一层。即使只包含一个功能点,也需要在各个层写上代码。
- 系统启动慢:一个进程包含了所有业务逻辑,涉及的启动模块过多,导致系统的启动 时间延长。
- 系统扩展性比较差:增加新东西的时候不能针对单个点增加,要全局性地增加。牵一 发而动全身。
1.2 分布式架构
分布式架构就是在传统的单体架构的基础上,按照业务垂直切分,每个应用都是单体架构,通过 API 相互调用。
分布式架构的优缺点:
优点:
- 依赖解耦
- 理解清晰
缺点:
- 进程间调用的可靠性低
- 实现技术复杂
1.3 SOA 架构
SOA(Service-Oriented Architecture)是指面向服务的架构,面向服务的架构是一种软件体系结构,其应用程序的不同组件通过网络上的通信协议向其他组件提供服务或消费服务,所以也是一种分布式架构。简单来说,SOA 是不同业务建立不同 的服务,服务之间的数据交互粗粒度可以通过服务接口分级,这样松散耦合提高服务的可重用性,也让业务逻辑变得可组合,并且每个服务可以根据使用情况做出合理的分布式部署,从而让服务变得规范,高性能,高可用。
SOA 架构中有两个主要角色:服务提供者 (Provider) 和服务消费者 (Consumer)。阿里开源的 Dubbo 是 SOA 的典型实现。
SOA 架构的优缺点:
优点:
- 把模块拆分,使用接口通信,降低模块之间的耦合度
- 把项目拆分成若干子项目,不同团队负责不同的子项目
- 增加功能时只需要增加一个子项目,调用其他系统的接口即可
- 可灵活地进行分布式部署
缺点:
- 系统之间交互需要远程通信
- 接口开发增加工作量
1.4 微服务架构
微服务架构在某种程度上是 SOA 架构继续发展的下一步,微服务的概念最早源千 Martin Flower 的《Microservice》。总体来讲,微服务是一种架构风格,对于一个大型复杂的业务系统,它的业务功能可以拆分为多个相互独立的微服务,各个服务之间是松耦合的,通过各种远程协议进行同步 / 异步通信,各微服务均可被独立部署、扩 / 缩容以及服务升 / 降级。
2. 微服务解决方案
现今微服务架构十分火爆,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性。支持微服务的技术栈也是多种多样。这里主要介绍两种实现微服务的解决方案:
2.1 基于 Spring Cloud 的微服务解决方案
基于 Spring Cloud 的微服务解决方案也有人称为“Spring 系微服务”,Spring Cloud 的技术选型是中立的,Spring Cloud 框架提供微服务落地方案主要有以下三种:
2.2 基于 Dubbo 实现微服务解决方案
基于阿里开源中间件 Dubbo 构建微服务解决方案有人也称为“阿里系微服务”,但是 Dubbo 未来的定位并不是要成为一个微服务的全面解决方案,而是专注于 RPC 领域,成为微服务生态体系中的一个重要组件。至于微服务衍化出的服务治理需求,Dubbo 正在积极适配开源解决方案,并且已经启动独立的开源项目予以支持,例如 Nacos 等。Nacos 的定位是一个更易于帮助构建原生云应用的动态服务发现、配置和服务管理平台。因此,基于 Dubbo 的微服务解决方案是:Dubbo + Nacos + 其他组件。
Spring Cloud 概述
中间件概述
中间件与操作系统、数据库并列为传统基础软件的三驾马车。其中,中间件也是难度极高的软件工程。传统中间件的概念,诞生于上一个“分布式”计算的年代,也就是小规模局域网中的服务器/客户端计算模式,在操作系统之上、应用软件之下的 "中间层“软件。
随着互联网的快速发展,以及云计算的出现,企业的 IT 架构正在发生深刻的变革。在这个过程中,软件向大规模互联网云服务演化,无论是操作系统还是数据库都发生了深刻的变化,中间件也在这个过程不断演进和扩大自己的边界。中间件向下屏蔽异构的硬件、软件、网络等计算资源,向上提供应用开发、运行、维护等全生命周期的统一计算环境与管理,属千承上启下的中间连接层,对企业来说有着极其重要的价值。中间件本质上可以归属为技术架构,常见的中间件分别是服务治理中间件(例如:Dubbo 等 RP C 框架)、配置中心、全链路监控、分布式事务、分布式定时任务、消息中间件、API 网关、分布式缓存、数据库中间 件等。
Spring Cloud 是什么?
Spring Cloud 也是一个中间件。它目前由 Spring 官方开发维护,基于 Spring Boot 开发,提供一套完整的微服务解决方案。包括服务注册与发现、配置中心、全链路监控、API 网关、熔断器等选型中立的开源组件,可以随需扩展和替换组装。Spring Cloud 项目自从推出以来,到目前为止一直在高速迭代。Spring Cloud 技术团队于 2018 年 6 月 19 日发布了 Spring Cloud 的重大里程碑 Finchley 版本。
Spring Cloud 项目模块
Spring Cloud 是一个开源项目集合,包括很多子项目。具体项目可以在 GitHub 上查看. 因为 Spring Cloud 的子项目居多,每个子项目有自己的版本号,为了对 Spring Cloud 整体进行版本编号,确定一个可用千生产上的版本标识。这些版本采用伦敦地铁站的名字,按名称首字母排序,比如 Dalston 版,Edgware 版,Finchley。但是我们一般都会简称为 D 版、E 版、F 版等。
以下是 Spring Cloud 部分组件列表:
个人微信公众号,欢迎一起讨论: