11.4.5 使用与运维

稳定性和性能并不是分布式存储系统的全部,一个好的系统还必须具备较好的可用性和可运维性。

1.吃自己的狗粮

开发人员和运维人员往往属于不同的团队,这就会使得运维人员的需求总是被开发人员排成较低的优先级甚至忽略。一种比较有效的方式是让开发人员轮流运维自己开发的系统,定期总结运维过程中的问题,这样,运维相关的需求能够更快地得到解决。

2.标准客户端

标准客户端的好处在于客户端版本升级不至于太过频繁。通用系统的上游应用往往会很多,推动应用升级到某个客户端版本是非常困难的。如果客户端频繁修改,最后的结果往往是不同的应用使用了不同的客户端版本,以至于服务器端程序需要考虑和很多不同版本客户端之间的兼容性问题。例如,OceanBase的客户端初期采用专有API接口,两年之内线上客户端的版本数达到数十个之多。后来我们将客户端和服务端之间的协议升级为标准MySQL访问协议,客户端的底层采用标准的MySQL驱动程序,从而解决了客户端版本混乱的问题。

3.线上版本管理

存储系统发展过程中会产生很多版本,有的版本之间变化较大,有的版本之间变化较小。如果线上维护太多不同版本,那么,每个Bug的修复代码都需要应用到多个版本,维护代价很高。推荐的方式是保证版本之间的兼容性,定期将线上的低版本升级到高版本。

4.自动化运维

在系统设计时,就需要考虑到自动化运维,如主备之间采用强同步从而实现故障自动切换;又如,在系统内部实现自动下线一批机器的功能,确保下线过程中每个子表至少有一个副本在提供服务。另外,可以开发常用的运维工具,如一键部署、集群自动升级等。