我是做JAVA后台开发的,目前为止最多处理过每天600万左右的数据!数据不算特别多,但是也算是经历过焦头烂额,下面浅谈下自己和团队怎么做的?
后台架构:
前置部门:负责接收别的公司推过来的数据,因为每天的数据量较大,且分布不均,使用十分钟推送一次报文的方式,使用batch框架进行数据落地,把落地成功的数据某个字段返回给调用端,让调用端验证是否已经全部落地成功的,保证数据的一致性!
核心处理:使用了springcloud作为微服务架构,使用feign进行客户端的负载均衡,使用分库分表的数据架构,分库分表数据库中间件为公司自己开发,通过字段no采用hash的方式分布到8个数据库,每个库128张表,为了数据不重复,满足幂等性,会使用redis进行加锁操作,因为redis是单线程处理,保证数据不会重复存储!
遇到的问题:
曾经在以前的公司做过IT,凡事跟电脑相关的都要做,也就是俗话说的IT民工吧。
当时公司里有一个数据库会接收到的测试数据大约为一个月100万条左右,然后要通过程序每五分钟左右抓取一下这个数据库。
说实话,当时压力蛮大的,因为程序涉及到生产不能停,频繁的读取这么多数量的数据库会导致程序很卡,一卡使用这个程序的人就会停下生产的,所以我在方面也研究了一些方法 注:当时使用的服务器为windows2008r2,数据库为sql 2008版本,程序为php语言编写。
从事程序员工作以来,历时三年,呆过两个公司,前一个公司处于传统国企制造型企业互联网化的进程中,后者处于互联网公司成熟发展期,作为新业务型的研发人员,或多或少都经历了一些数据量,在制造型企业处理过的最多量级的数据应该是用户的注册登录信息,在之后的互联网企业处理过最多量级的数据应该是浏览日志的实时统计监控。下面就简单说说这两个业务场景以及对应的处理方式和数据量级。
在传统的制造型企业,我们团队负责公司对外业务的统一注册和认证,所有对外应用、网站提供的注册、登录信息都需要调用我们团队的相关接口完全相关流程,注册的用户信息也以我们团队的用户数据为准,统一注册和认证服务上线运行近两年的时间里,至我离职时,注册用户200万,登录均耗时40ms,获取账户信息均耗时10ms。处理方式也简单,就是应用普遍采用的mysql+redis,账户相关的认证信息都普遍走分布式缓存,mysql是主从结构,redis采用集群模式+哨兵集群的处理方式。整个应用是最初的架构是spring mvc+dubbo的分布式架构,对外提供restful风格的接口服务,之后版本升级为spring boot+eureka+consul的微服务架构,对外兼容提供restful风格的接口之外,还提供基于Oauth2.0的第三方登录服务,包括QQ、微信、百度等第三方应用。数据处理的量级按照数据库来说应该是百万级,或许不太准备,对这个量级的概念理解不深,对这方面有深入研究的同学可以留言科普哈。
在现在的互联网企业,处理数据量级最多的应该是我目前所做的流量实时监控,今天才压测完,记忆还比较清晰,采用的处理方式是kafka+storm+redis,处理的量级是1.2亿/10分钟,启用了10台服务器+4核CPU+2G内存+64G磁盘部署的storm集群,64个线程跑storm拓扑,统计分析的结果保存在redis,通过其他方式进行实时展示。
我是在IT上班的,目前每天大概要处理2TB以上的数据,大概10多亿条,基本上使用Hadoop+Hive+Spark进行处理。
这些数据是从FTP下载的,采集协议和处理过程自己写,基本上每一条数据都会过一到两遍才入库。
看了大家的,好像处理数据都是程序员干的活,说说我吧,从事制造业,代工苹果手机,技术部门主管。每天上百K的产品检测数据,分布在不同的设备中,有一次需要重工一批物料(主要是看检测数据是否OK),如果全部再过一遍检测设备浪费的人力物力可不是一点点,想让IT部门开发数据库,结果光签单都得半个月(大公司流程繁琐你懂的),最后没办法自己动手写程序,自动采集机台数据,设定判断逻辑,让生产部门只需扫描产品即可判定挑选,总共用了不到半天。全程使用excel处理,数据大概有1000K吧
处理过的最大的数据量是:每天14亿条,是帮一个企业做大数据采集分析处理的,我们公司是专门做大数据的,是用的我们自主研发的服务器版本ForeSpider爬虫软件进行采集,开了多个进程进行采集,同时对采集到的数据进行挖掘分类处理。当然,除了爬虫还用到了我们自主研发的分类器,文本挖掘系统以及ForeLib数据库等。
ForeLib数据库是专门针对于大数据研发的,性能比MySQL高100倍,使用起来很顺手,数据量再大,也不会宕机,当时基本每天都得采集处理这么多数据,大概用了1个月的时间。
上阿里云odps,只要你有,我就敢算
聚合支付,每天4000多万交易流水,你猜多少条