大型网站系统与java中间件实践笔记

本文围绕大型网站系统与Java中间件展开,介绍分布式系统,如IO区别、LVS架构优缺点及分布式session处理方式;阐述大型网站架构演进,包括数据库读写分离与拆分;讲解Java中间件多线程知识;还提及数据访问层分库分表方法、隐患及分布式事务、跨库操作解决办法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大型网站系统与java中间件实践笔记 _ 曾宪杰

1. 分布式系统介绍

  1. IO区别:

    1. BIO: 阻塞IO.
    2. AIO:java7引入,在有通知时表示相关操作已经完成。
    3. NIO:在有通知时表示可以进行操作。
  2. LVS架构的优缺点:

    1. 优点:请求方和处理方都不需要关注对方的地址,只需要知道LVS的地址即可。
    2. 缺点:造成单点危机,LVS成为了可能引发瓶颈的点。而且增加了网络的开销,还有一定的延时,因为,所有的请求都会通过LVS进行转发。
    3. 解决方案:需要做LVS的热备份,但是在切换的时候,当时未完成的请求还是会受到影响。
  3. 分布式session

    1. Session Sticky:
      1. 处理方式: session保存在固定的服务器上,通过负载均衡器保证同样的session的请求每次都发送到同一个服务器上处理。
      2. 缺点:
      1. 若服务器宕机,用户需要重新登录。
      2. 会话标识是应用层的信息,那么负载均衡器要将同一个会话的请求都保存到同一个web服务器上,就需要进行应用层(第七层)解析,这个开销比第四层的交换大。
      3. 负载均衡器变成了一个有状态的节点,要将会话保存到到具体的服务器的映射。消耗内存,且容灾会很复杂。

    2. Session Replication:

      1. 处理方式:通过服务器之间同步session,保证数据的正确性。
      2. 缺点:
        1. 同步session数据造成网络带宽的开销。session存在变化,就得同步。
        2. 每台Web服务器都需要保存所有的Session数据,导致占用的内存很严重。
    3. Session数据集中处理

      1. 处理方式:不同的web服务器从同样的地方获取session。
      2. 缺点:
        1. 网络开销,需要去单独的服务器获取session数据。
        2. 需要注意单点问题,保证服务器的稳定性。
    4. Cookie Based

      1. 处理方式:通过Cookie来传递session数据。
      2. 缺点:
        1. Cookie长度限制。
        2. 安全性,Session是服务端的数据,而cookie是保存在客户端的,容易被破解,哪怕对session数据进行加密。
        3. 性能影响:每次http请求和响应都得带有session数据。

2. 大型网站的架构演进

  1. 数据库读写分离
    1. 专库专用,数据垂直拆分。根据业务拆分成不同的数据库,不把所有业务的表都存放在一个数据库中。
    2. 垂直拆分之后,数据水平拆分。
    3. 垂直拆分的是不同的表到不同的数据库中;水平拆分是同一个表拆分到不同的数据库中。

3. JAVA中间件

  1. 多线程:
    1. synchronize保证了synchronize块中变量的可见性,而volatile保证了所修饰属性在不同线程之间的可见性。
    2. wait, notify, notifyAll都需要放在synchronize块中。

4. 数据访问层

  1. 分库分表:

    1. 方法:
      1. 水平拆分:根据一定的规则把同一业务单元的数据拆分到多个数据库中。
      2. 垂直拆分:根据不同的业务拆分到不同的数据库中。
    2. 带来的隐患:
      1. 单机的ACID打破了,需要分布式事务的介入。
      2. 一些复杂的join操作无法使用了。
      3. 无法使用数据库的自动增长序列。
      4. 数据查询需要跨表操作。
  2. 分布式事务:

    1. 两阶段提交:第一阶段都看是否准备是否可以提交;第二阶段即提交或是回滚。
  3. 跨库join

    1. 把原来的join操作改为多次的数据库操作;例如,查询用户的商品信息,可以先查询出用户的id,然后,再根据用户id,去商品库查询数据。
    2. 进行适当的数据冗余。
  4. 跨库查询解决:

    1. 问题:分库分表之后,查询数据需要到各个库中的各个表上获取数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值