Zookeeper选举机制 1,启动时 2,集群运行期间 Paxos 解决分布式系统就某个协议达成一致的方案 分布式锁 解决什么问题:分布式环境下解决共享资源问题 场景:多台机器并发抢购商品 步骤1:竞争set key 锁标识 value 客户端标识(推荐uuid) 步骤2:设置有效期ttl,防止死锁,uuid只有保障上锁者有权解锁 步骤三:处理业务逻辑 步骤4:到期自动释放||逻辑结束惟一标识释放 特征 互斥性 任意时刻只有一个客户端能够获取锁 防死锁 避免客户端在释放锁前宕机,其余客户端没法得到锁 持锁线程解锁 锁只能由加锁者释放 可重入 能够再次得到锁 高并发数据库优化 数据库设计使用规范 根据业务和字段长度和类型 枚举 布尔 -》tinyint 数量 -》Integer 订单号 -》bigint 金额 -》decimal,不用double 经纬度坐标 -》double 日期 -》datetime,不用时间戳 尽可能不用大字段 sql执行计划优化 避免全表扫描 禁止使用属性隐式转换 类型与字段类型不符 禁止在where条件的属性上使用函数或表达式 禁止负向查询 eg: NOT, !=, <>, !<, !>, NOT IN, NOT LIKE 以%开头的模糊查询 大表禁止join查询 产生的临时表消耗过多内存及数据库性能 分库分表 分库 业务分库:用户,订单,帐号业务 流量会落到常常访问的业务库,不影响其余业务 分表 eg:单表数据超过500W,查询变慢 id: 建立日期时间戳+客户端id 数据分配规则:UID%数据库数量 技术落地 解决高并发都需求 mysql binlog主从架构方案分组 主:写入 从:查询 解决单库高并发数据压力过大 mysql shading集群 分库切片 JVM虚拟机 GC 说明:gc时对jvm中内存的垃圾进行收集和销毁 回收算法 1:标记清除 1.1:标记全部须要回收的对象 1.2:统一回收被标记对象 特色:效率不高,空间不连续,产生内存碎片,当分配大对象时,没法找到连续内存,被迫触发另外一次垃圾回收 2:复制算法 将内存按容量分为相等的两部分,每次使用其中一块,将活着的对象复制到另外一部分,将已使用的内存一次清理掉 特色:实现简单,效率高,内存缩小为一半,代价过大 3:标记整理 标记后将全部存活对象向一端移动,而后直接清理掉边界之外的内存 4:分代收集收集(经常使用) 把Java堆分开 新生代 特色:回收率高,采用复制算法 老年代 特色:存活率高,采用标记清楚算法或标记整理 永久代 方法区永久代:存储class类,变量,方法描述 特色:回收废弃的常量,无用的类 stop the world 项目问题 JVM故障分析 gc卡断 线程停顿 cpu分析 经过top命令 jstack [pin]的堆栈信息分析 可能缘由 线程中无线空循环 正则表达式无限制向上匹配 无阻塞 线程上下文切换 文件io和网络io阻塞