当前位置:   article > 正文

浅谈Java分布式与集群

java分布式

在日常操作中,相信很多人在怎么理解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. http {
  7. include mime.types;
  8. default_type application/octet-stream;
  9. # 日志格式
  10. log_format access '$remote_addr - $remote_user [$time_local] $host "$request" '
  11. '$status $body_bytes_sent "$http_referer" '
  12. '"$http_user_agent" "$http_x_forwarded_for" "$clientip"';
  13. access_log /srv/log/nginx/access.log access; # 日志输出目录
  14. gzip on;
  15. sendfile on;
  16. # 链接超时时间,自动断开
  17. keepalive_timeout 60;
  18. # 虚拟主机
  19. server {
  20. listen 8080;
  21. server_name localhost; # 浏览器访问域名
  22. charset utf-8;
  23. access_log logs/localhost.access.log access;
  24. # 路由
  25. location / {
  26. root www; # 访问根目录
  27. index index.html index.htm; # 入口文件
  28. }
  29. }
  30. # 引入其他的配置文件
  31. include servers/*;
  32. }

##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. $ mkdir -p /opt/confs
  30. $ vim /opt/confs/nginx.conf
  31. events
  32. {
  33. use epoll;
  34. worker_connections 65535;
  35. }
  36. http
  37. {
  38. upstream webhost {
  39. ip_hash;
  40. server 192.168.0.5:6666 ;
  41. server 192.168.0.7:6666 ;
  42. }
  43. server
  44. {
  45. listen 80;
  46. server_name mongo.demo.com;
  47. location / {
  48. proxy_pass http://webhost;
  49. proxy_redirect off;
  50. proxy_set_header X-Real-IP $remote_addr;
  51. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  52. proxy_set_header Host $host;
  53. client_max_body_size 10m;
  54. client_body_buffer_size 128k;
  55. proxy_connect_timeout 90;
  56. proxy_send_timeout 90;
  57. proxy_read_timeout 90;
  58. proxy_buffer_size 4k;
  59. proxy_buffers 4 32k;
  60. proxy_busy_buffers_size 64k;
  61. proxy_temp_file_write_size 64k;
  62. }
  63. }
  64. }

先这样吧,文中引申部分

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/771816
推荐阅读
相关标签
  

闽ICP备14008679号