当前位置: 首页 > 科技观察

后端应该如何一次显示你100,000条数据?面试官到底是为了什么考我?

时间:2023-03-13 18:00:39 科技观察

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