分布式相关

如何实现多个应用的Session共享

使用Redis缓存用户session


image.png

Spring 为 Spring Session 和 Redis 的集成提供了组件:spring-session-data-redis

@RequestMapping(value = "/index")
public String index (HttpServletRequest request){
    String msg="首页内容";
    Object user= request.getSession().getAttribute("user");
    if (user==null){
        msg="请先登录!";
    }
    return msg;

分布式的CAP

Consistency (一致性):

更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。

Availability (可用性):

服务一直可用,而且是正常响应时间。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。

Partition Tolerance (分区容错性):

即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。

这三者不可能同时满足:
假设服务器N1和N2之间的网络断开了,但我们仍要支持这种网络异常,也就是满足分区容错性(一般分布式系统都是需要满足P)。
当有用户向N1发送数据更新请求,那N1中的数据DB0将被更新为DB1,由于网络是断开的,N2中的数据库仍旧是DB0;
如果这个时候,有用户向N2发送数据读取请求,由于数据还没有进行同步,应用程序没办法立即给用户返回最新的数据DB1,怎么办呢?
有二种选择,第一,牺牲数据一致性,响应旧的数据DB0给用户;第二,牺牲可用性,阻塞等待,直到网络连接恢复,数据更新操作完成之后,再给用户响应最新的数据DB1。

可用性高于一致性的场景:发布一张网页到 CDN,多个服务器有这张网页的副本。后来发现一个错误,需要更新网页,这时只能每个服务器都更新一遍。

一般来说,网页的更新不是特别强调一致性。

一致性高于可用性的场景:最典型的就是分布式数据库,如Redis、HBase

RPC和微服务概念

https://blog.csdn.net/weixin_34341117/article/details/92389162

ngnix负载均衡

负载均衡的作用

1、转发功能
按照一定的算法【权重、轮询】,将客户端请求转发到不同应用服务器上,减轻单个服务器压力,提高系统并发量。

2、故障移除
通过心跳检测的方式,判断应用服务器当前是否可以正常工作,如果服务器期宕掉,自动将请求发送到其他应用服务器。(keepalive_timeout)

3、恢复添加
如检测到发生故障的应用服务器恢复工作,自动将其添加到处理用户请求队伍中。

Nginx 的 upstream目前支持的分配算法:
1)、轮询 ——1:1 轮流处理请求(默认)
每个请求按时间顺序逐一分配到不同的应用服务器,如果应用服务器down掉,自动剔除,剩下的继续轮询。
2)、权重 ——you can you up
通过配置权重,指定轮询几率,权重和访问比率成正比,用于应用服务器性能不均的情况。
3)、ip_哈希算法
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个应用服务器,可以解决session共享的问题。

upstream tomcatserver1 {  
    server 192.168.72.49:8080 weight=3;  
    server 192.168.72.49:8081;  
    }   
  
 server {  
        listen       80;  
        server_name  8080.max.com;  
        #charset koi8-r;  
        #access_log  logs/host.access.log  main;  
        location / {  
            proxy_pass   http://tomcatserver1;  
            index  index.html index.htm;  
        }  
     }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 分布式:一个业务分拆多个子业务,部署在不同的服务器上 集群:同一个业务,部署在多个服务器上 集群 集群模式在程序猿...
    落魄PHP女程序员阅读 919评论 0 4
  • 概念 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调系统。——《分...
    秋风落叶黄阅读 417评论 0 0
  • 网络互联 是指将两个以上的通信网络通过一定的方法,用一种或多种网络通信设备相互连接起来,以构成更大的网络系统。网络...
    孤海alone阅读 467评论 0 1
  • 1、请解释下cap理论? cap指的是分布式系统中的一致性(Consistency)、可用性(Availabili...
    becooner阅读 135评论 0 0
  • 草原上的狗尾巴草,是一种非常奇特的草。因为它茎的顶端长有细细的毛,像狗的尾巴,所以叫它“狗尾巴草”。 狗尾巴草长在...
    Terry的文字世界阅读 869评论 1 3