• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Java分布式和集群

武飞扬头像
Alex_81D
帮助1

在日常操作中,相信很多人在怎么理解Java分布式与集群问题上存在疑惑,今天就大概说说,不注意听,觉得两个可能是同一个东西,其实这个是两个概念。

一句话概括:分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

这个可能听着有点官方,接下来举例说明一下:

分布式

把一个业务,拆分成多个业务,然后部署到不同的服务器上,这就是分布式。

举个例子

公司的网上商城,拆分成两个系统:商品系统和支付系统,用户在商品系统上完成浏览商品、加入购物车的动作,在支付系统上完成支付动作(当然用户是无法感知到是在两个系统上完成的操作),这就是分布式。当然,还能继续拆,例如拆出来:用户系统、积分系统、物流系统等等等等。

学新通

分布式的好处

领导说,我们再做一个二手交易平台,类似于X鱼,这时候用户系统、支付系统就可以复用了,做到了服务复用。 

集群

一个业务,部署在多台服务器上,这就是集群。这里的一个业务,可以直接看做一个程序包。

举个例子

公司开发了一个网上商城,类似于T宝,顾客可以在上面浏览商品、加入购物车、支付,完成整个的购物流程。
公司买了一台服务器,把这套程序部署上去,可以满足一千个人同时在线购物。
当顾客越来越多,服务器负载越来越高,商城的页面也越来越卡,这时候公司再买几台服务器,把商城的程序在每个服务器上都部署一套,由负载均衡将请求转发到各个服务器上,这就是集群。

学新通

集群分类

Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群)

1. 高可用集群(High Availability Cluster)

常见的就是2个节点做成的HA集群,有很多通俗的不科学的名称,比如"双机热备", "双机互备", "双机".

高可用集群解决的是保障用户的应用程序持续对外提供服务的能力。 (请注意高可用集群既不是用来保护业务数据的,保护的是用户的业务程序对外不间断提供服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度)。

2. 负载均衡集群(Load Balance Cluster)

负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。

负载均衡集群一般用于相应网络请求的网页服务器,数据库服务器。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。从检查其他服务器状态这一点上看,负载均衡和容错集群很接近,不同之处是数量上更多。

3. 科学计算集群(High Performance Computing Cluster)

高性能计算(High Perfermance Computing)集群,简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大的计算能力。 

分布式 集群

分布式和集群通常是是结合在一起使用的; 

比如商品系统部署两台,支付系统部署两台,前面各自挂负载均衡,这样就算有单个服务器 Down 掉,也不会对整个业务流程造成影响。

小结:

分布式是指将不同的业务分布在不同的地方。 而集群指的是将几台服务器集中在一起,实现同一业务。分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。

举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。而分布式,从窄意上理解,也跟集群差不多, 但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。分布式的每一个节点,都完成不同的业务,一个节点垮了,哪这个业务就不可访问了。

引申:

刚才已经说过负载均衡和反向代理了,那不得不提一下Nginx,可以说用来做这个再合适不过了。接下来说一下Nginx的配置和如何实现反向代理以及负载均衡。

Nginx配置实现多台服务器负载均衡

基本命令

  1.  
    nginx -t 检查配置文件是否有语法错误
  2.  
    nginx -s reload 热加载,重新加载配置文件
  3.  
    nginx -s stop 快速关闭
  4.  
    nginx -s quit 等待工作进程处理完成后关闭

Nginx负载均衡服务器的nginx.conf

  1.  
    # 工作进程的数量
  2.  
    worker_processes 1;
  3.  
    events {
  4.  
    worker_connections 1024; # 每个工作进程连接数
  5.  
    }
  6.  
     
  7.  
    http {
  8.  
    include mime.types;
  9.  
    default_type application/octet-stream;
  10.  
     
  11.  
    # 日志格式
  12.  
    log_format access '$remote_addr - $remote_user [$time_local] $host "$request" '
  13.  
    '$status $body_bytes_sent "$http_referer" '
  14.  
    '"$http_user_agent" "$http_x_forwarded_for" "$clientip"';
  15.  
    access_log /srv/log/nginx/access.log access; # 日志输出目录
  16.  
    gzip on;
  17.  
    sendfile on;
  18.  
     
  19.  
    # 链接超时时间,自动断开
  20.  
    keepalive_timeout 60;
  21.  
     
  22.  
    # 虚拟主机
  23.  
    server {
  24.  
    listen 8080;
  25.  
    server_name localhost; # 浏览器访问域名
  26.  
     
  27.  
    charset utf-8;
  28.  
    access_log logs/localhost.access.log access;
  29.  
     
  30.  
    # 路由
  31.  
    location / {
  32.  
    root www; # 访问根目录
  33.  
    index index.html index.htm; # 入口文件
  34.  
    }
  35.  
    }
  36.  
     
  37.  
    # 引入其他的配置文件
  38.  
    include servers/*;
  39.  
    }
学新通

##upstream的负载均衡,四种调度算法##
#调度算法1:轮询.每个请求按时间顺序逐一分配到不同的后端服务器,
#如果后端某台服务器宕机,故障系统被自动剔除,使用户访问不受影响
upstream webhost {
server 192.168.0.5:6666 ;
server 192.168.0.7:6666 ;
}
#调度算法2:weight(权重).可以根据机器配置定义权重.权重越高被分配到的几率越大
upstream webhost {
server 192.168.0.5:6666 weight=2;
server 192.168.0.7:6666 weight=3;
}
#调度算法3:ip_hash. 每个请求按访问IP的hash结果分配,这样来自同一个IP的访客固定访问一个后端服务器,
#有效解决了动态网页存在的session共享问题
upstream webhost {
ip_hash;
server 192.168.0.5:6666 ;
server 192.168.0.7:6666 ;
}
#调度算法4:url_hash(需安装第三方插件).此方法按访问url的hash结果来分配请求,
#使每个url定向到同一个后端服务器,可以进一步提高后端缓存服务器的效率.
#Nginx本身是不支持url_hash的,如果需要使用这种调度算法,必须安装Nginx 的hash软件包
upstream webhost {
server 192.168.0.5:6666 ;
server 192.168.0.7:6666 ;
hash $request_uri;
}
#调度算法5:fair(需安装第三方插件).这是比上面两个更加智能的负载均衡算法.
#此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,
#响应时间短的优先分配.Nginx本身是不支持fair的,如果需要使用这种调度算法,必须下载Nginx的upstream_fair模块

#虚拟主机的配置(采用调度算法3:ip_hash)

  1.  
    server
  2.  
    {
  3.  
    listen 80;
  4.  
    server_name mongo.demo.com;
  5.  
    #对 “/” 启用反向代理
  6.  
    location / {
  7.  
    proxy_pass http://webhost;
  8.  
    proxy_redirect off;
  9.  
    proxy_set_header X-Real-IP $remote_addr;
  10.  
    #后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
  11.  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  12.  
    #以下是一些反向代理的配置,可选.
  13.  
    proxy_set_header Host $host;
  14.  
    client_max_body_size 10m; #允许客户端请求的最大单文件字节数
  15.  
    client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数,
  16.  
    proxy_connect_timeout 90; #nginx跟后端服务器连接超时时间(代理连接超时)
  17.  
    proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时)
  18.  
    proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超时)
  19.  
    proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息的缓冲区大小
  20.  
    proxy_buffers 4 32k; #proxy_buffers缓冲区,网页平均在32k以下的设置
  21.  
    proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2
  22.  
    proxy_temp_file_write_size 64k;
  23.  
    #设定缓存文件夹大小,大于这个值,将从upstream服务器传
  24.  
    }
  25.  
    }
  26.  
    }
  27.  
    配置 192.168.0.4(Nginx-Server)
  28.  
     
  29.  
    创建文件夹准备存放配置文件
  30.  
     
  31.  
    $ mkdir -p /opt/confs
  32.  
    $ vim /opt/confs/nginx.conf
  33.  
    events
  34.  
    {
  35.  
    use epoll;
  36.  
    worker_connections 65535;
  37.  
    }
  38.  
    http
  39.  
    {
  40.  
    upstream webhost {
  41.  
    ip_hash;
  42.  
    server 192.168.0.5:6666 ;
  43.  
    server 192.168.0.7:6666 ;
  44.  
    }
  45.  
    server
  46.  
    {
  47.  
    listen 80;
  48.  
    server_name mongo.demo.com;
  49.  
    location / {
  50.  
    proxy_pass http://webhost;
  51.  
    proxy_redirect off;
  52.  
    proxy_set_header X-Real-IP $remote_addr;
  53.  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  54.  
    proxy_set_header Host $host;
  55.  
    client_max_body_size 10m;
  56.  
    client_body_buffer_size 128k;
  57.  
    proxy_connect_timeout 90;
  58.  
    proxy_send_timeout 90;
  59.  
    proxy_read_timeout 90;
  60.  
    proxy_buffer_size 4k;
  61.  
    proxy_buffers 4 32k;
  62.  
    proxy_busy_buffers_size 64k;
  63.  
    proxy_temp_file_write_size 64k;
  64.  
    }
  65.  
    }
  66.  
    }
学新通

学新通

先这样吧,文中引申部分

https://www.jb51.net/article/218545.htm

https://www.cnblogs.com/hanease/p/15890509.html

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhficjec
系列文章
更多 icon
同类精品
更多 icon
继续加载