【摘要】随着云计算的出现,出现了很多新的名词,像弹性扩容、平缓迁移、资源隔离等。目前我就“共享型数据库”做一下解释,下面就以京东云擎的云数据库为例,给大家剖析什么叫“共享性数据库”。

这个是我第一篇帖子,我首先自我介绍一下,我从事IT行业10年,在多年以前是一名架构师,现在在一家互联网企业做产品经理,下面的文字仅仅是个人与行业一些从业人员交流得到的心得以及总结,有不妥之处请见谅。

“共享型数据库”是对比“独享性数据库”的一种针对用户资源所有权的数据库称谓,它是伴随着云计算出来之后的一种数据库创新,是节约资源的体现。京东云擎的云数据库是一种共享性数据库,而自己的机房里服务器里安装的数据库属于独享性数据库。很多人不明白共享性数据库的特点,那么我接下来就简单介绍一下。

在介绍共享性数据库之前先来分析一下什么叫独享性数据库。 “独享性数据库”,顾名思议,“独享”就是自己的数据库,在云计算出来之前,我们用的都应该叫做独享性数据库,就比如我们有一块儿地(类似于一个Schema),自己在这块儿地上修一栋房子(类似于我们创建了一个数据库),然后我们在这栋房子里任意使用房间或者装修房间(类似于我们可以创建Table一样)。

“共享型数据库”是为降低开发者成本而生的,很多人在一起共同使用这栋楼房,但是这栋楼房不是你的,是属于雇主的资产,意思就是大家在一起使用一个数据库,你有创建表的权限、修改表的权限,但是没有创建数据库或者修改数据库的权限,因为这栋楼是大家的,不是你一个人的,而你,只是一个租户。我们在云计算中把这类用户叫做租户。

“共享性数据库”的租户的房子比较便宜,甚至免费,是按需收费的。因为你的房间平时是用来存东西的,就类似于你的数据库表是用来存数据的一样,如果放在以前你使用独享性数据库,你自己买了一个云数据库,是一次性投入,好比你花费了一辈子的积蓄来买了一栋房子,但是你真的需要那么房间来存你的东西或者粮食吗?也许你自己都不知道你有多少个东西。共享性数据库的诞生解决了这个问题,一般的情况是你存多少东西,房东就收你多少的费用,这就叫按需付费。这样的平台有很多,比如百度的BAE、新浪的SAE、京东的JAE,目前BAE是按需收费,SAE是达到1G吧,就开始计费,具体不知道(很久没有开发了);京东的JAE是25G以内免费,超过25G不知道情况。

说一下京东云擎的云数据库特点,因为他们的一个架构师以前是我的徒弟,所以还是比较清楚的。京东的数据库分为独享性和共享性两种,但是在云擎里使用的是共享性数据库,因为云擎是一个PaaS平台,说到PaaS平台可能又要说一天一夜了,我这里不说了,大家去百度或者Google吧。我只说一句,PaaS平台的特点就是节约资源,按需分配,按照我们之前的分析,所以云擎使用了共享性数据库。下面就简单介绍一下其特点吧:

  1. 租户隔离。多个租户共享同一数据库实例必然需要一个有效的隔离方案,防止一个用户的慢查询请求或恶意请求影响其他用户访问。这里的隔离实现方式是通过JProxy层对用户所有的访问进行了拦截,并根据用户访问的数据表索引信息等,对用户执行该请求所需资源进行预判,并拦截掉恶意的请求及影响其他用户的请求。同时为了精确控制每个用户的资源使用,整个系统针对用户使用的连接数、内存占用容量、磁盘空间使用情况、带宽流量等都做了有效的记录和监控,并根据用户的配额进行控制。

  2. 集群路由信息高一致性保障。整体集群采用经典的弱中心化集群结构,在满足集群高性能的基础上同时具备足够的可控性,JManager管理整个集群路由信息,并通过多个Slave避免单点故障,当路由变更时,JManager首先同步路由变更信息给自己的Slave,然后才会同步所有的JProxy,避免路由变更时JManager挂掉导致路由不一致。

  3. 高可用保障。整体集群所有节点无单点,用户的数据库会通过Zookeeper做主从的高可用,如果用户主库挂掉,会自动切换至从库,并重新绑定floating ip到从库,不会影响对用户的服务。(floating ip知道什么意思吗?想做架构师的朋友可以搜一下,这里不做赘述。)

  4. 用户数据库无缝升级扩容。当用户的数据库数据增长超过指定配额时,用户可以选择升级数据库,系统会自动根据资源池使用情况将用户数据库迁移到比较空闲的实例上,迁移过程中并不会影响用户的服务。通过定时自动为用户数据库做快照的方式,结合数据库binlog同步工具,来帮助用户实现增量备份,迁移的工作也是依赖于以上这些工具完成的。

  5. 共享型数据库基于安全方面考虑,通过jproxy对有潜在安全风险的数据库操作语法进行了限制,如不能使用Create database,刚才提到了这栋房子除了你在用,别人也在用,你只有这几个或者几十个房间而已,你只能在这几个或者几十个房间里瞎搞,不能去别人的房间胡来!

    大概画一个图给大家:

    enter image description here

今天就说这么多了,大家有兴趣自己去看看吧。

云擎的云数据库网址是:http://jae.jd.com,感兴趣的可以看看。