业务背景今天给大家分享一下我们公司多业务团队设计的数据中心架构,他是如何一步步从多业务团队数据status从分析开始,然后逐渐演变为设计数据中心架构,希望能帮助大家对流行的数据中心概念建立一个系统的认识。首先给大家说说在没有数据中心的情况下,公司里的业务团队是什么样子的。简单来说,不同的业务团队开发了自己的业务系统,有自己独立的数据存储。您自己的系统访问您自己的数据就足够了。如下图1所示:图1没有介绍多业务数据中心的痛点,但是随着你的系统逐渐演进,需求越来越复杂,逐渐出现各个系统需要访问其他系统数据的情况。这时候就会出现你的每一个系统都必须开放一些数据接口,这样其他系统才能调用你的接口来访问你的数据,你也可能需要访问别人的接口来获取别人的数据。如下图2所示:图2看到上图你有什么感受?你觉得很迷茫吗?因为实际上随着系统的慢慢演化,A系统开放的接口可能被B系统和C系统调用,B系统开放的接口被A系统和C系统调用,C系统开放的接口被系统调用A和B。这时候会出现很尴尬的一幕,就是一片混乱,是的,我敢打赌,如果你盯着上图看10秒,你应该还是很迷茫,毫无头绪。没错,所以这其实是最大的痛点。每个业务系统其实就是一个数据孤岛,就是每个人只能访问自己的数据,然后其他人必须通过你的接口访问你的数据。最终导致n个业务系统之间的调用关系错综复杂,进而导致系统维护性差,运维困难。数据中心架构设计思路所以这个问题,我们为多业务团队设计了一个数据中心。这个数据中心的架构设计思路是监控各个业务系统中数据存储的变化。比如可以为MySQL数据库部署Canal,监控其数据变化,然后将各业务系统的数据拉入数据中心统一存储。如下图3所示:从图3可以看出,数据中心可以提供两种数据访问方式,一种是主动查询接口,另一种是被动监听MQ通知。也就是说对于数据中心来说,你的每一个业务系统都可以调用数据中心的接口直接获取你想要的其他业务系统的数据,数据中心也会将每一个业务数据的变化通知发送给MQ。大家也可以订阅自己感兴趣的业务数据变更通知。如下图4所示:图4大家看到上面的架构设计图是不是觉得世界一下子干净了?没错,其实在互联网公司中,对于错综复杂的相互调用接口访问对方数据的多业务系统,往往会抽取一个统一的公共数据中心,让各个业务系统共享数据,这样可以大大提高我们系统整体架构的清洁度。数据中心的数据存储架构设计再给大家说说数据中心架构设计的另一个重点,就是它的数据存储架构设计。大家可以想一想,虽然我们各个业务系统的数据存储基本都是基于MySQL的,但是我们数据中心的存储架构其实和业务系统的需求是不一样的,因为业务系统一般都需要用到MySQL的事务机制实现了复杂的业务逻辑。但是对于我们的数据中心来说,本质只是同步数据而已,后续的重点就是对外提供查询。这就是功能定位的不同。另一个区别是数据量级的不同。因为我们的数据中心存储了所有业务系统的全量数据,这可能导致每个业务系统的数据量级可能都在百万级别。到亿级别,我们数据中心的数据量可能是上百亿,这是一个很大的特点。如下图5所示:图5所以最终我们的数据中心存储架构采用HBase+Elasticsearch作为核心架构。也就是说,基于HBase,将数据以kv格式分布存储在多台服务器上。写的时候是kv格式,读的时候也是kv格式。key是数据的主键id,value是完整的一行数据。同时,针对每个查询接口的查询条件,将要查询的字段值写入ES中,构建查询索引,让查询接口先根据中的索引查找数据主键idES,然后根据数据主键id查询HBase中完整的数据一行数据。如下图6所示:图6接下来给大家讲讲这种架构下的一些技术难点和问题:一个是如何保证Hbase和ES的一致性,即如果写入Hbase成功,作为一个结果,写ES失败,这时候怎么办?其实这时候应该设计一个补偿机制,就是当写Hbase成功的时候,但是写ES失败的时候,需要给MQ发送一个补偿消息。然后下次再做一次写,达到最终一致性的效果。如下图7所示:图7另一个关键的生产架构经验是多业务资源的隔离,即限制每个业务方对数据中心接口的访问量。否则可能会出现问题,就是由于自身业务暴增或者业务BUG,读取数据办公中心的接口瞬间高并发访问,立马占满了读取数据办公中心的请求处理线程数据中心。那么就无法处理来自其他业务系统的查询请求。如下图8所示:图8所以往往在这种情况下,我们必须在数据中心设计一个多服务的资源隔离机制,也就是说各个业务系统在访问接口的时候,最多的就是使用数据center线程中的一部分线程资源超过这个阈值,就会限流,不允许业务方过度访问。如下图9所示:图9数据中心的离线数据备份与恢复机制接下来我们还有一个重要的架构设计。数据中心现在对于数据存储来说极其重要,因为所有的业务系统数据都会存储在数据中心。聚合存储在中心进行,然后各个业务系统都会强烈依赖数据中心提供的所有数据。因此,如果数据中心出现数据存储故障甚至数据丢失的问题,将会造成很大的麻烦,所以我们设计了离线数据备份和恢复机制。即基于大数据技术,所有数据定时同步到Hadoop集群。如果Hbase或ES集群发生崩溃或数据丢失,可以根据Hadoop集群中的离线备份数据进行数据恢复。在某个时间点,继续对外提供服务。如下图10所示:图10是一个总结。今天给大家分享一个互联网公司多业务系统的数据中心架构设计。希望大家看完我们的架构设计思路,以后在公司遇到类似问题时,可以有一个整体的设计和解决思路。
