0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

JAVA科普:分布式和集群

Linux阅码场 来源:未知 作者:胡薇 2018-07-01 09:53 次阅读

1. 分布式

小明的公司有3个系统: 系统A、系统B和系统C ,这三个系统所做的业务不同,被部署在3个独立的机器上运行, 他们之间互相调用(当然是跨域网络的), 通力合作完成公司的业务流程。

将不同的业务分布在不同的地方, 这就构成了一个分布式的系统,现在问题来了, 系统A是整个分布式系统的“脸面”, 用户直接访问,用户量访问大的时候要么是速度巨慢,要么直接挂掉, 怎么办?

由于系统A只有一份, 所以会引起单点失败。

2集群(Cluster)

小明的公司不差钱,就多买几台机器吧, 小明把系统A一下子部署了好几份(例如下图的3个服务器),每一份都是系统A的一个实例, 对外提供同样的服务,这样能睡个安稳觉了,不怕其中一个坏掉了,我还有另外2个呢。

这3个服务器上的系统就组成了一个集群。

可是对用户来说,一下子出现这么系统A ,每个系统的IP地址都不一样, 到底访问哪一个?

如果所有人都访问服务器1.1 ,那服务器1.1 会被累死, 剩下的三个闲死,成了浪费钱的摆设。

3负载均衡(Load Balancer)

小明要尽可能的让3个机器上的系统A 工作均衡一些, 比如有3万个请求,那就让3个服务器各处理1万个(当然,这是理想状况), 这叫负载均衡。

很明显,这个负载均衡的工作最好独立出来, 放到独立的服务器上 (例如Ngnix):

后来小明发现, 这个负载均衡的服务器虽然工作内容很简单,就是拿到请求,分发请求,但是它还是有可能挂掉啊,单点失败还是会出现。

没办法,只好把负载均衡也搞成一个集群, 不过和系统A的集群有两点不同:

1. 这个新的集群中虽然有两个机器,但我们可以用某种办法,让这个集群对外只提供一个IP地址, 也就是说用户看到的好像只有一个机器。

2.同一时刻,我们只让一个负载均衡的机器工作, 另外一个原地待命。 如果工作的那个挂掉了,待命的那个就顶上去。

4弹性

如果这3个系统A的实例还是满足不了大量的请求,那就再加服务器!

双11来了,用户量是平时的10倍, 小明向领导申请费用又买了几十台服务器,一下子把系统A部署了几十份。 可是双11过后, 流量一下子降下来了,那几十个服务器用不上了,也变成了摆设!

被领导批评以后,小明决定尝试一下云计算, 在云端可以轻松的创建、删除虚拟的服务器, 那样就可以轻松地随着用户的请求动态的增减服务器了。 双11来了就创建虚拟服务器,等到双11过去了就把不用的关掉, 省得浪费钱。

于是小明的系统具备了一定的弹性。

5失效转移

上面的系统看起来很美好,但是做了一个不切实际的假设: 所有的服务都是无状态的。 换句话说,假设用户的两次请求直接是没有关联的。

但是现实是,大部分服务都是有状态的, 例如购物车。

用户访问系统,在服务器1.1上创建了一个购物车,并向其中加入了几个商品, 然后 服务器1.1 挂掉了, 用户的后续访问就找不到服务器1.1了,这时候就要做失效转移,让另外几个服务器去接管、去处理用户的请求。

可是问题来了,在服务器1.2,1.3上有用户的购物车吗? 如果没有, 用户就会抱怨,我刚创建的购物车哪里去了?

还有更严重的,假设用户是在服务器1.1上登录的, 用户登录过的信息保存到了该服务器的session中, 现在这个服务器挂掉了, 用户的session自然也不见了,当用户被失效转移到其他服务器上的时候,其他服务器发现用户没有登录, 就把用户踢到了登录界面, 让用户再次登录!

状态, 状态,状态! 用户的登录信息,购物车等都是状态信息, 处理不好状态的问题,集群的威力就大打折扣,无法完成真正的失效转移, 甚至无法使用。

怎么办?

一种办法是把状态信息在集群的各个服务器之间复制,让集群的各个服务器达成一致, 谁来干这个事情? 只能是像Websphere, Weblogic这样的应用服务器了。

还有一种办法, 就是把状态信息集中存储在一个地方, 让集群的各个服务器都能访问到:

小明听说Redis 不错, 那就用Redis来保存吧 !

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    103038
  • 集群
    +关注

    关注

    0

    文章

    79

    浏览量

    17106
  • 分布式
    +关注

    关注

    1

    文章

    757

    浏览量

    74115

原文标题:小白科普:分布式和集群

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    分布式软件系统

    分布式软件系统分布式软件系统(Distributed Software Systems)是支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。它包括分布式
    发表于 07-22 14:53

    基于Java分布式缓存优化在网络管理系统中的应用

    基于Java分布式缓存优化在网络管理系统中的应用讨论建立在JMX管理框架上的网络性能管理系统的优化方案,利用JMX体系结构的可扩展特性,在系统的服务器端嵌入了分布式缓存系统对服务器端的缓存进行高效
    发表于 09-19 09:20

    分布式发电技术与微型电网

    几种分布式发电简介2.分布式发电与配电网互联问题3.微型电网技术4.分布式发电(电源)技术应用的障碍和瓶颈5.分布式发电(电源)技术发展方向6.结语
    发表于 03-11 13:37

    spark集群使用hanlp进行分布式分词操作说明

    本篇分享一个使用hanlp分词的操作小案例,即在spark集群中使用hanlp完成分布式分词的操作,文章整理自【qq_33872191】的博客,感谢分享!以下为全文: 分两步:第一步:实现
    发表于 01-21 10:45

    Java 中利用 redis 实现一个分布式锁服务

    Java 中利用 redis 实现一个分布式锁服务
    发表于 07-05 13:14

    如何在集群部署时实现分布式session?

    集群部署时的分布式 session 如何实现?
    发表于 07-17 06:57

    Hadoop集群分布式的搭建步骤

    Hadoop集群分布式搭建
    发表于 11-04 09:19

    分布式系统的优势是什么?

    当讨论分布式系统时,我们面临许多以下这些形容词所描述的 同类型: 分布式的、删络的、并行的、并发的和分散的。分布式处理是一个相对较新的领域,所以还没有‘致的定义。与顺序计算相比、并行的、并发的和
    发表于 03-31 09:01

    HarmonyOS应用开发-分布式任务调度

    1. 介绍本篇CodeLab将实现的内容HarmonyOS是面向全场景多终端的分布式操作系统,使得应用程序的开发打破了智能终端互通的性能和数据壁垒,业务逻辑原子化开发,适配多端。通过一个简单应用开发
    发表于 09-18 09:21

    HarmonyOS应用开发-分布式设计

    设计理念HarmonyOS 是面向未来全场景智慧生活方式的分布式操作系统。对消费者而言,HarmonyOS 将生活场景中的各类终端进行能力整合,形成“One Super Device”,以实现
    发表于 09-22 17:11

    各种分布式电源的电气特性

    PS:渗透率的概念:从字面上理解,“渗透”就是由分布式电源发出的功率进入(渗入)到配电系统,所谓的“率”就是由分布式电源发出的电和整个系统所消耗的电(或者说总发电量)的一个比值。各种分布式电源的电气
    发表于 07-12 07:54

    如何高效完成HarmonyOS分布式应用测试?

    作者:liuxun,HarmonyOS测试架构师HarmonyOS是新一代的智能终端操作系统,给开发者提供了设备发现、设备连接、跨设备调用等丰富的分布式API。随着越来越多的开发者投入到
    发表于 12-13 18:07

    分布式操作系统的相关资料分享

    文章目录分布式操作系统嵌入操作系统集群操作系统集群系统管理分布式操作系统在以往的计算机系统中,其处理和控制功能都高度集中在一台主机上,所有
    发表于 12-22 07:23

    集群分布式有什么区别

    经常听到MySql集群、Redis集群分布式系统等概念,但是,很少有机会深究,到底什么集群,什么是分布式?在概念上这俩个词很接近,难道不需
    的头像 发表于 05-03 18:24 4891次阅读

    Java手写分布式锁的实现

    随着互联网业务的发展,原本单机部署的系统演化成如今的分布式集群系统后,由于分布式系统多线程
    的头像 发表于 11-17 15:51 261次阅读
    <b class='flag-5'>Java</b>手写<b class='flag-5'>分布式</b>锁的实现