可靠的 DBaaS 是如何实现的?
DBaaS介绍
Database as a Service也就是可交付的数据库服务,让所有人都可以轻易地创建、使用、扩容和销毁数据库实例。在 《State of the art technology, DBaaS》 已经介绍过DBaaS和Trove项目,如果你以为这只是数据库的科普文那就错了,借助开源项目和社区的努力,我们完全有能力理解和实现自己的DBaaS。那么第一个问题,可靠的DBaaS是如何实现的?
DBaaS必须提供多租户隔离
如果公司内部只有一个开发组,那么使用MySQL或Oracle数据库是没有问题的,但随着公司规模的扩大,越来越多的小组会参与到数据库的使 用,然后每个小组分配一个DBA进行升级、主从切换等重复劳动,而且多个用户间得手动维护安全隔离等问题。于是有人开始考虑使用DBaaS,因此提供多租 户隔离是DBaaS的基础。
如何实现多租户隔离?我们需要一个Identify service,一套符合公司内部的安全机制,我们知道IaaS中Keystone就是做这个的。无论是Nova、Glance还是将要提到的 Trove,都是借助Keystone的RESTful API来实现多租户间的隔离。开源项目Trove实现了数据库服务,开发者可以使用Trove客户端或者API来启、停、扩、备自己的数据库示例,也就是 说用户A不会看到用户B的数据库,当然他即使知道用户B的信息也无权访问。
DBaaS必须是高性能的
说到高性能,作为业界标准的MySQL在大量优化后基本能满足大家的性能要求,通过分库分表还能提高水平拓展的能力。DBaaS是对数据库实例的 封装,理论上会对单独的数据库实例造成一定性能损失,并且在提高数据库易用性的同时,也限制了数据库配置的灵活性。因此,DBaaS该如何保证高性能呢?
如果是计划内部实现DBaaS服务,建议参考Trove的做法。Trove默认提供的数据库镜像基于MySQL社区的标准配置文件,当然这不一定 是用户场景下最优的配置,而它提出了配置组的概念,创建数据库实例后,用户还可以修改配置组,然后Attach到相应的数据库中,为开发者提供了灵活的调 优空间。
除此之外,Trove为所有数据库包括MySQL、Redis、Cassandra等提供了统一的配置组接口,也就是说可以用同一个API修改不 同Backend的配置。这前提是Trove已经支持这些后端数据库的配置修改,目前我们也在努力支持Redis as a Service,具体实现将在后面的源码分析文章中与大家分享,感受其架构设计的优美。
DBaaS必须是免运维的
为什么很多客户希望有RDS或者DBaaS?因为这样可以极大减少他们的运维工作,将重心投入到具体业务中。目前AWS的RDS和阿里的云数据库都能做到用户免运维、自动配置、自动主从切换了,那么开源的DBaaS系统能否做到呢?
如果你考虑使用Trove项目,你可以感受到社区在这方面的努力。No ops,主要从两个方面来实现,第一是监控,基于Ceilometer项目我们可以轻易把数据导出到云平台,第二是报警,这依赖于基础平台提供的功能,并 且基于监控来实现。有了监控和报警,我们可以轻松掌握当前数据库的状态,而且云平台还提供了定制备份、自动创建主从集群等功能,无论是大中小企业都非常需 要这样可靠的DBaaS。
讲了这么多,可靠的DBaaS究竟要如何实现呢?目前从开源社区反馈Trove是一个非常有前景的项目,并且得到了OpenStack的大力支 持,基于Trove的数据库服务很快会成为业界的主流。不过对于OpenStack项目大家都有种难以入门的感觉,因此我们UnitedStack将推出 关于Trove的一系列教程,帮助用户搭建并且用好DBaaS和数据库。
我是tobe,UnitedStack存储工程师,IaaS社区贡献者,开源教程分享者。