气象数据中心实战项目
目录- 气象数据中心实战项目
项目介绍
项目依托气象行业数据(数据总量大,且每天新增数据量大),模拟气象数据中心
该项目从数据源采集数据后存储到多个数据库中;业务系统通过数据库集群的总线访问数据
数据源:卫星接收站、雷达系统、国家基本站、区域气象站
业务系统:预警发布系统、预报制作系统、公共服务平台、数据共享平台
数据采集->数据处理->数据入库(数据库集群)->数据服务总线
主要功能子系统为:
1.数据采集子系统
功能:把数据从数据源取出
三个模块:(1)ftp客户端,直接下载数据文件;(2)http客户端,采用http协议,从WEB服务接口数据;(3)直连数据库的数据源,从表中抽取数据
2.数据处理和加工子系统
功能:把各种格式的原始数据解码为xml格式的数据文件;对原始数据进行二次加工生成高可用的数据集。
3.数据入库子系统
功能:把数百种数据存储到数据中心的表中
4.数据同步子系统
MySQL的高可用方案只能解决部分问题,且不够灵活,效率不高(只能满足数据库之间的复制不能满足表之间的复制)。本项目把核心数据库(Slave)表中的数据按条件和数据增量两种方式同步到业务数据库中。
项目数据库主要分为两种Master和Slave。
业务数据库主要由业务的需求决定(历史库(量大效率低), 实时库(量小效率高), 预报库, 台风库(量小效率高), 接口库)
5.数据管理子系统
功能:清理历史数据;把历史数据备份和归档
6.数据交换子系统
功能:把数据中心的数据从表中导出来生成数据文件。采用ftp协议,把数据文件推送到对方的ftp服务器。基于tcp协议的快速传输文件子系统
7.数据服务总线子系统
功能:用C++开发WEB服务,为业务提供数据访问接口,使用数据库连接池、线程池效率极高
8.网络代理服务子系统
功能:用于运维,利用I/O复用技术(select/poll/epoll)
项目重点和难点:(1)服务程序的稳定性;(2)数据处理和服务的效率;(3)功能模块的通用性
开发环境
CentOS7.x MySQL5.7 字符集utf-8
项目框架
服务程序常驻后台
保持服务程序稳定性,用守护进程监控服务程序的运行状态,如果服务程序故障,调度进程会重启服务程序
服务程序的调度
利用linux信号和多进程
先执行fork函数,创建一个子进程,让子进程调用execl执行新的程序
新程序将替换子进程,不会影响父进程
在父进程中,可以调用wait函数等待新程序运行的结果,这样就可以实现调度的功能
守护进程的实现
利用linux共享内存和linux信号量
// 查看共享内存: ipcs -m 删除共享内存: ipcrm -m shmid
// 查看信号量: ipcs -s 删除信号量: ipcrm sem semid
信号量CSEM m_sem;
m_semid=semget(key,1,0666)
如果errno==2表示信号量不存在, 创建m_semid=semget(key,1,0666|IPC_CREAT|IPC_EXCL)
// 信号量创建成功后,还需要把它初始化成value。
union semun sem_union; sem_union.val = value; // 设置信号量的初始semctl(m_semid,0,SETVAL,sem_union)
// 加锁 CSEM:
标签:数据中心,int,数据库,线程,模块,pthread,进程,梳理,气象 From: https://www.cnblogs.com/Gal0721/p/17845044.html