南京POC项目总结-采用ActiveMQ进行项目实现
刚来时搞不清楚POC什么意思,查了下在这也普及下:Proof Of Conception,概念证明。
背景:
属于中途介入、二次分包项目,之前的分包商做出的东西性能上稍微有些弱,架构上有些不合理。
设计:
数据推送流程:总部->大区->城市,考虑到总部压力大,将压力分摊到大区来做,总部只做数据入库。与甲方探讨此设计时,直接被毙掉,理由是出于安全考虑,大区不能直接访问总部DB。无奈,只能将压力再次压到总部系统。[甲方对此项目的理解并不完全清晰,有些需求也很不确定]数据过滤,数据分发,结果反馈,数据入库全部压到总部系统,大区只成了一个向城市分发数据的过道,不做任务处理将数据分下去,谈不上任何压力,也谈不上存在的必要性。只是简单的降低了一些数据分发时积压量。同时,还需要一套监控程序,来监控数据包在各个阶段流转的情况以及各个SERVER的状态。
实现:
消息系统:IBM Websphere MQ,Apache ActiveMQ,监控:Apache MINA,代码框架:Spring+MyBatis,数据库:MYSQL
测试指标:
100W数据入库+消息分发+结果反馈+关键数据入库,2-3分钟【数据到大区不下发,直接返回总部】。
关键点:
1、消息组包后分发,单纯从分角度讲,组包分发与单条分发效率上区别不大,但后期包的反馈结果要入库,此时若是单条返回,效率可想而知,即便是多消费者、多线程操作,效率上不及按包回馈。
2、数据批量操作,100W单条入库,相当耗时,分包后可一次入库,比如可分成200/包,只需处理5000次即可完成100W;同时消息反馈时,也可以一次入库。
3、接收IMQ消息时,可以单消费者接收数据,前提是采用多线程,数量不会有太多积压在通道中。
4、采用多线程处理数据,效率上能提升不少,但会出现数据安全性方面问题,所以代码实现时,多考虑些线程安全的对象来使用,一些非线程安全的对象谨慎使用。eg:SimpleDateFormat使用时需要每次都new一个对象,而不是写一个常量只同使用,;对象存储时只能Hashtable,而不能使用HashMap。
5、接口要畅通,避免接口使用前要加工成规则数据才能使用,造成不必要的时间浪费。
6、架构设计上可以更近一步,将总部与大区合并,形成虚拟大区,配合总部完成数据下发。
7、充分利用MyBatis的动态SQL功能,批量操作数据库。
手机扫一扫,欢迎关注公众号

关注程序员成长
南京POC项目总结-采用ActiveMQ进行项目实现的更多相关文章
- Spring Boot学习笔记:传统maven项目与采用spring boot项目区别
项目结构区别 传统的maven构建的项目结构如下: 用maven构建的采用springboot项目结构如下: 二者结构一致,区别如下:传统项目如果需要打成war包,需要在WEB-INF目录结构配置we ...
- Java中数据库连接池原理机制的详细讲解以及项目连接数据库采用JDBC常用的几种连接方式
连接池的基本工作原理 1.基本概念及原理 由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理.我们知道,对于共享资源,有一个很著名的设计模式:资源池(Resource Pool).该模式 ...
- ActiveMQ服务器之间传输对象,项目A发送对象到项目B接收发送对象《二》
ActiveMQ服务器之间传输对象,项目A发送对象到项目B接收发送对象<一> 上一篇文章写到对象之间传输使用线程方式 ,无法使用监听方式,最近解决了使用监听方式接收对象,本次使用配置文件方 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-2.快速搭建SpringBoot项目,采用IDEA
笔记 2.快速搭建SpringBoot项目,采用IDEA 简介:使用SpringBoot start在线生成项目基本框架并导入到IDEA中 参考资料: IDEA使用文档 ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-1.快速搭建SpringBoot项目,采用Eclipse
笔记 1.快速搭建SpringBoot项目,采用Eclipse 简介:使用SpringBoot start在线生成项目基本框架并导入到eclipse中 1.站点地址:http://start. ...
- 在基于ABP框架的前端项目Vue&Element项目中采用电子签名的处理
在前面随笔介绍了<在基于ABP框架的前端项目Vue&Element项目中采用电子签章处理文件和打印处理>的处理,有的时候,我们在流程中或者一些文件签署的时候,需要签上自己的大名,一 ...
- Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍
网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edisonchou/p/4458219.html 网站日志分析项目案例 ...
- 潭州课堂25班:Ph201805201 tornado 项目 第十二课 项目部署(课堂笔记)
运行多个Tornado实例 网页响应不是特别的计算密集型处理 多个实例充分利用 CPU 多端口怎么处理 Linux 常见应用服务配置模式 nginx 和 supervisord:采用主配置文件 + 项 ...
- 使用eclipse构建Maven项目及发布一个Maven项目
开发环境: Eclipse Jee Mars(截止2015年12月1日目前的最新版eclipse4.5),下载地址:http://www.eclipse.org/downloads/ 因为此版本已经集 ...
随机推荐
- 什么是BSON?
BSON( Binary Serialized Document Format) 是一种二进制形式的存储格式,采用了类似于 C 语言结构体的名称.对表示方法,支持内嵌的文档对象和数组对象,具有轻量性. ...
- Linux下的软件安装
在线安装 APT:advanced packaging Tool,Debian及其派生的发行版的软件包管理工具,包含以apt-开头的多个工具,如apt-get,apt-cache,apt-cdrom ...
- 【码云周刊第 23 期】Web 高效开发必备的 PHP 框架(从这里学起)good
码云项目推荐 1.项目名称:多功能 THinkPHP 开源框架 项目简介:使用 THinkPHP 开发项目的过程中把一些常用的功能或者第三方 sdk 整合好,开源供亲们参考,如 Auth 权限管理.支 ...
- 让VC2012生成的程序支持XP系统(修改mkspecs\win32-msvc2012\qmake.conf,QT的DLL都是支持XP的,只与EXE有关)good
如果用的编译器是VC2012以上,那么默认生成出的程序是不能运行在XP系统上的.所以需要修改链接参数 我们要做的是修改qmake.conf文件中的参数,文件路径根据开发环境不同而不同下面以5.1.1 ...
- node应用远程调试教程
远程调试 所谓远程调试,是指在本地IDE或命令行即时调试服务端代码,这在预发环境的测试阶段可以使用.远程调试避免了服务端环境的模拟,可快速定位bug. node应用调试 本文的教程主要针对采用 VS ...
- 使用C++还是QML(QML容易使用和维护,效果好)
本质上,Qt 是一个C++类库.在引入 QML 以前,所有的开发都是基于 C++ 的,但到了 Qt 5,QML 和 Qt Quick 成为了 Qt 的核心之一,导致很多初学者在犹豫是否还需要学习 C+ ...
- Qt - 设置程序界面风格(现成的QMacStyle等等)
类的继承关系: QMotifStyle:OSF(开放基金协会)开发的一个工业标准的GUI(图形用户接口): QCDEStyle:公共桌面环境(Common Desktop Environment)的缩 ...
- nginx(一) nginx详解
nginx是一个被广泛使用的集群架构组件,我们有必要对它有足够的了解.下面将先认识nginx:包括应用场景.nginx基本架构.功能特性.并发模型以及配置说明,最后我们再总结下,为什么选择nginx的 ...
- serverless 项目配置及创建helloworld应用(二)
阅读目录 一:学习使用AWS Lambda来作为服务器引擎 二:使用serverless环境搭建 三:创建我们的第一个应用,hello world 服务 回到顶部 一:学习使用AWS Lambda来作 ...
- Markdown教程 <1>
Markdown教程 <1> 本文在本地使用atom编辑后,直接将代码赋值到博客园中的markdown编辑器中生成 1. markdown字体,段落控制 以下引用块里面为源码,引用块下方为 ...