几条原则谈谈存储系统开发

简介:

国内存储界现在是百花齐放,非常热闹。软件定义存储,云存储,超融合等各种创新企业也在各自领域快速的发展。关于各方面的概念解释和技术分析很多,但是我感觉关于存储系统的开发方面,实践性的文章非常少。我就据自己多年的存储开发经验,写几条原则,希望能抛砖引玉,让各位开发人员和架构师能进行更广泛的讨论。

1. 重视元数据的冗余安全。很多人说存储的稳定性是第一位的,其实任何人为的系统都是有可能出错的,存储的数据安全性才是第一位的。出错不可避免,宕机不可避免,任何软件都是有bug的,但是一定要避免出错后数据丢失,特别是元数据丢失,要把这个概率降到最低最低。所以,设计元数据方案就像造飞机一样,要有2套以上的独立冗余方案。这个是架构师第一个要考虑的问题。

2. 产品有定位,功能有取舍,要简单突出。存储的稳定性非常关键,复杂的东西很难稳定,除非不计成本。所以,我们首先要清楚产品的定位和市场应用,针对这个定位和市场应用来设计开发,其他的辅助功能一定建立在这个基础之上。如果一个产品开始设计的时候就考虑到了很多功能都要做到最好,那么很有可能主要的架构设计复杂,影响稳定性,最后影响最主要的功能点。所以,研发要对产品部门和销售部门的要求有取舍,并且一定要坚持,这个在设计中非常关键。

3. 抽象,抽象,再抽象。其实这个和上一条的简单原则有关系,抽象了,那么架构就会非常简单。模块之间的耦合度就低,这个其实是软件开发的共性。存储软件的基础架构其实是和协议,和OS,和硬件驱动都是无关的。如果相关了,那么这个架构一定出了问题。

4. 数据驱动,不是功能驱动。这个可以参考linux内核设计,内核负责功能机制,但是用户态负责数据驱动来做出各种应用。应用一定是和数据相关而不是和功能相关的,功能是非常共性的东西,由上层的数据来决定了具体的应用。

5. 我们能碰到的所有的问题都是别人解决过的问题,碰到架构或者其他方面的问题参考现有的linux内核架构,block/scsi中间层,各种协议,看看他们是如何解决的,参考这些业界标准基本不会出错。发明创造是科学家的工作,不是工程师的工作。

6. Debug系统做好了,产品就不会做不好。这个是软件开发的共性,不用多费笔墨。只是存储开发有两个问题debug起来非常难,一个是一致性问题,一个是性能问题。由于它的难度和全局影响性,这两个debug系统最好要由系统架构师亲自设计甚至编写。

7. 适当打补丁,但是最后要勇于承认架构有问题,要勇于重新来过,长痛不如短痛。真正稳定的软件是不会一版成功的。

【编者按】

向程序员致敬!

作者介绍:江松,Storwind创始人,具有超过16年的国内外企业级存储系统研发经验。Storwind专注于软件定义存储,相继研发和发布了LeadIO SSD缓存加速软件,IPSAN/NAS软件,商业级软RAID, 对象存储和云存储网关Cloudstation,获得了众多合作伙伴和客户的高度认可。


本文作者:江松

来源:51CTO

相关文章
|
开发工具
Python----使用schedule模块可以非常简单地设置定时任务
Python----使用schedule模块可以非常简单地设置定时任务
2338 0
|
XML 数据格式
美团抢单辅助器app,美团众包抢单辅助脚本,骑手自动抢高价单插件
这是一段关于美团骑手抢单辅助脚本的介绍。使用该脚本可设置最高与最低价格、延迟时间等参数,通过自动化检测和抢单功能帮助骑手提高收入。
|
Android开发
【Android 插件化】VirtualApp 安装并启动资源中自带的 APK 插件 ( 添加依赖库 | 准备插件 APK | 启动插件引擎 | 拷贝 APK 插件 | 安装插件 | 启动插件 )(二)
【Android 插件化】VirtualApp 安装并启动资源中自带的 APK 插件 ( 添加依赖库 | 准备插件 APK | 启动插件引擎 | 拷贝 APK 插件 | 安装插件 | 启动插件 )(二)
936 0
【Android 插件化】VirtualApp 安装并启动资源中自带的 APK 插件 ( 添加依赖库 | 准备插件 APK | 启动插件引擎 | 拷贝 APK 插件 | 安装插件 | 启动插件 )(二)
|
存储 NoSQL 算法
理解JWT的使用场景和优劣
理解JWT的使用场景和优劣
1814 0
|
JavaScript 前端开发 异构计算
大屏适配方案汇总
大屏适配方案汇总
大屏适配方案汇总
|
存储 SQL 调度
Flink 执行引擎:流批一体的融合之路
本文由 Apache Flink Committer 马国维分享,主要介绍 Flink 作为大数据计算引擎的流批一体融合之路。
Flink 执行引擎:流批一体的融合之路
|
前端开发 数据可视化 JavaScript
可视化大屏的几种屏幕适配方案,总有一种是你需要的
假设我们正在开发一个可视化拖拽的搭建平台,可以拖拽生成工作台或可视化大屏,或者直接就是开发一个大屏,首先必须要考虑的一个问题就是页面如何适应屏幕,因为我们在搭建或开发时一般都会基于一个固定的宽高,但是实际的屏幕可能大小不一,接下来我们就尝试几种简单且常见的方案,并简单分析一下利弊。
1228 0
|
物联网 5G 测试技术
Numerology | 带你读《5G 空口设计与实践进阶 》之十六
为了支持多种多样的部署场景,适应从低于 1 GHz 到毫米波的频谱范围,NR 引入了灵活可变的 OFDM Numerology。Numerology 是 OFDM 系统的基础参数集合,包含子载波间隔、循环前缀、TTI 长度和系统带宽等。
Numerology | 带你读《5G 空口设计与实践进阶 》之十六
|
Linux 网络安全 开发者
windTerm | 下一代SSH客户端
windTerm | 下一代SSH客户端
2712 0
|
消息中间件 Kafka
Kafka发送消息时提示请求数据过大是怎么回事?
今天有个小伙伴跟我反馈,在 Kafka 客户端他明明设置了 batch.size 参数,以提高 producer 的吞吐量,但他发现报了如下错误
1065 0
Kafka发送消息时提示请求数据过大是怎么回事?