互联网系统,存储与计算是极其重要两个方面。无论是服务端mysql数据库、redis缓存以及计算应用框架spring、dubbo等,还是大数据hdfs、hbase以及mapreduce、spark等计算框架。都体现了存储计算是互联网应用系统两个核心方面。
存储三种类型基于hash数据结构比如redis以及小图片系统TFS,hash数据结构能够支持读写qps很高是做存储非常好数据结构,redis类存储结构缺点是成本高;以及基于B+树MySQL,MySQL类数据库支持完整sql语法使用方面,对于事务支持好,但B+树这种数据结构对于大量随机写,当数量大之后性能会变差;再有是基于LSM bigtable、hbase等,LSM将写入变随机为顺序写入,极大增加存储写入速度,基于LSM存储利用BoomFilter过滤器、table缓存等技术加快读取速度,但是读取qps依然会小于redis很多。
根据以上特点存储要根据实际业务需求结合使用,而不能了解一种就抓住一种不放,认为找到银弹。业务特点最近的数据写多,读少要缓存在内存,历史数据写少读少存储在磁盘。
分布式存储设计不仅要考虑一致性、可用性、分区容忍性,还要在设计实现时就要考虑整体架构可运维性,以及可监控性,这样能够方便集群管理成本,方便集群进行各种各样操作。
1、故障发现快,并且能够进行多节点恢复。设计监控能够快速发现故障节点,并且能沟通过扩容服务,将故障节点快速将数据复制,并将节点上到集群。
2、独立分区,将容器独立一块区域,避免一个存储集群服务过载影响其他集群。从而影响线上多个业务。
3、跨机房热备,通过数据同步服务一般基于Raft协议,将数据同步到同城机房或者异地机房进行灾备,灾备机房也可直接提供读服务。
4、持久化,redis类缓存能够通过快照或者append方式将数据持久化。基于磁盘类型天然支持持久化。
5、读策略,多种读策略。支持根据配置读取相应机房,可以实现同机房服务优先读取同机房存储,以及随机主从读取等多种策略,根据业务需求进行灵活配置。
6、自动化运维,通过扩容服务管理备用资源池,当线上存储节点存在问题,则通过扩容服务获取备用资源池节点,拷贝数据以及设置节点到集群,并将信息注册到Meta信息,完成故障节点处理。
7、复制,实现基于主从复制,能够实现基于最终一致性的主从复制。并且能够监控所有分片主从同步情况以及主从连接情况,主从断开后能够进行报警以便运维人员能够及时处理。
8、监控,对于节点分片ops量、读写量监控以及配置报警阀值,对于集群整体磁盘内存使用量进行监控,当磁盘或内存超过设置阀值比如75%时进行报警,以便进行扩容操作。对于慢查询进行监控,并进行持久化存储以支持后续分析。对于连接数监控,存储所在物理机连接数是重要资源,连接数过多会导致有客户端取不到连接从而导致取不到数据,连接数也要进行严格监控。
9、流控,对于存储服务也要提供过载保护机制,避免读写流量过大,影响集群稳定性,当超过集群请求后,返回异常信息给客户端,避免存储服务过载。
10、其他,分布式存储支持多种数据结构,方便业务使用;对于基本数据类型int、char、string等数据存储格式支持;对于传统sql语句支持;对于分布式事务支持;分布式双写支持等等,是分布式系统不断演进以及研发方向。
存储是架构设计一部分,要根据实际架构需要来使用存储,你在实际中用过哪些存储?
两个架构相关优秀专栏,推荐订阅学习,均有返现
原文 https://mp.weixin.qq.com/s/41cFCRAGz5FDLVMa1Elb-A