存储难做一是对于整体需求把握,存储定位是什么服务于什么场景,再有就是存储怎么设计,设计一套存储架构是一件很难的事,涉及扩展性、维护性、易用性,实现是一件更难的事情涉及单机存储,分布式存储的话还涉及分布式相关各种概念原理,每一个环节都不简单,造成存储系统是一个复杂且不易于实现的系统。
当业务刚起步时数据很小时,或者用户很小时,存储问题比较简单,使用单机数据库就可以解决比如mysql,随着业务发展带来访问量增加以及数据量增加,单机就出现了性能瓶颈以及存储量的瓶颈。
单机性能或者访问量承受不住,就需要对存储架构进行调整,进行读写分离,读写分离之后可以将写和读分开,降低存储负载,从而解决在这个时段上的存储压力。
在随着业务发展,读写分离又扛不住了就需要分布式,分布式本身能带来容量和性能以及处理数据量大量提升,但也相应带来一些挑战,比如数据复制,数据一致性,分布式系统可用性,以及分布式系统复杂性,也面临由于分布式系统带来复杂维护管理成本。
首先应该从开源方案入手,看是否有符合业务需求方案,拿来使用,这样是比较合理也是成本较低方式,但也会有些问题,比如开源方案存在bug,而bug修复又比较慢,这是使用开源方案需要注意的问题,再有如果是线上核心系统,开源存储稳定性决定着线上系统稳定,这是关键一件事,对于使用开源系统要做详细调查研究以及测试。不然对于项目不可控,可能会产生灾难性影响。
开源不满足业务需求的话,就需要自己研发,对于存储系统研发成本还是很高的。当有自研想法后,就需要研发团队深入去研究,会发现存储系统几乎涉及计算机方方面面。
存储是一个综合性系统涉及磁盘、内存、网络、cpu、数据结构、算法、多线程等多个技术领域,整个系统每个环节都需要是优化的,才能使整个系统是性能是高的。这个过程需要对于磁盘比如传统STAT以及基于SSD磁盘有比较深入认知,才能将磁盘运用好,传统磁盘随机读写qps都是很低的几百qps的数量级,STAT比较好的使用方式批量顺序读写,避免随机读写。SSD虽然随机读取速度相比于STAT快很多,但SSD磁盘存在写放大问题,不同于传统磁盘SSD需要擦除块内容才能写入,而通常块比写入数据大很多倍,从而产生写放大问题。
关于内存,存储系统要设计好缓存,通过内存缓存来提升存储系统整体性能。但保持内存中数据与磁盘数据一致是一件非常复杂事情,再有就是如果系统过于依赖缓存,重启后数据不在缓存,这种情况下磁盘会承载过大压力,从而导致系统负载过重或者不可用。
关于网络,单机存储也需要网络,为了架构合理性以及易维护性,存储和业务一般是分开的,这就需要通过网络方式来提供服务,这时一个高效的网络系统就至关重要了。因为网络传输慢或者网络模块处理慢会导致整个系统tps、ops下降。再有网络需要注意网络是千兆还是万兆,千兆理论是128M/s,万兆理论传输速度是1280M/s,当网络传输接近理论传输时超时便会明显增多,影响系统稳定。
cpu负载以及使用率也会影响着系统响应,就需要我们使用合理时间复杂度数据结构以及算法,合理利用cpu资源避免cpu过高,从而导致cpu负载以及使用率成为系统瓶颈。
前边是单机存储会涉及的一些核心的点,当然这几个点相互之间还是存在关联的,这就使整个系统复杂性变得更加的高。分布式存储前边的问题都涉及并且还会有些分布式系统独有的复杂问题。
分布式通过数据复制来实现高可用,通过横向扩展来实现存储量横向扩展。但多副本带来数据一致性问题,在有网络以及硬件因素带来可用性问题,以及网络分区对于系统提供服务影响,即著名CAP问题。CAP不是唯一问题,之外还有分布式事务、共识问题、租约问题等一系列问题,在有就是为了保证数据一致性需要undo log、redo log、WAL等一系列技术,分布式事务涉及2PC MVCC COW等各种技术。
有了分布式存储,也需要应用系统根据实际应用场景去合理使用,一个是利用多级缓存合理的将冷热数据分开存储。冷数据存储在STAT、SSD磁盘,热数据存储在分布式缓存,极热数据存储在应用本地缓存中,通过分级来平衡性能和成本。
除了显性研发成本外,分布式系统还有着较高维护管理成本,因为涉及机器众多,机器硬件比如磁盘、主机、网络等都可能会产生问题,就需要有完备的监控系统,监控系统之外还需要专门的运维团队,来维护整个系统稳定性、可用性。
希望本文能让你对存储有一个比较详细了解,并可以合理应用到实际开发过程中。
相关文章推荐:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 程序员过关斩将:解决分布式 session 问题
- java程序员进阶:Redis分布式技术问题集锦
- 8个月打磨,一份送给程序员的「分布式系统」合集
- 让程序员少写几万行代码:七个实用的分布式开源框架
- 程序员高薪盛宴背后:程序员正在消失?
- 大龄程序员的出路,程序员的人生
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java Concurrency in Practice
Brian Goetz、Tim Peierls、Joshua Bloch、Joseph Bowbeer、David Holmes、Doug Lea / Addison-Wesley Professional / 2006-5-19 / USD 59.99
This book covers: Basic concepts of concurrency and thread safety Techniques for building and composing thread-safe classes Using the concurrency building blocks in java.util.concurrent Pe......一起来看看 《Java Concurrency in Practice》 这本书的介绍吧!