读大型网站系统与Java中间件实践(曾宪杰)感悟

    xiaoxiao2025-04-01  15

    集群 是一个 1+1 > 2 的模式 最开始有1台服务器,随着流量的增加 不能只单单增加一个服务器,而是同时还要增加一个管理者服务器集群本身也是一种分片 可以实现高容量,高并发,高可用(三高)管理者服务器的三种模式 代理模式     增加代理服务器控制后面服务器的选取名称服务器 将服务节点的地址存储在名称服务器中,服务节点的变更会同步到名称服务器请求者获取所有服务节点地址,直连服务节点主从模式 主服务器保存所有从服务的地址信息请求发送到主服务器后,主服务器进行路由选取,返回服务地址,请求端直连从服务器

    数据量,访问量增大后的问题及解决

    多个业务查询一个库,是一种耦合,会增大数据库的压力,应该垂直拆分 问题: 引发了分布式事务单表存储量大 mysql上限2000w 数据表量大,水平拆分系统方面 路由策略主键防重分页 排序

    消息中间件

    好处:异步和解耦

    灵感突现:要尽量保护数据库,不让外部应用感受到数据库的存在(对核心数据加解密,异步同步缓存,搜索)

    中间件分类(主要解决共性问题)

    服务调用和治理消息中间件数据访问中间件

    灵感突现:不读历史,你就不知道你现在用的技术的好处,万物皆如此

    ReentrantLock比synchronize的好处

    trylock公平锁读写锁

    synchronized与volatile的异同

    同:

    synchronized可以做主存与线程副本之间的同步,volatile只有主存

    将数据从主存复制到线程副本将数据从线程副本同步到主存

    异:

    synchronized可以做互斥

    加锁的方式有5种 synchorized lock countdownlatch 栅栏 信号量

    信号量主要是为了细粒度的控制并发量

    服务分组好处是机器分组 服务隔离

    解决jar包冲突最好的办法是自定义class loader 实现类加载隔离

    超时 其实就一个定时任务 超时后调用回调函数响应超时 远程调用的四种方式 Oneway不关心结果 2 被动回调 3 future 主动控制超时 4 可靠异步就是消息中间件

    rpc的过程 路由 编码 代理 网络 限流 解码 反射 返回

    消息中间件

    如何保证消息发送一致性

    也就是业务操作成功后,消息一定会发出去 ,业务失败,消息一定发不出去

     先将消息写入中间件库 状态为待处理然后调用业务操作,如果成功后 将消息改为待发送,失败的话 删除消息

    原生JMS消息模型

    点对点: 消息只会被一个应用消费,一个应用消费了,另一个应用就不能再次消费了

    发布订阅:消费者可以独立收到所有到达Topic的消息

    如何保证不同集群互不干扰的消费各自消息,及集群内部不同的连接不重复消费消息?

    集群id:对各个连接以集群id分组

    点对点模型:在集群内部使用点对点模型,一个应用消费了 其他应用不能消息

    如何保证消息的可靠性

    持久订阅:即使应用宕机了,消息也会被保存,等应用恢复后,继续消费

    持久传输和非持久传输最大的区别是:采用持久传输时,传输的消息会保存到磁盘中(messages are persisted to disk/database),即“存储转发”方式。先把消息存储到磁盘中,然后再将消息“转发”给订阅者。当Borker宕机 恢复后,消息还在

     

    最新回复(0)