微服务与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版等。