每年的双十一,系统都会遇到性能挑战。应用层面的扩展性,我们已经做了很多工作,基本上都能够水平扩展,目前最大的压力还是oracle数据库。这就是一个单点。因此,为了让数据库层面也能够水平扩展,我们准备采用分布式数据库引擎。3月底,我和另一名架构师组成了一个两个人小团队,开始立项。
开源的分布式数据库引擎有:cobar, mycat, Atlas, Kingshard, sharding-jdbc.考虑到架构组资源情况,我们觉得采用一个相对成熟,社区活跃的产品比较适合我们。最终我们选择了当当网开源的sharding-jdbc.
选型完之后,从做方案到改造上线,我们总共花了1个月左右时间,从改造之前的单次查询时间需要10s左右,降低到单次查询只需1s,我们觉得还是蛮有成就感的。接下来,我把改造的思路与大家分享一下。
1. 首先我们的业务系统都是运行在oracle上的,目前比较成熟的分库分表方案都是运行在mysql上。因此,我们需要将oracle的数据同步到mysql上,这样做带来的额外好处就是实现了读写分离。整个过程是这样的,用户写数据到oracle主库中,我们用cdc抽取并同步到mysql上。为了不影响主库性能,我们通过ogg将数据同步到备库,在备库上采用cdc抽取数据到rocketMq中,再从rocketMq抽取数据到mysql中。增加rocketMq是为了解耦,同时,也防止因为处理程序的故障,导致cdc数据未被执行就丢弃或重复执行。将数据从mq获取到mysql入库的过程,因为使用了多线程(PushConsumer),需要做幂等处理,保证所有数据可重执,同时严格保证数据处理的顺序。由于项目时间要求,目前上线的版本我们只做了一个进程的多线程,基本已经满足目前的性能要求,但是可靠性还存在问题。下一步我们将通过zookeeper做分布式的线程同步,保证分布式的幂等处理。
2. 在插入mysql和外网查询的功能中,我们使用了sharding-jdbc.不好处理的是,sharding-jdbc不支持小表广播。在插入的时候能够插入到指定库的指定表中,但是查询的时候又会从不同的库中查询。(不知是bug, 还是我们的配置不正确,还是为了不进行跨库join的有意优化),反正小表我们得自己同步。我们采用了阿里的otter.
3.到了正式上线,就涉及到数据迁移。当时打算自己做一个,后来发现阿里的yugong刚好满足我们需要,而且性能还挺好。
4.在整个过程中,为了更加方便的调试,我们还采用extjs做了一个针对mq的消息查询工具.另外,一开始为了性能,我们在获取cdc数据的时候,也采用了多线程调度,用的是当当的elastic-job.但是不知什么原因,采用这个分布式调度和cdc结合之后,老丢失据,我们估计是这个job我们配的不对,导致cdc的位移错乱,改成单线程就没问题了。幸亏性能瓶颈也不在这个地方,单线程也能满足我们的需求。
最后感谢阿里和当当,奉献了这么多好工具。我们的实施成功,完全是站在巨人的肩膀上。
分享到:
相关推荐
是本人在备战春招及这几年学习的知识沉淀,这里面有很多都是自己的原创文章,同时,也有很多是本在备战春招的过程中觉得对面试特别有帮助的文章, 不一定可以帮助你进入到 BAT 等大厂,但是,如果你认真研究,仔细...
【标题】:“[浪曦][原创]WebService在.NET中的实战应用三” 【描述】:本教程深入探讨了WebService在.NET框架下的实际应用,通过具体的案例分析,旨在提升开发者们的编程技能,尤其是对于WebService的运用技巧。 ...
数据库安全方面,书中的实战指南将指导读者学习如何对数据库系统进行安全分析,识别潜在的SQL注入、跨站脚本攻击(XSS)、不安全的对象引用和其他常见的数据库漏洞。通过实际案例分析,读者能够掌握相应的防御策略,...
是本人在准备战春招及这几年学习的知识沉淀,这里面有很多都是自己的原创文章,同时,也有很多是本在备战春招的过程中觉得对面试特别有帮助的文章, 不一定可以帮助您进入到BAT等大厂,但是,如果您认真研究,仔细...
【标题】"浪曦][原创]WebService在.NET中的实战应用四"主要聚焦于.NET平台下使用WebService进行实际项目开发的技巧和实践经验。WebService是一种基于HTTP协议的,能够跨平台、跨语言交换数据的服务,它利用XML...
【Java面试+Java后端技术学习指南】:一份通向理想互联网公司的面试指南,包括 Java,技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计、分布式、数据库(MySQL、Redis)、Java 项目实战等 ...
J2EE(Java 2 Platform, Enterprise Edition)是企业级的Java开发平台,用于构建分布式、多层架构的应用程序。在这个项目中,商品展示是核心业务模块,可能涉及数据库操作、Servlet、JSP、JavaBean等技术,以及可能...
HBase则是一个非关系型、分布式、可扩展的数据库系统,能够处理海量的稀疏数据集。Spark是一个开源的集群计算系统,提供了一个快速且通用的数据处理平台。 在云计算技术中,结构化数据指的是可以很容易地以行和列的...
该系统的核心功能是通过比对大量的文献数据库,查找相似度高的文本片段,帮助教师评估论文的原创性。 在ASP.NET框架下,开发人员可以利用C#或VB.NET语言编写后端逻辑,并结合HTML、CSS和JavaScript进行前端界面设计...
本文是一份关于Java面试的全面复习资料,涵盖了2018年Java面试中常见的知识点。接下来,我将详细解析文档中提到的各个...这本复习资料强调原创性,鼓励读者发现错误时可以贡献修改,同时也开放了非商业性的使用授权。
"J2EE"标签则直接指向了Java企业版平台,这是一个用于构建可扩展、高性能、分布式应用程序的标准,包括Servlet、JSP、EJB(Enterprise JavaBeans)、JMS(Java消息服务)等组件。 【压缩包子文件的文件名称列表】...
【淘书网】是一个以电子商务为主题的原创网站设计项目,由一名学生的毕业设计演变而来,并经过了改良和优化。这个项目的代码质量高,编程规范,因此非常适合那些希望学习和理解电子商务网站构建的人士进行研究和实践...
Hive 是一个基于 Hadoop 的数据仓库工具,它使得数据分析师能够使用 SQL 类似的查询语言(HiveQL 或 HQL)来查询、管理和处理存储在 Hadoop 分布式文件系统(HDFS)中的大规模数据。Hive 的核心功能是将 SQL 查询...
10. **实战应用**:书中会通过实例来演示如何在实际项目中运用这些概念和技术,从简单的Hello World程序到复杂的分布式系统,帮助读者将理论知识转化为实践能力。 综上所述,《Spring解密》的第19章可能涵盖了...
内部学习资源常常是个人或团队为了提升技能、解决问题而积累的宝贵资料,它们可能是从网络上搜集而来,也可能是原创内容。 “ds-crawler”这个压缩包子文件的文件名称暗示了它可能与数据科学(Data Science)和网络...
JavaWeb是一种广泛应用于开发web应用程序的技术,它结合了Java语言的强大功能和Web的分布式特性,使得开发者能构建动态、交互式的网站。 在论文中,作者可能详细介绍了以下知识点: 1. **JavaWeb基础**:JavaWeb...
《Java编程基础与实战》 在Java编程领域,"chapter1.zip"可能是一个包含初步学习材料的压缩包,由原创作者田超凡创作并享有版权。这个压缩包可能包括了第一章的学习资料,旨在帮助初学者建立Java编程的基础。在本文...
- **内容质量**: 创建高质量、有价值且与关键词相关的原创内容。 - **网站架构**: 确保网站易于导航,结构清晰。 - **外部链接**: 获取来自权威网站的链接可以显著提高网站的可信度。 - **内部链接**: 合理利用内部...