`
jieke_ZJ
  • 浏览: 44795 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

高并发处理系统的理解---数据一致性

 
阅读更多
  • 服务器配置
  • 数据库设计以及优化
  • 缓存
  • 数据一致性处理

 服务器配置:

         集群的环境,每个主机选择apahe 还是nginx,nignx的并发性好。nginx和apche区别 以及服务器的配置,例如缓存大小等

        根据实际情况,可能对于图像比较多的情况,单独配置nginx服务器,作为图像服务器。在实习中使用的是七牛家的云存储单独作为图片存储,将有关车辆的上传图片全部放在上面。

 

数据库设计以及优化

       (1)表的设计:

           存储引擎:innodb还是 myisam? innodb支持事务外键,可以在崩溃时恢复(事务中redo日志实现),myisam不支持;存放数据的方式不同:myisam将表的结构frm 数据myd索引myi存在数据库目标中;innodb只在数据库目标文件中存在表的结构;索引采用B+树,myisam索引叶结点保存的是指针,指向数据,innodb存的就是数据;myisam占用空间小,在读的业务比较多的情况下采用myisam比较好。

         字段的设置: 尽量使用短的字段,提高效率,建立索引也能减少资源浪费; 整型类型,比字符类型比较快;varchar 和 char不定长(节约空间)和定长(查询快)选用;索引字段:该字段进行不同的比较多,字段值不易过长。

         合理选择数据的冗余:可以根据实际情况,不满足三范式:设置冗余字段,可以减少客户的处理,满足三范式,表之间的关系比较清晰,但是因为有外键什么的,多表关联可能性能降低,加大了用户的编程难度。

        索引优化:别人整理的很好

      (2)分库分表

        针对大表,可以根据实际情况垂直分表或者水平分表。

      垂直分表:对于大表中的某些字段经常使用,可以分表;

      水平分表:例如月份,将不同的月份的数据存在不同的表中。

    (3)mysql集群的环境

       读写分离:主要针对读操作比较多的情况下读写分离别人的,很好

 

        目的:给大型网站缓解查询压力

        原理:服务器运行amobe服务,可以判断sql是写还是读操作。收到sql语句是写,服务器将写送到master mysql处理,利用mysql proxy机制然后同步到slave mysql;

         当服务器是select时,服务器会根据负载均衡挑选出一个slave mysql,将select语句送到并处理。

缓存:

       可以将一些不动的页面:页面静态化/部分页面静态化;

        或者将一些数据存在memcache或者redis中,不用去查表

 

数据一致性处理

      当多个进程同时操作同一个数据,会产生资源争抢,数据一致性的问题。

       高并发情况下,涉及到写操作时,不可能直接操作数据库,大并发的连接会导致mysql请求会阻塞,比如大量的insert update 请求到,会直接导致无数的行锁和表锁,甚至最后堆积很多,从来触发too many connections 错误。

     web服务器 nginx和apache连接的进程有限,cpu上下文进程切换也会增加额外的开销,所以响应一定快。

      这时可以采用

     高并发下的数据安全,防超发,以抢票系统为例:

    (1)消息队列:

        将票数资源存在redis中,将请求存入消息队列(redis下的list阻塞的,可以实现消息队列,还可以实现优先消息队列点击打开链接)中,依次处理。缺点 :这样会处理比较慢,等待时间比较长。

    

:对于读操作是否也进入队列,这个问题根据具体的场景,像12306应该是不在队列中或者是优先排在最前面的,因为只是读,要求块。 

(2)加锁

      常见的锁:        排它锁;乐观锁;悲观锁;

      排他锁:在进行写时,禁止一切的读和写;

      乐观锁:认为在写的时候,别人不在写,维护一个version号,等处理后对照version好,一致则对,否则回滚,操作不成功,

      悲观锁:认为在写的时候,别人也在写。采用数据库提供的锁机制:在写操作的时(insert updata 等)myisam默认是锁表,innodb根据是否是主键,主键则行锁,否则表锁。读操作,innodb采用mvcc版本控制。

     可以采用乐观锁+回滚:

       

    采用悲观锁:

    

 

 

分享到:
评论

相关推荐

    高并发系统设计.pdf

    这种方式可以有效地应对高并发,但同时也引入了诸如负载均衡、数据一致性、容错处理等复杂问题。例如,需要考虑如何在节点故障时保持服务的可用性,以及如何在不中断服务的情况下动态添加或移除节点。 缓存在高并发...

    Java多线程与高并发入门到精通-视频教程网盘链接提取码下载.txt

    - **挑战**:资源竞争、数据一致性、服务不可用等问题。 **3.2 高并发解决方案** - **负载均衡**:通过分发请求到不同的服务器节点,减轻单个节点的压力。 - **缓存技术**:利用缓存减少对数据库的访问次数,提高...

    Java并发编程与高并发解决方案-学习笔记

    ### Java并发编程与高并发...以上内容概述了Java并发编程的基础知识,包括并发与高并发的概念、CPU缓存及其一致性原理、以及Java内存模型的核心要素。这些基础知识对于理解Java并发编程的关键概念和技术具有重要意义。

    亿级数据存储及高并发搜索设计方法-MySQL+Elasticsearch+Redis

    内容概要:本文详细介绍了如何在MySQL基础上实现亿级数据存储和高并发搜索的设计方案,包括双写技术、异步双写、定期同步、基于Binlog的数据同步以及ETL数据同步等多种数据一致性的实现方法。每种方案都有各自的优...

    高并发多线程处理demo-java.rar

    在Java编程领域,高并发和多线程是关键的技术之一,尤其在服务器端应用和大数据处理中至关重要。这个"高并发多线程处理demo-java.rar"压缩包提供了一个实际的Java实现,展示了如何构建一个并发队列来接收数据,并...

    PHP秒杀系统 高并发高性能的极致挑战-

    通过以上介绍,我们可以看到设计和实现一个高并发、高性能的秒杀系统并非易事,它不仅涉及到多种技术的选择与应用,还需要深入理解业务流程并不断进行优化调整。希望本文能够帮助开发者们更好地应对这类挑战,构建出...

    实战Java高并发程序设计-随书代码

    《实战Java高并发程序设计》是一本专注于Java并发编程实践的书籍,随书代码提供了大量示例,帮助读者深入理解并掌握在实际开发中如何处理高并发场景下的问题。本书的核心知识点涵盖了Java并发编程的基础理论、核心...

    分布式一致性系统算法

    - **多个业务操作同时修改同一数据**:这种情况更增加了数据一致性维护的难度,因为在多并发的情况下确保所有操作按预期顺序执行是非常困难的。 - **网络不确定性和操作顺序问题**:在网络不稳定的情况下,不同节点...

    《Netty、Redis、ZooKeeper高并发实战》-netty-redis-zookeeper.zip

    此外,Redis还支持通过LUA脚本实现原子操作,进一步提高了数据一致性。 ZooKeeper深度剖析: ZooKeeper是Apache Hadoop项目的一部分,设计用于处理分布式环境中的命名服务、配置管理、集群同步等问题。它提供了一种...

    java面试题_高并发、高可用、分布式(9题)

    高并发是指系统在同一时间处理大量请求的能力。在Java中,实现高并发通常涉及线程管理和并发控制。Java提供了线程池(如ExecutorService)来管理线程生命周期,减少创建和销毁线程的开销。此外,synchronized关键字...

    实战Java高并发程序设计第二版随书代码

    - **volatile**:了解volatile如何保证内存可见性和禁止指令重排序,以确保多线程环境下的数据一致性。 - **synchronized**:深入理解synchronized的 Monitor 模型,包括可重入性、锁升级机制以及监视器锁与对象头...

    案例实战-高并发业务的多级缓存架构一致性解决方案

    总结来说,面对高并发业务,通过设计合理的多级缓存架构并选择合适的一致性策略,能够有效提升系统的响应速度,降低数据库的压力,并在保证数据一致性的同时,提供良好的用户体验。通过对“multi-level-cache”源码...

    行业分类-设备装置-云环境下基于队列的高并发数据快速写入系统及方法.zip

    此外,为了保证数据的一致性和完整性,系统可能还采用了事务处理机制,确保即使在高并发环境下,数据也能正确地按照预期顺序写入。同时,通过数据校验和备份策略,防止数据丢失,增强系统的容错性。 最后,该方法...

    数据库内核_TDSQL--多级一致性--.zip

    通过深入学习“数据库内核_TDSQL--多级一致性--.pdf”文档,我们可以更全面地了解TDSQL如何在复杂的分布式环境中实现高效、稳定的数据一致性,这对于理解分布式数据库的设计和优化具有重要价值。

    实战Java高并发程序设计-12333.pdf

    高并发通常与大型网站、分布式系统以及云计算环境相关联,它涉及到系统性能优化、资源管理、数据一致性、系统稳定性等多个方面。 Java作为一种多线程编程语言,提供了丰富的API和工具来支持高并发编程。在"多线程...

    亿级流量网站架构核心技术 跟开涛学搭建高可用高并发系统

    - **分布式事务**:两阶段提交、三阶段提交等协议确保数据一致性。 - **分布式锁**:基于Zookeeper、Redis实现的分布式锁,解决并发控制问题。 - **消息队列**:RabbitMQ、Kafka等,用于解耦、异步处理以及削峰填谷...

    高性能高并发服务器架构

    ### 高性能高并发服务器架构的关键知识点 #### 1. 高性能高并发服务器架构概述 - **背景**: 在互联网迅速发展的背景下,越来越多的网站面临着大量...希望这些信息能够帮助读者更好地理解和实施高并发网站的架构设计。

    计算机-mysql-基于NoSQL的大数据处理的研究.pdf

    NoSQL数据库通常采用BASE(Basically Available, Soft state, Eventually consistent)原则,即基本可用、软状态、最终一致,来平衡数据一致性与系统性能。 2.1.3 ACID与BASE ACID(原子性、一致性、隔离性、持久...

    高并发秒杀系统

    MyBatis则用于高效地与数据库交互,确保数据一致性。 Maven作为项目管理工具,它统一了构建过程,简化了依赖管理。在这个项目中,Maven的pom.xml文件定义了项目的依赖关系,包括SSM框架和Redis的相关库,使得开发...

    用来对比、校验redis 多个数据库数据一致性的命令行工具.zip

    - **高性能**:Go语言的并发模型使得处理大量网络连接和数据同步变得更加高效。 - **简单易用**:Go的语法简洁,方便开发者快速理解和使用工具。 - **跨平台**:Go编译的程序可以在多种操作系统上运行,增强了工具的...

Global site tag (gtag.js) - Google Analytics