微服务理念与Spring Cloud入门-----父工程与API子工程的创建教程
前言
随着软件工程的规模的迅速扩大,对响应的速度的要求的越来越高,软件的开发过程面临越来越大的挑战。为了提高开发的效率,和质量,以及对成本的压缩,对软件的模块化,以及希望像硬件模块一样,能即插即用,成为了迫切的需求。软件架构上的服务化是即它的体现,因为服务的粒度比较大,难以复用,在这种背景下,微服务的架构,应运而生。
微服务以进程的边界进行隔离,微服务与微服务之间的关系是契约的方式规定了它们之间的权利与责任,这样可以实现对微服务的开发的分工与合作。即不同的开发团队开发各自微服务,再进行相应的系统集成,从而完成了由对小模块的组装来生产出大系统的任务。
那么我们下面来了解什么是微服务,以及spring家族为了解决微服务提供的解决方案Spring Cloud。
一、什么是微服务?
微服务是由Martin Fowler(马丁福勒)提出的,Martin Fowler对在他的论文中提到对微服务的解释:通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务也可以使用不同的数据存储。对于Martin Fowler的论文有兴趣的学者可以点击https://martinfowler.com/articles/microservices.html进行浏览。
二、微服务发展历程各个阶段的特性
2.1 单体架构
特点:
① 所有功能集中在一个项目中。
② 所有功能都要打成war包部署到服务器。
③ 通过集群(session共享集群)来提高服务器的性能。
优点:
① 项目架构简单,前期开发的成本低,周期短,小型企业首先。
缺点:
① 全部的功能都集中在一个项目中完成,对于大型项目来说,开发难度高,不容易开发及扩展和维护。
2.2 垂直结构
特点:
① 以单体架构为单位进行系统的划分,划分成一个个系统。
② 项目与项目之间存在数据冗余,耦合度高。
③ 项目是以接口调用为主,存在数据同步问题。
优点:
① 项目架构简单,前期开发的成本低,周期短,小型企业首选。
② 垂直架构进行mvc分层设计,针对分层做相应的处理做到集群(10~1000)。
③ 不同的项目采用不同的技术实现。
缺点:
① 全部的功能都集中在一个项目中完成,对于大型项目来说,开发难度高,不容易开发及扩展和维护。
② 集群扩展有瓶颈集群(10~1000)针对分层做了优化。
2.3 soa面向服务架构
特点:
① 基于soa服务思想进行功能的抽取(重复代码问题解决),以服务为中心来管理项目。
② 各个系统之间要进行调用,所以出现ESB来管理项目(可以使用各种技术实现:webservice,rpc等)。
③ ESB是作为系统与系统之间桥梁,很难进行统一管理。
优点:
① 重复代码进行了抽取,提高了开发效率,提高了系统的可维护性。
② 可以针对某个系统进行扩展,做集群更容易。
③ 采用ESB来管理服务组件,有利于降低企业开发项目难度 。
缺点:
① 系统与服务的界限模糊的,不利于设计。
② ESB是作为系统与系统之间桥梁,没有统一标准,种类很多,不利于维护,抽取项目的粒度大,系统与服务之间解耦问题。
2.4 微服务架构
特点:
① 把系统的服务层完全独立出来,有利于资源的重复利用,提高开发效率。
② 微服务遵守单一原则。
③ 微服务与微服务之间的调用使用restful轻量级调用。
优点:
① 微服务拆分更细,有利于资源的重复利用,提高开发效率。
② 可以更加精准针对某个服务做方案。
③ 微服务去中心化,使用restful轻量级通信协议比使用ESB企业服务总线更容易维护。
④ 适应市场更容易,产品迭代周期更短。
缺点:
① 微服务量多,服务治理成本高,不利于系统维护.分布式系统架构且是微服务架构,技术成本高(容错,分布式事务等),对团队高挑战。
三、Spring Cloud入门
3.1 Spring Cloud和Spring Boot的区别
Spring boot专注于快速方便的单个个体微服务,可以独立于Spring cloud开发项目。
Spring cloud关注全局的微服务协调整理治理框架,它将Spring boot开发的一个个单体微服务整合并管理起来为各个微服务之间提供配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等集成服务(全局服务治理框架)。
3.2 Spring Cloud和Dubbo的区别
服务注册中心 | Zookeeper | SpringCloud Netflix Eureka |
---|---|---|
服务调用方式 | RPC远程过程调用 | REST API(RESTFUL风格,应用程序接口) |
服务监控 | Dubbo-monitor | Spring Boot Admin |
断路器 | 不完善 | Spring Cloud Netflix Hystrix |
服务网关 | 无 | Spring Cloud Netflix Zuul |
分布式配置 | 无 | Spring Cloud Config |
服务跟踪 | 无 | Spring Cloud Sleuth |
消息总线 | 无 | Spring Cloud Bus |
数据流 | 无 | Spring Cloud Stream |
批量任务 | 无 | Spring Cloud Task |
小结:Dubbo的定位始终是一款RPC框架,Spring Cloud的目标是微服务框架下的一栈式解决方案,Dubbo可以类比到Netflix OSS技术栈,而Spring Cloud继承了Netflix OSS作为分布式服务治理解决方案,Dubbo、Spring Cloud只能二选一。
参考书地址:https://springcloud.cc/spring-cloud-netlix.html
开发API说明英文文档:http://cloud.spring.io/spring-cloud-static/Dalston.SR1/
开发API说明中文文档:https://springcloud.cc/spring-cloud-dalston.html
问题解决:http://springcloud.cn https://springcloud.cc
四、项目启动
4.1 环境以及软件(可选)
1、window10操作系统
2、JDK8
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
3、eclipse2019(J2EE版)https://www.eclipse.org/downloads/
4、MySQL-5.7
4.2 创建父工程
首先,我们选择Maven Project并创建Maven工程作为我们的父工程,点击Maven Project 进入创建,在创建Maven Project的过程中我们需要特别注意Packaging的类型,作为父工程我们需要选择Packaging类型为pom类型。
创建完Maven Project工程之后,我们需要在父工程配置pom.xml文件,在此我说一下父工程的作用:父工程只有一个pom.xml文件是值得我们注重的,它是子工程的依赖集成,子工程所需要的依赖可以配置在父工p程的pom.xml文件中,子工程具体操作会在后续说明。
pom.xml文件配置示例:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.atguigu.springcloud</groupId><artifactId>microservicecloud</artifactId><version>0.0.1-SNAPSHOT</version><packaging>pom</packaging><!---定义版本可变量<$.version>*</$.version>--><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><junit.version>4.12</junit.version><log4j.version>1.2.17</log4j.version><lombok.version>1.16.18</lombok.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Dalston.SR1</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>1.5.9.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.0.4</version></dependency><!---连接池--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.31</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.0</version></dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId><version>1.2.3</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit.version}</version><scope>test</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>${log4j.version}</version></dependency></dependencies></dependencyManagement><modules><module>microservicecloud-api</module><module>microservicecloud-provider-dept-8001</module></modules>
</project>
4.3 创建子工程—API公共工具模块
4.3.1 创建工程
PI公共工具模块,在这里充当一个持久化层和公共工具的集成。我们在这里放置常用的工具类和定义持久化类。
我们创建子工程时不再选择以往的Maven Project工程进行创建。我们要选择Maven Module进行创建,在创建时我们需要定义我们的子工程名字和选择父工程。具体创建步骤请看下图。
1、选择Maven Module工程
2、定义API公共工具模块的名称,选择父工程
完成上面步骤后点击next。
3、选择Packaging类型
完成上面步骤后点击finish完成创建。
4.3.2配置pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><!-- 子类里面显示声明才能有明确的继承表现,无意外就是父类的默认版本否则自己定义 --><groupId>com.atguigu.springcloud</groupId><artifactId>microservicecloud</artifactId><!--定要注意这里是要继承的父工程的名字 --><version>0.0.1-SNAPSHOT</version></parent><artifactId>microservicecloud-api</artifactId><!-- 当前Module我自己叫什么名字 --><dependencies><!-- 当前Module需要用到的jar包,按自己需求添加,如果父类已经包含了,可以不用写版本号 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>
</project>
这里说明一下,在子工程中我们所需要的jar还是要写在pom文件里面的。但是,如果我们子工程所需要的依赖在父工程中已经存在,那么子工程的pom的依赖不用写版本号。
4.3.3 创建持久化类
以创建Dept类为示例:
- 必须继承序列化接口Serializable
- 全参构造函数@AllArgsConstructor
- 空串构造函数@NoArgsConstructor
- setter和getter构造函数@Data
- 链式风格访问@Accessors(chain=true)
注意:Lombok插件需要安装,如已安装请忽略
@data注解是需要安装Lombok插件的,在安装Lombok插件之后@data注解才会生效。在这里我给出Lombok插件的安装教程。https://jingyan.baidu.com/article/22fe7cede363d83002617f3a.html
小结
写到这里我们基本上了解微服务和Spring Cloud的基本创建方法了。总体来说,微服务是把我们以前的一个Maven工程包含所有业务,拆分成一个父工程,多个子工程的多maven项目系统。我们可以把每一个子工程称之为子系统。每一个子工程只负责单一且专一的业务。每一个子工程独立运行。拥有明显的层次逻辑。这种开发方式下,如果在某一子工程出现问题并不会影响整一个系统的运行。所以一定程度上也是确保了系统的安全性。
此次文档是入门篇,我们会在后续的时间里继续对springcloud和微服务进一步的深入学习。
微服务理念与Spring Cloud入门-----父工程与API子工程的创建教程相关推荐
- 微服务为什么选Spring Cloud
转载自 微服务为什么选Spring Cloud 现如今微服务架构十分流行,而采用微服务构建系统也会带来更清晰的业务划分和可扩展性.同时,支持微服务的技术栈也是多种多样的,本系列文章主要介绍这些技术 ...
- 微服务架构与Spring Cloud Alibaba
微服务架构与Spring Cloud Spring Cloud 微服务架构 1 微服务架构概述 2 Spring Cloud 微服务简介 3 Spring Cloud 技术栈 4 总结 Spring ...
- openfeign调用服务是否需要网关_阿里新一代微服务解决方案:Spring Cloud Alibaba
1.Spring Cloud Alibaba 是什么 Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合. ...
- 微服务治理框架- - -Spring Cloud
前言:最近微服务很是火热,那么什么是微服务?相信小伙伴们对此也是一知半解,那么今天叶秋学长带领大家一起学习微服务治理框架Spring Cloud,快来跟着学长一起学习吧~~ 目录 对SpringCl ...
- 网关 跨域_好文推荐:微服务网关实战—Spring Cloud Gateway
作者:博云BoCloud| 前言 作为Netflix Zuul的替代者,Spring Cloud Gateway是一款非常实用的微服务网关,在Spring Cloud微服务架构体系中发挥非常大的作用. ...
- 微服务应用-基于Spring Cloud和Reactor构建网上商店微服务(下)
前言 上篇主要是讲解理论知识和项目架构要点,这篇将集中在微服务中使用spring Boot.Spring Cloud和Project Reactor实现事件溯源的原始主题.文章中也会介绍项目实现一些技 ...
- 微服务架构集大成者—Spring Cloud (转载)
软件是有生命的,你做出来的架构决定了这个软件它这一生是坎坷还是幸福. 本文不是讲解如何使用Spring Cloud的教程,而是探讨Spring Cloud是什么,以及它诞生的背景和意义. 1 背景 2 ...
- 基于CSE的微服务架构实践-Spring Cloud技术栈选型
[摘要] 本文介绍了CSE和Spring Cloud的关系,在技术选型上的差异.介绍了Spring Cloud用户使用Spring Cloud物理多租和进行CSE开发的两种策略. 当Spring Cl ...
- python微服务 企业管理_Python写的微服务如何融入Spring Cloud体系?
前言 在今天的文章中小码哥将会给大家分享一个目前工作中遇到的一个比较有趣的案例,就是如何将Python写的微服务融入到以Java技术栈为主的Spring Cloud微服务体系中?也许有朋友会有疑问,到 ...
最新文章
- 从代码设计到应用开发,入坑深度学习看这本书就够了
- java JDK 11.0.5的安装
- mysql数据库有几种连接方法_几种常见的数据库连接方法
- 分布式事务:两段式提交(最终一致性)
- android cpu绑核
- Linux学习之exit函数
- 表达式求值Spring.Expressions
- Linux kernel 同步机制(下篇)
- GCD简介三:Dispatch Sources
- 分享一套基于SpringBoot和Vue的企业级中后台开源项目,代码很规范!
- algorithm头文件下的reverse()
- 【汇编语言与计算机系统结构笔记13】简单的上机过程示例
- TensorFlow 实现深度神经网络 —— Denoising Autoencoder
- Linux环境下实现一个简单socket通信
- Android5.1蓝牙电话分析及demo
- 最近学习安卓中总结的一些知识点
- 信息安全数学基础(近世代数部分)
- 高响应比优先调度算法的模拟(非抢占式C++)
- 小程序 实现手写签名功能
- python输入名字、输出_Python输入输出