zoukankan      html  css  js  c++  java
  • 分布式系统若干经验总结

     Session方面
      Tomcat自带的Session,不能解决跨系统的问题。
      要么把Session和Redis结合,所有系统统一使用一个Redis上的Session。
      要么,根据Cookie手动实现Session,把Session存到Redis中。
      我觉得分布式系统的Session关键是,维护一份数据并且多个系统都可以拿到。至于Session是怎么实现的,不是很重要。

    锁的几种方式
    mysql:select for update 默认等待50s
    oracle:select for update no wait可以不用等待。
    update status=newstatus where status=oldstatus (变种,维护一个oldstatus字段:update status=newstatus where oldstatus=oldstatus)
    带条件更新,不能强制更新,是一种不错的思路。

    select count(*)会锁表。
    like '303578599%'可以走索引。
    like '%303578599%' 不走索引,全表扫描。

    可以使用explain等分析sql语句的执行情况。

    目前,关于性能优化方面,个人项目的需求还不是很大。


    关于事务和锁,需要根据实际需求,量身定制。
    就目前咱们的项目来说,事务和锁都直接支持在分布式环境,比较小巧,成本较低。
    事务和锁应该怎么设计,更多取决于自己的业务,业务层面和技术层面都应该考虑。

    同步与锁,目前主要用了3种技巧
    redis埋一个缓存,setIfAbset,实现分布式锁。但是,项目中有bug,还需要分析。
    select for update需要在事务环境下。
    update status=newstatus where status=oldstatus,可以解决一定程度上的并发更新问题,防止状态推送的重复更新。

    事务的一些场景
    1个事务,比如支付和接收款项,是在一个事务中。
    2个事务,回款相关的更新状态在一个事务,给多个用户账户回款,可以允许部分出错。只要记下回款失败的,下次手动或自动补上就行了。
    比较复杂一点的是,大的事务里包含了多个事务。
  • 相关阅读:
    PYQT5学习笔记之各模块介绍
    socket网络编程
    python异常处理
    面向对象三大特性:继承,多态,封装
    面向对象编程
    解密for循环工作机制之迭代器,以及生成器、三元表达式与列表解析、解压序列
    文件处理之处理模式及其黑魔法
    php对xml文件的增删改查
    jquery.zclip实现点击拷贝文字功能
    php 验证访问浏览器是电脑还是手机
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462916.html
Copyright © 2011-2022 走看看