这样的系统 该如何去重新架构

应用服务器:

一台服务器A tomcat6.35 部署生产系统D

一台服务器B tomcat6.35 部署运营系统Y

数据库服务器

一台服务器C 部署了oracle实体和mysql实体分别对应 生产系统和运营系统

以上服务器均在一个局域网内。

主要过程:

1.生产系统D 白天因为要收集生产数据,会有很高的写,具体并发数没测试过

2.现在每天18点 ,生产系统会抽一批数据利用shell脚本传递给B,然后系统B解析入库,然后经过mysql简单的存储过程处理

3.每天凌晨1点,生产系统D会将全部的生产数据从oracle中抽成txt文件,上传FTP,运营系统会从FTP上获取txt,然后解析入库,最后mysql 会经过好几个复杂的存储过程经行预处理。 整个过程到早晨8点 会完成。

面临的问题:

1。 在现有业务环境下(一天数据量是15W),这些都满足,没有问题。唯一出问题,是当初因为生产工具出错,一天系统D收到160W的数据,造成数据库服务器cpu80%的负载,导致凌晨1点的抽数据一直抽到8点。

2.最近两个月业务大发展,现有的系统无法满足,但是分阶段,8月底--->9月底--->10月初,估计8月底 现有的这个架构(姑且称之为架构)在稍微处理下好可以满足,然后在9月底,会有一个100W左右的量,然后到10月初估计会到200W
(这里都是指一天)
所以3个主要过程都会崩溃。

暂时的想法:

1.在1过程中,在8月底考虑nginx加 tomcat负载均衡,然后数据进队列,提高并发,然后多线程的入库oracle。最后在9月份的时候 考虑分布式集群。

  1. 对于生产系统,将几项生产数据,昨天以前的历史数据归档,只保留当天的数据,加快查询速度。

3,对于现有数据库,先做读写分离,最后做集群。

但是现在的问题是,一个用的是oracle ,一个用的是mysql,oracle服务器面临的是大量的高并发的写。主要过程2 3抽数据在数据量大后效率很低。

所以 有这么几个方案:

1.生产系统从oracle 一步步转到mysql,然后做mysql的读写分离。

2.还是继续使用oracle+mysql,但是每天定时抽取数据的方式得做更改,比如,每隔一小时从oracle 吐到mysql,而且oracle转mysql 写一个简单的中间件(或者有什么成熟的工具),直接进行表与表之间的数据同步。

因为见识所限,所以请各位帮忙,看下,这样的系统该怎么去优化。

当然,钱是主要问题,如果跟 阿狸或者企鹅一样有钱,直接各种砸服务器堆硬件(有点 单反里的器材党的感觉),因为是小公司,所以考虑到新服务器不能一步到位的情况下,分阶段的该怎么走。。。

1、Oracle迁移到MySQL
建议Oracle一步步迁移到MySQL,否则后期数据量更大需要进一步优化架构的时候会更加痛苦,统一地使用MySQL以后架构优化起来就方便多了,比如生产库如果数据量很大,可以考虑分库分表。

2、库与库的数据同步
生产库和运营库之间的数据同步是最大的问题,如果生产库迁移到MySQL不管使用何种方案都会方便得多。
现在是每天晚上同步,如果白天没有太大性能瓶颈的话可以考虑下实时同步,这时可以考虑使用淘宝的TimeTunnel,当然也可以自己实现实时同步。
如果不考虑迁移到MySQL,那么也可以使用DataX实现异构数据源之间的同步。

有分库机制才行啊, 我们现在对接淘宝 要求一天5000W+的数据处理, 用的是tomcat + mysql的集群

根据业务将数据库纵向切分, 分为多个, A B C D E F...
每个只关心自己的数据读取, 其他的该怎么优化怎么优化, 服务器也是 使用nginx只能处理一个服务器极值的问题, 解决不了你写入的极值问题, 如果你访问量很大, 一个服务器不够 或者考虑服务器不能down机 可以考虑使用它.

你现在的瓶颈应该是数据分析上, 可以往分库想想.
对于已经处理完的数据, 可以做数据归档, 这样对大数据下也是很重要的, 不然只会越来越多的无关数据 影响性能。

以上意见仅供参考, 我们部署在阿里云上, 所以没有考虑数据库和服务器数量的限制. :D

个人觉得你现在 压力 主要还是几种在DB 端。先做读写分离,主从备份。这样能降低 单台DB压力。

假设:
1.DB服务器和应用服务器没有很大的硬件区别。
2.应用服务器在夜间没活干。

建议之一就是让两台夜间休息的应用服务器也一起来处理DB的活,
比如,踢掉Oracle,用三台机器做MySQL的集群。

150W的数据需要跑七八个小时,想来要么业务过于复杂,要么可优化空间很大。
建议之二就是优化下这部分吧。

100w的数据处理了将近8个小时,不知道你的业务很复杂还是服务器配置太差,我们之前做的积分系统处理100多万的交易数据差不多2个小时吧,linux系统,16g内存,好像是4核cpu,用的是oracle,我们是拿到交易数据然后一条数据一条数据做处理,根据规则算客户积分,业务也很复杂,几个存储过程有1000多行,刚开始也很慢跑10来个小时,后来我们做了存储过程并行处理,让他同时调起3个存储过程同时跑。现在cpu一般都是多核,而你跑存储过程没做处理的话都是单线程只用到一个cpu,严重浪费了多核的优势,可以先分析下你的程序是否能做到并行处理,并能根据cpu个数能灵活控制并发数量。

用kettle抽取数据如何?