本文是一个系列文章,主要讲述使用spring-cloud进行微服务开发的实战。在开始之前,我们先说一下从传统的单一部署架构到微服务的发展过程,以便让童鞋们更好的理解微服务的概念与演进过程。

1.单体架构
  在互联网时代早期,彼时还没有微服务的概念,企业开发应用,将所有功能都集中到一个应用中,典型的特征是tomcat + servlet + jsp + mysql,然后将应用打包成一个war包发布。
![file](https://img2018.cnblogs.com/blog/1924225/202001/1924225-20200117235922641-1737768961.jpg)

2.集群架构
  随着时间的推移,用户数量越来越多,访问量越来越大,单体架构已经无法满足需求,此时,企业使用多台服务器集群部署的方式,通过横向复制来解决该问题。
![file](https://img2018.cnblogs.com/blog/1924225/202001/1924225-20200117235922865-1915869226.jpg)

3.分布式应用(垂直架构)
  随着业务量继续增大,集群部署带来的性能提升越来越小,集群架构已经无法满足需求,此时分布式应用应运而生:将单个应用拆分为几个互不相关独立运行的应用,但是应用之间可能会有数据冗余。比如商品应用中有用户模块,订单应用中也有用户模块,他们的用户数据和用户应用中的用户数据是相同的,导致了应用间的数据冗余。
![file](https://img2018.cnblogs.com/blog/1924225/202001/1924225-20200117235923112-748620340.jpg)

4.微服务架构(SOA)
  为了解决上面的分布式应用中数据冗余的问题,SOA架构应运而生:面向服务架构。所谓面向服务:即从服务的角度来拆分应用,比如一个完整的电商,可能会拆分为用户服务、商品服务、订单服务、库存服务、物流服务等等,每个服务的业务划分边界清晰,和其他服务没有重合,也就不存在数据冗余的情况,服务与服务之间采用RPC或者HTTP方式进行通信。SOA可以认为是一种设计思想,而微服务是一种将该思想落地的一种方式,比如spring cloud。具体什么是微服务?业界没有统一的定义,一般认为微服务架构是一种将单体应用拆分为一组互相独立运行的应用的方法,应用之间一般通过轻量级通讯机制进行通信(一般是HTTP方式)。

5.为什么需要微服务?
要回答这个问题,首先要了解单体架构的应用有什么问题。

单体应用的问题:
1.复杂性高,模块与模块之间的边界划分模糊,修改代码困难,每一行代码都可能以一种你意想不到的方式被其他代码引用。
2.代码可读性、可维护性差。由于所有代码都耦合到一起,模块众多,代码量大,对代码的可读性和可维护性带来的极大的困难。
3.技术替换成本高,假如想换其他的实现方式,或者换一种语言来实现,只能全部重来,无法局部替换。
4.部署风险高,每个小改动都会导致整个应用的重新部署,部署后的线上缺陷以及回滚操作都不可控。

针对以上缺点,即可总结我们为什么需要微服务:
1.微服务架构中的每一个应用都是独立的应用,应用的边界清晰,功能职责单一,不会出现应用间的模块或者数据冗余。
2.由于每个应用的职责单一,因此代码量相对较小,代码的可读性以及可维护性都会很好。
3.技术替换成本低,比如我的订单服务可以使用JAVA应用,我的库存服务可以是Python应用,而我的物流服务可能是Nodejs应用,应用间不需要保持开发语言一致,可灵活选型。
4.部署风险低,某一个应用挂掉不会导致整个应用挂掉(当然要求服务提供方和消费方都做好服务降级和熔断),一个应用的部署也不会影响其他应用,并且这种方式能满足现代互联网快速迭代的需求。

当然,微服务也不是没有缺点:
1.首先微服务的调用链路长,因此针对这种很长的链路调用排查线上问题就变得尤为困难,此时,对微服务中的每个应用的监控就显得尤为重要。
2.微服务众多,服务间的调用关系--即服务治理成本较高。
3.微服务的技术成本更高(分布式缓存,分布式事务,分布式一致性等问题)。

了解了微服务的一些概念,就让我们一起开始微服务的实战吧!下一篇,敬请期待!
> 本文由博客一文多发平台 [OpenWrite](https://openwrite.cn?from=article_bottom) 发布!

Spring-cloud微服务实战【一】:微服务的概念与演进过程的更多相关文章

  1. Spring Cloud 微服务实战笔记

    Spring Cloud 微服务实战笔记 微服务知识 传统开发所有业务逻辑都在一个应用中, 开发,测试,部署随着需求增加会不断为单个项目增加不同业务模块:前端展现也不局限于html视图模板的形式,后端 ...

  2. Spring Cloud微服务实战阅读笔记(一) 基础知识

    本文系<Spring Cloud微服务实战>作者:翟永超,一书的阅读笔记. 一:基础知识   1:什么是微服务架构     是一种架构设计风格,主旨是将一个原本独立的系统拆分成多个小型服务 ...

  3. spring cloud微服务实战教程/pdf/视频/百度云资源

    资源站:http://www.supan.vip 点击进入直接查找资源: http://www.supan.vip/spring%20cloud微服务实战 <Spring Cloud微服务实战& ...

  4. Spring Cloud 微服务实战——nacos 服务注册中心搭建(附源码)

    作为微服务的基础功能之一的注册中心担任重要的角色.微服务将单体的服务拆分成不同的模块下的服务,而不同的模块的服务如果进行通信调用呢?这就需要服务注册与发现.本文将使用阿里开源项目 nacos 搭建服务 ...

  5. Spring cloud微服务实战——基于OAUTH2.0统一认证授权的微服务基础架构

    https://blog.csdn.net/w1054993544/article/details/78932614

  6. 基于Spring Cloud和Netflix OSS构建微服务,Part 2

    在上一篇文章中,我们已使用Spring Cloud和Netflix OSS中的核心组件,如Eureka.Ribbon和Zuul,部分实现了操作模型(operations model),允许单独部署的微 ...

  7. 今天介绍一下自己的开源项目,一款以spring cloud alibaba为核心的微服务架构项目,为给企业与个人提供一个零开发基础的微服务架构。

    LaoCat-Spring-Cloud-Scaffold 一款以spring cloud alibab 为核心的微服务框架,主要目标为了提升自己的相关技术,也为了给企业与个人提供一个零开发基础的微服务 ...

  8. 基于Spring Cloud和Netflix OSS 构建微服务-Part 1

    前一篇文章<微服务操作模型>中,我们定义了微服务使用的操作模型.这篇文章中,我们将开始使用Spring Cloud和Netflix OSS实现这一模型,包含核心部分:服务发现(Servic ...

  9. SpringCloud(10)使用Spring Cloud OAuth2和JWT保护微服务

    采用Spring Security AOuth2 和 JWT 的方式,避免每次请求都需要远程调度 Uaa 服务.采用Spring Security OAuth2 和 JWT 的方式,Uaa 服务只验证 ...

随机推荐

  1. CSS滤镜 :灰色 ,方便站点哀悼

    html {  -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); ...

  2. element-ui隐藏组件el-scrollbar

    代码如下: <div class="main_wrapper"> <el-scrollbar wrapClass="scrollar_container ...

  3. H3CSTP、RSTP的问题

  4. Shave Beaver! CodeForces - 331B2 (线段树)

    题面 The Smart Beaver has recently designed and built an innovative nanotechnologic all-purpose beaver ...

  5. 关于react打包之后静态资源加载错误的问题

    之前在打包react项目时发现一些问题,打包出来后我的一部分png图标加载不出来,开发者模式发现他们的路径中莫名其妙混入了我在react-router路由中使用<Browserrouter> ...

  6. 【转载】VS Code 中的代码自动补全和自动导入包

    原文连接:https://maiyang.me/post/2018-09-14-tips-vscode/ VSCode 必须安装以下插件: 首先你必须安装 Golang 插件,然后再给 Go 安装工具 ...

  7. 前端——css属性方法

    目录 标签快捷写法 宽和高 字体 1.文字字体 2.字体大小 3.字体粗细 4.字体颜色 5.字体对齐 6.文字下划线控制 7.文字首行缩进 8.字体英文换大写 背景属性 1.背景颜色 2.背景图片 ...

  8. Visio图表应用

    两种方式创建 插入图表之后通过设计面板的更改图表类型进行更改 双击图表进入编辑状态. 组合其中组合图的利用 下面是图表编辑操作: 双击进入图表之后下方会有“Chart1”跟“Sheet1”两个板块 而 ...

  9. C#反射与特性(一):反射基础

    目录 C#反射与特性(一):反射基础 1. 说明 1.1 关于反射.特性 2. 程序集操作 2.1 获取 程序集对象(Assembly) 2.2 Assembly 使用 2.3 获取程序集的方式 C# ...

  10. Java 8 访问接口的默认方法

    Java 8 API提供了很多全新的函数式接口来让工作更加方便,有一些接口是来自Google Guava库里的,即便你对这些很熟悉了,还是有必要看看这些是如何扩展到lambda上使用的. 一.Opti ...