今天给大家介绍一下微服务开发框架 SpringCloud。

概述

微服务架构是当前软件开发领域的技术热点。它在各种博客、社交媒体和会议演讲上的出镜率非常之高。大家以前可能或多或少听说过些许。然而微服务似乎又是非常虚幻的——我们找不到微服务的完整定义,以至于很多人认为这是一个概念的炒作。

单体应用

一般讲到微服务架构,都会提到单体应用。首先来说说单体应用:

一个归档包(比如 war 包)包含的所有功能的应用程序。在项目中我们通常将需求分为三个主要部分:数据库、服务端处理、前端展现。在业务发展初期,由于所有的业务逻辑在一个应用中,开发、测试、部署都还比较容易且方便。这种通常称为单体应用。这也就是现在称之为单体应用架构的方法论。

尽管该应用已经进行了模块化,但由于 UI 和若干业务模块最终都被打包在同一个 War 包中,改 war 包包含了整个系统所有的业务功能,这样的应用系统成为单体应用。 相信很多项目都是从单体应用开始的。单体应用比较容易部署、测试,在项目初期,单体应用可以很好地稳定运行。然而,一般项目都会随着需求而不断的变化以及增加,越来越多的人加入到项目的开发团队,代码库也在飞速地膨胀。慢慢地,单体应用变得越来越臃肿,可维护性、灵活性逐渐降低,维护成本越来越高。

因此,我们可以从中看出单体应用会面临的一些问题:

  • 复杂性高

在大型单体应用中一般会包含的模块非常多、模块的边界也非常模糊、依赖关系不清晰、代码质量参差不齐、混乱地堆砌在一起,这些将导致整个项目非常复杂。每次修改代码都心惊胆战,甚至添加一个简单的功能,或者修改一个 Bug 都会带来隐藏的缺陷。

  • 技术债务

随着时间推移、需求变更和人员更迭,会逐渐形成应用程序的技术债务,并且越积越多。

  • 部署频率低

随着代码的增多,构建和部署的时间成本也会上升。一般修复或者新增功能都可能需要重新部署整个应用。这种全量部署的方式耗时长、影响范围大、风险高,使得单体应用项目上线部署的频率较低。

  • 可靠性差

某个应用 Bug 可能会导致整个应用的崩溃。

  • 扩展能力受限

单体应用只能作为一个整体进行扩展,无法根据业务模块的需要进行伸缩。例如,应用中有的模块是计算密集型的,它需要强劲的 CPU;有的模块则是 IO 密集型的,需要更大的内存。由于这些模块部署在一起,不得不在硬件的选择上作出妥协。

  • 阻碍技术创新

单体应用往往使用统一的技术平台或方案解决所有的问题,团队中的每个成员都必须使用相同的开发语言和框架,要想引入新框架或新技术平台会非常困难。

下面着重介绍微服务架构:

微服务架构风格是一种将一个单体应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用 HTTP资源API)。这些服务围绕业务能力构建摒弃人可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。——引自Martin Fowler 的博客

最直观的区别如下:

那么从上面的描述中可以看到,微服务加否应具备以下特性:

  • 每个微服务可独立运行在自己的进程里,做到了进程隔离。
  • 一系列独立运行的微服务共同构建起整个系统。
  • 每个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如订单管理、用户管理等。
  • 微服务之间通过一些轻量级的通信机制进行通信,例如通过 RESTful API 进行调用。
  • 可以使用不同的语言与数据库存储技术。
  • 全自动的部署机制。

还是以之前的电商平台系统为例,使用微服务架构来架构该应用,如下图:

将整个应用拆分为多个服务,各个微服务独立运行在自己的进程中,并分别有自己的数据库,微服务之间使用 REST 或者其他协议通信。

当然,在软件领域,没有万能的解决方案。同样的,微服务也存在一定的不足:

  • 运维要求较高:

更多的服务意味着更多运维的投入。在单体应用架构中,只需要保证一个应用的正常运行。而在微服务当中,需要保证几十甚至几百个服务的正常运行与协作,这给运维带来了很大的挑战。

  • 分布式系统固然的复杂性:

使用微服务构建的是分布式系统。对于一个分布式系统,系统容错、网络延时、分布式事务等都会带来巨大的挑战。

  • 重复劳动:

很多服务可能都会使用相同的功能,而这个功能并没有达到分解为一个微服务的程度,这个时候,可能各个服务都会开发这一功能,从而导致代码重复。

如何实现微服务架构以及技术选型

通过上面的介绍,我们不仅知道了微服务架构的定义及其缺点,还总结了一些指导性的原则,为合理架构微服务提供了理论支持。

技术选型

开始进入真正的主角介绍,Spring Cloud开发框架。

Spring Cloud 是一个用于构建分布式系统的通用模块的工具集

Spring Cloud 特点

  • 约定优于配置
  • 适用于各种环境
  • 隐藏了组件的复杂性
  • 开箱即用
  • 轻量级的组件
  • 丰富的组件,比如:服务发现、断路器、微服务网关等,后面实验将会一一介绍。
  • 灵活,Spring Cloud 的组成是解耦的,开发人员可按需灵活挑选组合。

更多关于 Spring Cloud 的信息可以去官网查看:spring.io。
参考资料:https://www.lanqiao.cn/courses/1360
如果觉得对你有帮助的话就点个赞关注一下吧!

微服务开发框架 SpringCloud相关推荐

  1. 微服务与SpringCloud简介

    A.官网 https://spring.io/projects/spring-cloud B.简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用 ...

  2. 01 微服务和微服务框架 —— SpringCloud

    一.微服务介绍 1. 什么是微服务 在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微".什么是"服务", 微 狭义来讲就 ...

  3. springcloud 微服务鉴权_我对微服务、SpringCloud、k8s、Istio的一些杂想

    一.微服务与SOA "微服务"是一个名词,没有这个名词之前也有"微服务",一个朗朗上口的名词能让大家产生一个认知共识,这对推动一个事务的发展挺重要的,不然你叫微 ...

  4. java主流微服务框架_Spring Boot作为当下最流行的微服务开发框架,一名合格的Java开发者一定有所了解,...

    Spring Boot作为当下最流行的微服务开发框架,一名合格的Java开发者一定有所了解, Spring Boot相对于传统的SSM框架来说:springboot使用了特定的配置方式,开发人员不需要 ...

  5. Go语言微服务开发框架:Go chassis

    摘要:分布式系统中每个进程的动态配置管理及运行时热加载就成为了一个亟待解决的问题.go chassis汲取了netflix的archaius框架经验,并做出来自己的创新特性. 引言 https://g ...

  6. 【华为云技术分享】华为云ServiceStage-企业级微服务开发框架利器

    导语:近期,国外HashiCorp在官网宣布,不允许中国境内使用.部署和安装该企业旗下的企业版产品和软件,其中包括Consul.那么国内企业有没有类似的服务可以提供呢?答案是有!我们一起来看看华为云S ...

  7. ServiceComb微服务开发框架介绍

    [摘要] 本文根据2018-10-20北京OSCAR开源先锋日演讲内容整理.重点介绍了ServiceComb的项目开源背景.项目组成以及每个项目的核心设计.通过介绍ServiceComb的核心治理能力 ...

  8. Java架构师面试问些什么?微服务之springcloud面试题(共22题,含详细解答)

    [Java架构师面试网]收集整理了几乎整个架构师学习途中会遇到的面试题,希望大家都能早日圆自己的架构师梦~ 公众号:Java架构师面试网,关注回复"资料"即可领取精美整理的面试资料 ...

  9. 容器化技术与微服务结合---SpringCloud框架与阿里云serverless k8s的结合(六)

    目录 系列 写在前面 Serverless K8S 概念 创建集群 微服务搭建 项目地址 环境区分以及dockerFile注意 阿里云日志接入 创建阿里云日志project 配置 测试 Kuberne ...

最新文章

  1. ECS(Linux)连接RDS,使用命令行方式连接实例
  2. 稀疏矩阵之python实现
  3. 数据结构 排序和查找
  4. mysql网页后台_MySQL(PHP网站后台数据库)
  5. Doclava:来自Google的自定义Javadoc Doclet
  6. 【LeetCode - 33】搜索旋转排序数组(二分)
  7. python 爬虫 包_Python爬虫包BeautifulSoup实例(三)
  8. Atitit 常见概念与技术 dom及其解析 目录 1.1. Dom概念(文档对象模型(Document Object Model))是什么 1 1.1.1. 节点 2 1.1.2. Node 层次
  9. 智能手机串号IMEI码丢失(无效IMEI)解决恢复办法
  10. Python格式化输出总结
  11. linux下phylip软件构建NJ树,SNP数据构建系统进化树
  12. 手机计算机都无法上网,手机能上网但win7电脑不能上网怎么回事?
  13. matlab程序阻尼牛顿法,matlab阻尼牛顿法
  14. android 播放视频卡顿,android播放一个mp4文件的问题 卡顿非常严重
  15. 视频教程-JavaScript打飞机小游戏视频教程-JavaScript
  16. 【Java】7-5 实验室使用排期 (25分)(List排序)
  17. python 分类问题 画roc曲线实战
  18. 软件测试藏宝图中文版
  19. 判断对象是否可回收、垃圾回收算法
  20. NBA名人堂之-威尔特·张伯伦|乔治·迈肯|比尔·沃顿|戴夫·考恩斯|威利斯·里德

热门文章

  1. 分享2018年陆陆续续读过的书-附书单
  2. Codeforces 527C Glass Carving (最长连续0变形+线段树)
  3. linux消息队列的使用
  4. C# 得到本机局域网IP地址
  5. Flex 按钮添加图标
  6. Elasticsearch和HDFS 容错机制 备忘
  7. 在一周之内,快速看完整部教材,列出你不懂的5-10个问题。
  8. 20162302 《程序设计与数据结构》第一周学习总结
  9. 使用ImageMagick 在图片上绘制粗斜体的中文也许是一个错误。
  10. 异步调用代码嵌套问题