分布式系统-----单机存储系统

来源:互联网 发布:植物名称查询软件 编辑:程序博客网 时间:2024/04/28 15:01

随着互联网用户量的增多,大用户数据,大数据流量已经远远超过单机服务器的处理能力,虽然摩尔定律给出在价格不变的情况下,硬件性能每隔18个月,性能都会提高提升1倍,即便如此,横向扩展比纵向扩展成本要低得多,分布式系统由此而产生。

最近一直在研究分布式系统,其中涉及很多知识点,结合自己的工作经验,写几篇博客,一来记录一下,二来和众多位网友一起分享一下,如果哪位有缘人读到这篇文章,但凡发现不对的地方,尽可指正,大家一起学习讨论。ok,废话不多说,下面开始。


硬件性能指标

内存访问:100ns

SATA磁盘寻道:10ms

SATA盘顺序读:100MB以上

服务器软件与硬件的交涉,无外乎cpu、内存、硬盘、网卡,这其中,cpu、内存、网卡相对性能都还好,最让人担心的就是磁盘读写,磁盘寻道是一个很大的开销10ms,所以当需要顺序读时,可以考虑用sata盘,对于随机读,并且性能要求高时,如db等,可以考虑用ssd盘或sas。


单机存储引擎

存储引擎相当于数据库的发动机

哈希存储引擎:key-value存储系统,如Bitcask,Bitcask是key value模型,append only,磁盘上记录的具体key value值,而在内存上进记录hash值,key value值位置(file id、pos、size),具体介绍可以参见:http://blog.nosqlfan.com/html/955.html

B-Tree存储引擎:关系型数据库,如mysql innoDB

LSM树存储引擎:如google bigtable、level DB,LSM(Log Structured Merge Tree),修改增量放到内存,达到一定大小限制后批量写入磁盘,读取时需要合并磁盘中历史数据和内存中最近修改操作。LSM优势在于规避磁盘随机写入问题,但读取时可能需要访问较多的磁盘文件,即写入效率高,读取效率一般。level db是google基于lsm算法实现的非常高效的k v数据库。


数据模型

数据模型相当于数据库的外壳

文件模型:类似于linux的文件系统

关系模型:这个是目前最成熟的模型,mysql oracle等等,但是随着应用在可扩展性、高并发以及性能上提出了愈来愈高的要求,大而全的关系型数据库有点力不从心,许多nosql数据库应运而生,键值模型,关系弱化的表格模型。关系型数据库有2个重要特性,索引和事务,索引减少扫描时的数据量提高读取性能,事务保证并发执行时的ACID特性(原子、一致、隔离、持久)

键值模型:大量的nosql数据库采用键值模型。


常用的nosql数据库

PostgreSQL(关系型)、Riak(键值型)、HBase(列型)、MongoDB(文档型)、CouchDB(文档型)、Noeo4j(图型)、Redis(键值型)。


CAP理论

Consistency(一致性):即数据一致性,简单的说,就是数据复制到了N台机器,如果有更新,要N机器的数据是一起更新的。
Availability(可用性):好的响应性能,此项意思主要就是速度。
Partition tolerance(分区容错性):这里是说好的分区方法,体现具体一点,简单地可理解为是节点的可扩展性。

定理:任何分布式系统只可同时满足二点,没法三者兼顾。
忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。




0 0
原创粉丝点击