精华内容
下载资源
问答
  • 什么是单体应用?单体应用的优缺点? 什么是单体应用? 所谓的单体应用就是指一个war包包含了项目的所有功能。 单体应用的优点 不管是什么样的架构模式都会有其优点所在,单体应用的优点如下所示: 容易部署:这...

    什么是单体应用?单体应用的优缺点?

    什么是单体应用?

    • 所谓的单体应用就是指一个war包包含了项目的所有功能。

    单体应用的优点

    • 不管是什么样的架构模式都会有其优点所在,单体应用的优点如下所示:
      1. 容易部署:这个不容置疑,整个项目就一个war包,部署特别方便。
      2. 容易运行/测试:这个也上面也类似,我们在测试阶段只需要启动一个war包即可。
        但是相比优点缺点反而更加明显,下面讲述一下单体应用的缺点。

    单体应用的缺点

    1. 复杂性高:随着业务的不断迭代,项目的代码量会急剧的增多,项目模块也会随着而增加,模块与模块之间的关系就会变成的很复杂,整个项目就会变成的非常复杂,在新增和修改代码的时候都会做很多的测试,很容易会由于一处的变动影响之前业务的功能。
    2. 部署评率低:随便代码的增多,首先部署会越来越消耗时间,还有我们在修复一个很小很小的bug的时候整个项目都要重新部署,所以我们会集中一个时间点部署多个需求。
    3. 可靠性差:这个很容易理解,假如某个影响出现了死循环,导致内存溢出,会影响整个项目挂掉。
    4. 扩展性差:我们在新增业务的时候,代码层面会考虑在不影响现有的业务基础上编写代码,提高了代码的复杂性。
    展开全文
  • 1、:什么是单体应用锁? 单体应用锁指的是只能在 一个JVM 进程内有效的锁。我们把这种锁叫做单体应用锁 1、:单体应用锁的局限性 1、:谈到局限性,先要讲讲互联网系统架构的演进过程 在互联网系统发展之初,...

    1、:什么是单体应用锁?

    单体应用锁指的是只能在 一个JVM 进程内有效的锁。我们把这种锁叫做单体应用锁

    1、:谈到局限性,先要讲讲互联网系统架构的演进过程

    在互联网系统发展之初,系统比较简单,消耗资源小,用户访问量也比较少,我们只部署一个Tomcat应用就可以满足需求。系统架构图如下:

    一个 Tomcat 可以看作是一个JVM进程,当大量请求并发到系统时,所有的请求都落在这唯一的一个Tomcat上,如果某些请求方法是需要加锁的,比如:秒杀扣减库存,是可以满足需求的,但是随着访问量的增加,导致一个tomcat 难以支撑,这时我们必然就是集群部署Tomcat ,使用多个 Tomcat 共同支撑整个系统。系统架构图如下:

    上图中,我们部署了两个Tomcat ,共同支撑系统。当一个请求到达系统时,首先会经过Nginx ,Nginx 主要做负载转发,它会根据自己配置的负载均衡策略将请求转发到其中的一个Tomcat 中。当大量请求并发访问时候,两个 Tomcat 共同承担所有的访问量,这时,我们同样在秒杀扣库存的场景中,使用单体应用锁,还能够满足要求吗?

    2、:单体应用锁的局限性

    如上图所示,在整个系统架构中,存在两个Tomcat,每个Tomcat是一个JVM。在进行秒杀业务的时候,
    由于大家都在抢购秒杀商品,大量的请求同时到达系统,通过Nginx分发到两个Tomcat上。我们通过
    一个极端的案例场景,可以更好地理解单体应用锁的局限性。假如,秒杀商品的数量只有1个,这时,
    这些大量的请求中,只有一个请求可以成功的抢到这个商品,这就需要在扣减库存的方法上加锁,扣减
    库存的动作只能一个一个去执行,而不可以同时执行,如果同时执行,那这1件商品可能同时被多个人抢到,
    从而产生超卖现象。加锁以后,扣减库存的动作是一个一个去执行,凡事将库存扣减为负数的,都抛出异常,
    提示该用户没有抢到商品。通过加锁看似解决了秒杀的问题,但是事实真的是这样吗?

    我们看到系统中存在两个Tomcat,我们加的锁是JDK提供的锁,这种锁只能在 一个JVM 下起到作用,
    也就是在一个Tomcat内是没有问题的。当存在两个或两个以上的Tomcat时,大量的并发请求分散到不同的
    Tomcat上,在每一个Tomcat中都可以防止并发的产生,但是在多个Tomcat之间,每个Tomcat中获得锁的
    这个请求,又产生了并发,从而产生超卖现象。这也就是单体应用锁的局限性了,它只能在一个JVM内加锁,
    而不能从这个应用层面去加锁

    那么这个问题如何解决呢?这就需要使用分布式锁了,在整个应用层面去加锁。什么是分布式锁呢?我们怎么去使用分布式锁呢?

    2、:什么是分布式锁

    在说分布式锁之前,我们看一看单体应用锁的特点,单体应用锁是在一个JVM进程内有效,无法跨JVM、跨进程。那么分布式锁的定义就出来了,分布式锁就可以跨越多个JVM、跨多个进程的锁,这种锁就叫做分布式锁

    1:分布式锁的设计思路

    在上图中,由于Tomcat是由Java启动的,所以每个Tomcat可以看成一个JVM,JVM内部的锁是无法跨越多个进程的。所以,我们要实现分布式锁,我们只能在这些JVM之外去寻找,通过其他的组件来实现分布式锁。系统的架构如图所示:

     

    两个Tomcat通过第三方的组件实现跨JVM、跨进程的分布式锁。这就是分布式锁的解决思路。找到所有JVM可以共同访问的第三方组件,通过第三方组件实现分布式锁。

    3、:目前比较流行的分布式锁解决方案

    分布式锁都是通过第三方组件来实现的,目前比较流行的分布式锁的解决方案有:

    1. 数据库,通过数据库可以实现分布式锁,但是在高并发的情况下对数据库压力较大,所以很少使用。
    2. Redis,借助Redis也可以实现分布式锁,而且Redis的Java客户端种类很多,使用的方法也不尽相同。
    3. Zookeeper,Zookeeper也可以实现分布式锁,同样Zookeeper也存在多个Java客户端,使用的方法也不相同。
    展开全文
  • 什么是单体应用?简单的说就是不管啥功能都往一个应用里写,比如电商系统。用户功能、商品功能、订单功能等等,都往一个应用里写。 好处: 本地开发调试方便,直接起一个项目,调试也是在一个进程内,没有冗长跨...

    前言

    最近看了一篇文章 千万并发,阿里淘宝的 14 次架构演进之路.

    反思为什么要用微服务架构,他们到底有什么区别?凡事都要权衡他的利与弊

    下面我们来说说他们的区别

    单体服务

    什么是单体应用?简单的说就是不管啥功能都往一个应用里写,比如电商系统。用户功能、商品功能、订单功能等等,都往一个应用里写。

    好处

    1. 本地开发调试方便,直接起一个项目,调试也是在一个进程内,没有冗长跨进程的调用链,出错可快速定位。
    2. 本地的函数调用,没有网络调用的开销。
    3. 简单粗暴,快速交付
    4. 日志以及调用链路都在一起
    5. 对比微服务事物机制简单

    坏处

    1. 系统耦合性高,导致开发效率低下。你不能保证你修改的功能模块不会影响到其他功能
    2. 语言单一,不能根据场景选择更加合适的语言
    3. 系统的整体可靠性不高,存在单点故障风险,一个挂了全部挂
    4. 系统不易于扩展部署,如增加手机APP或者公众号业务,单体应用支撑不了,需要NG负载均衡多个单体应用,代码重复性高,资源浪费

    微服务

    什么是微服务? 根据不同业务拆分出不同的服务,并且会整理出当前公共的功能变成一个公共服务,每个服务独立部署,独立运行,代码进行了物理隔离。数据库也会拆分出来每个服务维护自己的数据库,数据库之间的数据通过接口传递,而不再是直接访问

    好处

    1. 系统的耦合度降低,模块之间的边界清晰,都按业务物理隔离了
    2. 系统整体可靠性变高。
    3. 可根据服务横向扩展部署
    4. 技术选型丰富,不同的服务可以利用不同的技术或语言实现

    坏处

    1. 调用链路变长,调用增加了网络的开销,性能变差,出问题难跟踪
    2. 微服务架构整个应用分散成多个服务以及日志,对日志定位故障点非常困难
    3. 稳定性下降。服务数量变多导致其中一个服务出现故障的概率增大,并且一个服务故障可能导致整个系统挂掉。事实上,在大访问量的生产场景下,故障总是会出现的
    4. 随着服务的增多,人力成本增大
    5. 服务器硬件资源以及维护成本大大增加

    引出问题以及解决方案

    调用链路变长

    定位: 引入分布式链路追踪服务
    分析: 引入ELK来方便日志的查看

    服务治理,动态扩容

    引入注册中心和配置中心,以及网关

    防止网络之间服务调用不可靠

    限流措施、熔断措施、降级策略

    多服务事物一致性

    分布式事物解决方案

    展开全文
  • 什么是单体应用?什么是微服务?单体应用的优势和劣势,为什么要从单体应用过渡到微服务?本文能解答这些问题.....
    1. 单体应用架构存在的问题
      一个归档包(例如war格式)包含所有功能的应用程序,通常定义为单体应用,而架构单体应用的方法论,就是单体应用架构。
      单体应用的好处: 容易部署丶测试。
      单体应用的劣势: 代码臃肿丶可维护性差丶可靠性差丶灵活性逐渐降低丶维护成本越来越高。

    2. 如何解决单体应用架构存在的问题
      微服务能解决,那什么是微服务呢?

      目前来看微服务本身并没有一个严格的定义,每个人对微服务的理解都不同,网上的一种说法是"微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间采用轻量级通信机制(通常HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式管理,服务可用不同的语言开发,使用不同的数据存储技术。"

      微服务特征:
      1.每个微服务可以独立运行在自己的进程里
      2.一系列独立运行的微服务共同构建起整个系统
      3.每个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如订单管理,用户管理等...
      4.微服务之间通过一些轻量的通信机制来进行通信,例如通过RESTFUL API进行调用,
      5.可以使用不同的语言和数据存储技术
      6.全自动的部署机制             
       
    3. 微服务架构的优点和挑战
       相对单体应用架构来说,微服务架构有着明显的优点。
       但是,微服务并非是完美的,使用微服务也为我们的工作带来的一些挑战
    4. 微服务架构的优点
      优点:
      1.易于开发和维护:
           一个微服务只会关注一个特定的业务功能,所以业务清晰丶代码量较少,开发和维护单个微服务相对简单。而整个应用是由若干个微服务构建而成的,所以整个应用也会被维持在一个可控状态。

      2.单个微服务启动较快:
           单个微服务代码量较少,所以启动会比较快。

      3.局部修改容易部署:
           单体应用只要有修改,就得重新部署整个应用,微服务解决了这样的问题。一般来说,对某个微服务进行了修改,只需要重新部署这个服务即可。

      4.技术栈不受限:
            在微服务架构中,可以结合项目业务或者团队的特点,合理选择技术栈。例如某些服务需要使用关系型数据库Mysql,有些需要使用Nosql数据库。

      5.按需伸缩:
            可以根据需求,实现细粒度的扩展。例如,系统某个微服务遇到了瓶颈,可以结合这个微服务的业务特点,增加内存丶升级CPU或者增加节点。
    5. 微服务架构面临的挑战
      挑战:
      1.运维要求较高:
              更多的服务意味着更多的运维投入。在单体应用架构中,只需要保证一个应用的正常运行。而在微服务中,需要baozheng几十甚至几百个服务的正常运行与协作,这给运维带来了很大的挑战。

      2.分布式固有的复杂性:
              使用微服务架构的分布式系统,对于一个分布式系统,系统容错,丶网络延迟丶分布式事物等都会带来巨大的挑战。

      3.接口调整成本高:
              微服务之间通过接口来进行通信,如果修改某个微服务的API,可能所有使用了该接口的微服务都需要做调整。

      4.重复劳动:
              很多服务可能都会使用到相同的功能,而这些功能并没有达到分解为一个微服务的程序,这个时候,可能各个服务都会开发这一功能,从而导致代码重复。
    6. 微服务设计的原则
      原则:
      1.单一职责原则:
               单一原则指的是一个单元(类丶方法或者服务等)值应关注整个系统功能中单独丶有界限的一部分。

      2.服务自治原则:
               服务自治是指每个微服务应具有独立的业务能力丶依赖与运行环境。

      3.轻量级通信机制:
               微服务之间应该通过轻量级的同性机制进行交互。个人认为,轻量级的通信机制应该具备两点: 首先,它的体量较轻,其次它应该可以跨语言丶跨平台。REST协议就是一个典型的"轻量级通信机制"。

      4.微服务粒度:
                微服务的粒度是难点,也是常常争论的焦点。应当使用合理的粒度划分微服务,而不是一味的把服务做小。代码量的多少不能作为服务划分的依据,因为不同的微服务本身的业务复杂性不同,代码量也就不同。
    7. 如何实现微服务架构,技术选型
      相比单体应用的交付,微服务应用的交付要复杂很多,不仅仅需要开发框架的支持,还需要一些自动化的部署工具
      以下从开发和运行平台两个维度考虑技术选型:

      1.开发框架的选择: 可使用Spring cloud 作为微服务开发框架。首先,Spring cloud具备开箱即用的生成特性,可大大提升开发效率,再者,Spring cloud的文档丰富,社区活跃,遇到问题容易解决,更牛逼的是,Spring cloud为微服务架构提供了完整的解决方案。
      当然,也可以使用其他的开发框架或者解决方案来实现微服务,例如Dubbo等....

      2.运行平台: 微服务并不绑定运行平台,将微服务部署在PC Server或者阿里云,AWS等云计算平台都是可以的。
       
    8. 微服务&分布式的区别
      简单的说,微服务是架构设计方式,分布式是系统部署方式,两者概念不同

      分布式:
             将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。区别分布式的方式是根据不同机器不同业务。

      分布式和微服的架构很相似,只是部署的方式不一样而已。

      微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,它也可以是同一个服务器。

      微服务相比分布式服务来说,它的粒度更小,服务之间耦合度更低,由于每个微服务都由独立的小团队负责,因此它敏捷性更高,分布式服务最后都会向微服务架构演化,这是一种趋势, 不过服务微服务化后带来的挑战也是显而易见的,例如服务粒度小,数量大,后期运维将会很难
    9. 分布式&集群的区别
      集群是个物理形态,分布式是个工作方式。
      分布式:一个业务分拆多个子业务,部署在不同的服务器上

      区别:
      1.分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务
      2.分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
    展开全文
  • 单体应用架构和微服务架构的区别

    千次阅读 2020-02-01 15:49:39
    一、什么是单体应用架构? 以下是官方给出的解释: 一个归档包(可以是JAR、WAR、EAR或其他归档格式)包含所有功能代码的应用程序,通常称为单体应用。 而单体应用架构的方法论,就是单体应用架构。 简单粗暴理解...
  • 概览序号文内章节视频请参照如上章节导航进行阅读本文继续以 「Java单体应用 - 常用框架 - MyBatis」 章节所使用的案例项目 iot-cloud2 为基础进行讲解。首先,新建一个 iot-cloud3 的文件夹作为本课案例的项目目录...
  • 什么是单体架构

    千次阅读 2019-09-15 17:37:53
    什么是单体架构 在软件设计的时候经常提到和使用经典的3层模型,即表现层,业务逻辑层,数据访问层。虽然在软件设计中划分了3层模型,但是对业务场景没有划分,一个典型的单体架构就是将所有的业务场景的表现层,...
  • 1.1.1 什么是单体应用 项目所有的资源都在一个应用中,打包成一个war包,使用一个服务器去运行,运行再一个进程中。 1.1.2 单体应用的优点 成本较低 技术要求相比微服务架构相对较低 部署比较简单,由于是打包为一...
  • 相对的,要理解什么是微服务,那么可以先理解什么是单体应用,在没有提出微服务的概念的“远古”年代,一个软件应用,往往会将应用所有功能都开发和打包在一起。 单体应用的根本的缺点: 代码臃肿,应用启动时间长...
  • 单体应用优缺点分析

    2020-07-06 21:59:39
    很多时候我们在面试时,面试官一般会提到你现在使用的微服务架构,那你知道单体应用什么优点吗?为什么要从单体应用转成微服务?如题,我们先来分析单体应用的优缺点,后续文章会陆续介绍微服务和SOA架构等。 ...
  • 单体架构是什么

    2020-06-10 12:08:20
    单体架构是什么 **单体架构也称为单体系统或单体应用,就是一种把系统所有的功能,模块耦合在一个应用的架构方式。 单体应用特点 1.1打包成一个独立的单元(导成一个唯一的jar包或者war包) 1.2会一个进程的方式...
  • 若是就一台服务器也没什么问题,问题若是对服务做了负载均衡,就会出现问题,有可能你上传的文件在服务器A上,但是当你通过域名访问到服务器B上的时候,就会找不到相应的文件​。 ​ ​针对这种情况,前期考虑将...
  • 以下问题是笔者在实际开发中遇到的问题,这些问题也都是单体应用时不会考虑到,但是分布式应用的时候就必须要考虑这些问题,解决方案和原理后续会整理更新,也希望大家积极回复讨论问题,一起学习。 1、多节点部署...
  • 那么到底什么时候应该拆分单体应用?拆分单体应用有哪些标准可依呢? 为了解答这两个问题,今天我将通过具体案例来阐述,希望你能够学会单体应用拆分成微服务的正确姿势。 什么时候进行服务化拆分? 从我所经历过的...
  • 单体应用走向服务化

    2019-09-24 20:20:51
    单体应用同时进行开发的人数超过10人,这个时候基本就该考虑进行服务化拆分了 服务化拆分的两种姿势 纵向从业务维度进行拆分 横向从公共且独立功能维度拆分 服务拆分的前置条件 服务如何定义 服务如何发布和订阅...
  • 专栏上一期,我给你讲述了什么是微服务,以及微服务架构的由来。简单回顾一下,微服务就是将庞杂臃肿的单体应用拆分成细粒度的服务,独立部署,并交给各个中小团队来负责开发、测试、上线和运维整个生命周期。 那么...
  • 什么是单体架构 一个归档包(例如war格式)包含所有功能的应用程序,通常称为单体应用,而架构单体应用的方法论,就是单体应用架构 单体架构存在的问题 复杂性高:单体应用整个项目包含的模块非常多,模块的边界...
  • 前面学习了微服务架构的概念,今天主要对比一下微服务应用和单体应用的主要优缺点,在结合我目前在参与的实际项目,考虑当前的问题和瓶颈,为什么改造微服务,改造完微服务能带来什么样的改变和优化。 怎么界定...
  • 将一个单体应用程序分解成更小、更易于管理的部分有很多好处。然而,分解一个单体应用程序一个挑战,必须小心处理。因此,我们在此分享需要什么资源来现代化你的单体应用程序。 ...
  • 资源文件中有相关设置(文字内容,字号,字体,颜色,是否粗体,宽和高在字体系统内置时通常设置为0) 项目主入口(trident, spring mvc项目), 全部配置信息都在resources下的global.properties文件中,默认的项目地址为: ...
  • Java 单体应用笔记一

    2020-10-26 12:42:44
    Lombok是什么? Lombok 一种 Java 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其对于简单的 Java 对象(POJO)。它通过注释实现这一目的。通过在开发环境中实现 Lombok,开发人员可以节省构建诸如 ...
  • 本文讲的将Java EE单体应用打造成微服务【编者的话】如何将单体应用拆分成微服务相信很多人共同的疑问,本文作者就技术和组织结构等方面为我们提供了一个思路,一起来看看吧~紧接着上篇为什么微服务应该事件...
  • 特别说明 ...让 我们一起来学习下这家CTO是如何从单体应用架构过渡到微服务架构的,Kong又做了哪些事,K8S在其中又做了什么角色,什么是状态机(基于事件架构得到一种设计),在这个过程中又会遇...
  • 入门篇-02从单体应用走向服务化 01 | 什么时候进行服务化拆分? 1、经验 1)项目第一个阶段主要目标快速开发和验证想法,证明产品思路是否可行。 2)这个阶段功能设计一般不会太复杂,开发采取快速迭代的方式,...
  • 互联网技术发展迅速的今天,微服务倍受关注:文章、博客、社交媒体讨论和会议...单体应用 我们先不问微服务是什么?微服务该如何实现?让我们从我们原本最熟悉的创建一个应用和一个普通的项目开始说起。 打车系统 我
  • 什么是应用架构

    2020-11-18 20:12:44
    应用架构 由于互联网的发展,带动着并发的激增,我们的应用架构也随之进行了升级,这里主要讲几个主要架构类型 1.单体架构 什么是单体架构 单体架构优缺点
  • 一.AOP 1.aop:中文名称 面向切面编程 2.英文名称:(Aspect Oriented Programming) 3.正常程序执行流程都是纵向执行流程 3.1 又叫面向切面编程,在...4.什么是面向切面编程 在程序原有的纵向执行流程中 针对某一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,682
精华内容 672
关键字:

什么是单体应用