分布式存储系统从整体架构的角度看大同小异,实现起来却困难重重。自主研发的 分布式存储系统往往需要两到三年才能逐步成熟起来,其中的难点在于如何把系统做稳定。系统开发过程中涉及架构设计、关键算法实现、质量控制、团队成员成长、线上运维、应用合作等,任何一个环节出现问题都可能导致整个项目失败。
本文章介绍通用分布式存储系统发展路径。
通用分布式存储系统不是设计出来的,而是随着应用需求不断发展起来的。它来源于具体业务,又具有一定的通用性,能够解决一大类问题。通用分布式存储平台的优势 在于规模效应,等到平台的规模超过某个平衡点时,成本优势将会显现。
通用分布式存储平台主要有两种成长模式:
- 公司高层制定战略大力发展通用平台。这种模式前期发展会比较顺利,但是往往会因为离业务太远而在中期暴露大量平台本身的问题。
- 来源于具体业务并将业务需求通用化。这种模式会面临更大的技术挑战,但是团队成员反而能够在这个过程中得到更多的锻炼。
第2种发展模式相对更加曲折,大致需要经历如下几个阶段。
起步:解决特定问题
在起步阶段,需要解决业务提出的特殊需求,这些特殊需求是以前的系统无法解决或者解决得不太好的。例如,OceanBase 系统起步时需要解决淘宝收藏夹业务提出的两张大表左连接问题。起步期的挑战主要在于技术挑战,团队成员能够在这个阶段获得较大的技术成长。
求生存:应用为王
为了证明平台的通用性,需要接入大量的业务。如果没有公司战略支持,这个阶段将面临“鸡生蛋还是蛋生鸡”的问题,没有业务就无法完善平台,平台不完善就无法吸引更多业务接入。在这个阶段,优先级***的事情是接入合适的应用并把应用服务好,形成良好的口碑。求生存阶段还将面临一个来自团队内部的挑战,团队成员缺乏起步期的新鲜感,部分成员工作热情会有所降低。这个阶段需要明确团队的愿景,耐住寂寞,重视每个细节。
平台化:提升易用性、可运维性
当应用数量积累到一定程度后,就需要花大力气提升易用性和可运维性了。易用性的关键在于采用标准的使用接口,兼容应用以前的使用方式,从而降低学习成本和应用改造成本,提升可运维性要求将系统内部更多状态暴露给运维人员并开发方便的部署、监控、运维工具。
成熟期:持续不断地优化
分布式存储系统步入成熟期后,应用推广将会比较顺利。开发团队在这个阶段做的多情主要是持续不断地优化系统,并根据应用的需求补充一些功能支持。随着平合规模不断增长以及优化工作不断深入,平台的规模效应将显现,平台取得成功。
通用存储平台发展过程中困难重重,要求团队成员有强烈的信念和长远的理想,能够耐得住寂寞。另外,系统发展过程中需要保持对技术细节的关注,每个实现细节问题都可能导致用户抱怨,甚至引起线上故障。
从公司的角度看,是否发展通用分布式存储平台取决于公司的规模。对于小型互联网公司(员工数小于100人),那么,应该更多地选择广泛使用的存储技术,例如MySQL开源关系数据库;对于中型互联网公司(员工数在100到1000人之间)。那么,可以组合使用各种SQL或NoSQL存储技术,改进开源产品或者基于开源产品做二次开发,例如基于MySQL数据库做二次开发,实现7.1节中的MySQL Sharding架构;对于大型互联网公司(员工数超过1000人),那么,往往需要自主研发核心存储技术,包括分布式架构、存储引掌等。通用分布式存储系统研发周期很长,系统架构需要经过多次选代,团队成员也需要通过研发过程来获得成长,因此,这种事情要么不做,要做就务必坚持到底。