JAVA应用】什么是分布式架构

2021-04-23 10:53发布

什么是分布式架构,这样的架构模式和传统的那些架构模式相比较有什么优势

什么是分布式架构,这样的架构模式和传统的那些架构模式相比较有什么优势

15条回答
aijingda
1楼 · 2021-04-23 11:34.采纳回答

现在的架构很多,各种各样的,如高并发架构、异地多活架构、容器化架构、微服务架构、高可用架构、弹性化架构等,还有和这些架构相关的管理型的技术方法,如 DevOps、应用监控、自动化运维、SOA 服务治理、去 IOE 等等,还有很多。

分布式架构其实就是分布式系统,那什么是分布式系统?分布式系统是支持分布式处理的软件系统,是由通信网络互联的多处理机体系结构上执行任务的系统。包括分布式操作系统、分布式程序设计语言及其编译系统、分布式文件系统分布式数据库系统等,当然这些也是分布式的关键技术。

使用分布式系统主要有:

1.增大系统容量。我们的业务量越来越大,而要能应对越来越大的业务量,一台机器的性能已经无法满足了,我们需要多台机器才能应对大规模的应用场景。所以,我们需要垂直或是水平拆分业务系统,让其变成一个分布式的架构。

2.加强系统可用。我们的业务越来越关键,需要提高整个系统架构的可用性,这就意味着架构中不能存在单点故障。这样,整个系统不会因为一台机器出故障而导致整体不可用。所以,需要通过分布式架构来冗余系统以消除单点故障,从而提高系统的可用性。

3.因为模块化,所以系统模块重用度更高

4.因为软件服务模块被拆分,开发和发布速度可以并行而变得更快

5.系统扩展性更高

6.团队协作流程也会得到改善

分布式系统的类型有三种:

1.分布式处理,但只有一个总数据库,没有局部数据库

2.分层式处理,每一层都有自己的数据库

3.充分分散的分布式网络,没有中央控制部分,各节点之间的联系方式又可以有多种,如松散的联接,紧密的联接,动态的联接,广播通知式的联接等

然后来对比一下单体应用和分布式架构的优缺点:

1.从上面的表格可以看到,分布式系统虽然有一些优势,但也存在一些问题

2.架构设计变得复杂(尤其是其中的分布式事务)

3.部署单个服务会比较快,但是如果一次部署需要多个服务,部署会变得复杂

4.系统的吞吐量会变大,但是响应时间会变长

5.运维复杂度会因为服务变多而变得很复杂

6.架构复杂导致学习曲线变大

7.测试和查错的复杂度增大

8.技术可以很多样,这会带来维护和运维的复杂度

9.管理分布式系统中的服务和调度变得困难和复杂

所以总结一下,分布式系统架构的难点在于系统设计,以及管理和运维。所以分布式系统架构在解决了一些问题的同时,也增加了其他的问题,这就需要不断的再用各种各样的技术跟手段去解决这些新增的问题。后续会跟上分布式系统架构的搭建以及使用。

三岁奶猫
2楼 · 2021-04-23 13:17

分布式架构是 分布式计算技术的应用和工具,目前成熟的技术包括J2EE, CORBA和.NET(DCOM),这些技术牵扯的内容非常广,相关的书籍也非常多,本文不介绍这些技术的内容,也没有涉及这些技术的细节,只是从各种分布式系统平台产生的背景和在软件开发中应用的情况来探讨它们的主要异同。

小橘子
3楼 · 2021-04-23 14:07

分布式概念

要想理解什么是分布式,我们一定要知道以下这些性质:

1)、首先,一个分布式系统它一定是由多个节点组成的系统。

2)、其次,一般它的节点都是指计算机服务器,并且这些节点通常不会孤立,它们是互通的。

3)、最后,它的连通的节点上都会部署我们的节点,且相互之间操作是协同的。

分布式特点:

1)、系统容量增加:随着互联网所需业务量越发庞大,如想应对越发庞大的业务量,只是一台机器的性能已经远远无法满足了,我们必须要使用多台服务器才能应对大规模的应用场景。因此,我们就需要垂直或是水平拆分整个业务系统,让其变成一个分布式的架构来应对各种庞大业务场景。

2)、增强系统可用性。

因为业务增大,导致我们出一个小错误就可能需要不知多少时间才能挽回,所以就需要提高整个系统架构的可用性,这就意味着架构中不能存在单点故障。这样,整个系统才不会因为一台机器出故障而导致整体不可用。分布式架构就能够冗余系统以消除单点故障,从而提高系统可用性。

3)、分布式系统是模块化的,因此,系统模块重用度会更高。

4)、分布式系统软件服务模块是被拆分的,所以它的开发和发布速度可以并行且变得更加快速。

5)、分布式系统扩展性更高

分布式系统类型:

1)、分布式处理,但只有一个总数据库,没有局部数据库。

2)、分层式处理,每一层都有自己的数据库。

3)、充分分散的分布式网络,没有中央控制部分,各节点之间的联系方式又可以有多种,如松散的联接,紧密的联接,动态的联接,广播通知式的联接等。

二、分布式架构的优缺点是什么?

优点:

1)、会把模块拆分,使用接口通信,从而降低模块之间的耦合度。

2)、会把项目拆分成若干个子项目,不同的团队负责不同的子项目。

3)、增加功能灵活,只需要增加一个子项目,调用其他系统的接口就可以。

4)、能够灵活的进行分布式部署.

5)、代码复用性提升极大。


杨晓春
4楼 · 2021-04-25 10:56

分布式应用程序就是指应用程序分布在不同计算机上,通过网络来共同完成一项任务,通常为服务器/客户端模式。更广义上理解“分布”,不只是应用程序,还包括数据库等,分布在不同计算机,完成同一个任务。之所以要把一个应用程序分布在不同的计算机上,主要有两个目的:
1) 分散服务器的压力
大型系统中,模块众多,并发量大,仅用一个服务器承载往往会发生压力过大而导致系统瘫痪的情况。可以在横向和纵向两方面来进行拆分,把这些模块部署到不同的服务器上。这样整个系统的压力就分布到了不同的服务器上。
l 横向:按功能划分。
l 纵向:N层架构,其中的一些层分布到不同的服务器上(分层的概念会在后文进行介绍)。
2) 提供服务,功能重用
使用服务进行功能重用比使用组件进行代码重用更进一层。举例来说,如果在一个系统中的三个模块都需要用到报表功能,一种方法是把报表功能做成一个单独的组件,然后让三个模块都引用这个组件,计算操作由三个模块各自进行;另一种方法是把报表功能做成单独的服务,让这三个模块直接使用这个服务来获取数据,所有的计算操作都在一处进行,很明显后者的方案会比前者好得多。
服务不仅能对内提供还能对外提供,如果其他合作伙伴需要使用我们的报表服务,我们又不想直接把所有的信息都公开给它们。在这种情况下组件方式就不是很合理了,通过公开服务并对服务的使用方做授权和验证,那么我们既能保证合作伙伴能得到他们需要的数据,又能保证核心的数据不公开。

我是大脸猫
5楼 · 2021-04-25 11:39

分布式架构:

  在上面我们看了单机项目的架构以及Maven架构的项目(注:并没有这种说法,只是自己理解),它们都在存在一些优点的同时也存在一些缺点,而为了满足我们越来越复杂的业务和臃肿的项目,java开发者们提出了另一种架构《分布式》,分布式的出现就是为了结局上述的架构方式无法满足的业务需求:

  我们依旧以电商项目举例,例如我们把电商支付模块,定时任务管理模块等其他复用性高模块抽成了一个独立的项目,这个时候我们的不管有多少个系统用到支付或定时任务,我们只需要调用就可以,但是这样也存在一个问题,上面我们也提及到了。

  例如我们的电商项目不可能仅用到下图中的三个jar,如果这其中涉及到十几或者几十个的jar时,这样会导致我们的主项目非常的臃肿而且难以维护,而这时候我们就要考虑如何在项目中使用这些我们独立出去的模块而且并不引入这些模块的jar,而这就是微服务架构;

  微服务架构则是在我们的项目和独立除却多个模块之间搭建起一个桥梁,这个桥梁可以使SpringCoiud或Dubbo等,这样我们就不用直接和那些独立出去的模块打交道,直接和中间桥梁打交道,他会自动判断调用的模块,这样就避免了引入过多jar,导致项目臃肿以及难维护的缺点;

  

  这时候我们也就知道了什么是微服务,所谓的微服务就是把项目中每个业务拆分,拆分后每一个业务节点都作为一个独立的项目,用户的访问则通过中间件服务的注册与发现来实现,这就是微服务架构;

 


清屿
6楼 · 2021-04-25 16:46

分布式概念

要想理解什么是分布式,我们一定要知道以下这些性质:

1)、首先,一个分布式系统它一定是由多个节点组成的系统。

2)、其次,一般它的节点都是指计算机服务器,并且这些节点通常不会孤立,它们是互通的。

3)、最后,它的连通的节点上都会部署我们的节点,且相互之间操作是协同的。


征戰撩四汸
7楼 · 2021-04-25 18:37

分布式系统(distributed system)是建立在网络之上的软件系统。

内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。

透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。

在分布式数据库系统中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无副本、数据存于哪个站点以及事务在哪个站点上执行等。

简单来讲:在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。

分布式系统作为一个整体对用户提供服务,而整个系统的内部的协作用户来说是透明的,用户就像是在使用一个MySQL一样。

如分布式MySQL中间件-Mycat,来处理大并发大数据量的构架。


Vita
8楼 · 2021-04-25 20:10
分布式应用程序就是指应用程序分布在不同计算机上,通过网络来共同完成一项任务,通常为服务器/客户端模式。更广义上理解“分布”,不只是应用程序,还包括数据库等,分布在不同计算机,完成同一个任务。之所以要把一个应用程序分布在不同的计算机上,主要有两个目的:
1) 分散服务器的压力
大型系统中,模块众多,并发量大,仅用一个服务器承载往往会发生压力过大而导致系统瘫痪的情况。可以在横向和纵向两方面来进行拆分,把这些模块部署到不同的服务器上。这样整个系统的压力就分布到了不同的服务器上。
l 横向:按功能划分。
l 纵向:N层架构,其中的一些层分布到不同的服务器上(分层的概念会在后文进行介绍)。
2) 提供服务,功能重用
使用服务进行功能重用比使用组件进行代码重用更进一层。举例来说,如果在一个系统中的三个模块都需要用到报表功能,一种方法是把报表功能做成一个单独的组件,然后让三个模块都引用这个组件,计算操作由三个模块各自进行;另一种方法是把报表功能做成单独的服务,让这三个模块直接使用这个服务来获取数据,所有的计算操作都在一处进行,很明显后者的方案会比前者好得多。
服务不仅能对内提供还能对外提供,如果其他合作伙伴需要使用我们的报表服务,我们又不想直接把所有的信息都公开给它们。在这种情况下组件方式就不是很合理了,通过公开服务并对服务的使用方做授权和验证,那么我们既能保证合作伙伴能得到他们需要的数据,又能保证核心的数据不公开。
寂静的枫林
9楼 · 2021-04-26 10:08

分布式架构是 分布式计算技术的应用和工具,目前成熟的技术包括J2EE, CORBA和.NET(DCOM)

相关问题推荐

  • 回答 20

    100-199 用于指定客户端应相应的某些动作。 200-299 用于表示请求成功。 300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 400-499 用于指出客户端的错误。 400 语义有误,当前请求无法被服务器理解。 401 当前请求需要用户验证...

  • 回答 5
    已采纳

    1、相同点(1)都是表现层框架,都是基于MVC设计模型(2)底层都离不开 Servlet API(3)处理请求的机制都是一个核心控制器2、不同点(1)SpringMVC的入口是Servlet,而Struts2的入口是Filter(2)SpringMVC是基于方法设计的,而Struts2是基于类(3)SpringMV...

  • 回答 22
    已采纳

    类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结...

  • 回答 23
    已采纳

    (1)idea启动时会有两个快捷方式,安装完后默认生成在桌面的是32位的idea的快捷方式,如果我们使用这个快捷方式运行大项目,一般都会很卡。解决方法是找到idea的安装目录,然后进入bin文件夹,找到名称为idea64的应用程序,右键他生成桌面快捷方式。以后每次...

  • 回答 12
    已采纳

    获取Map集合中所有的key可以通过map集合的keySet()方法获取例如:    Map map = new HashMap();    map.put(xx,xx); //存放数据    //.... 省略    Set set = map.keySet();    //可以通过迭代器进行测试    Iterator iter = set.iter...

  • 回答 4
    已采纳

    Java中有八种数据类型,基础数据类型分别是:byte,short,int,long,float,double,char,boolean,引用数据类型分别是:数组,类和接口。方法传参的时候我们有两种,一种是形式参数(定义方法时写的参数),一种是实际参数(调用方法时给的具体值)。首先...

  • 回答 10

    1、监控GC的状态使用各种JVM工具,查看当前日志,分析JVM参数的设置,分析堆内存快照和GC日志,根据实际的各区域的内存划分和GC的执行时间,判断是否需要进行优化2、分析结果、判断是否需要优化如果各项参数设置合理,系统没有超时的日志出现,GC频率也不高,...

  • 回答 7
    已采纳

    里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象里氏代换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一...

  • 回答 8
    已采纳

    心里有个预期,然后看看是以什么目的进这家企业工作,要是赚钱的话,那就多要点,要是学习的话,可以根据情况要一个能养活自己的价格。

  • 回答 6

    MyBatis 每次创建结果对象的新实例时,它都会使用一个对象工厂(ObjectFactory)实例来完成。 默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。 如果想覆盖对象工厂的默认行为,则可以...

  • 回答 6

    学vue应该要先学习javascript 的基础知识和用法。

  • 回答 8

    1、lambda是jdk8的新特性2、使用lambda的前提,必须是一个接口,接口只能有一个抽象方法3、Lambda 表达式的简单例子:// 1. 不需要参数,返回值为 5  () -> 5    // 2. 接收一个参数(数字类型),返回其2倍的值  x -> 2 * x    // 3. 接受2个参数(数...

没有解决我的问题,去提问