南京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/ 因为此版本已经集 ...
随机推荐
- GAC的一种非官方实现方式
1.GAC简介 全局程序集缓存(Global Assembly Cache, GAC)计算机范围内的代码缓存,它存储专门安装的程序集,这些程序集由计算机上的许多应用程序共享.在全局程序集缓存中部署的应 ...
- Cordova 教程地址
原文:Cordova 教程地址 1.Cordova 官网 http://cordova.apache.org/ 2.Cordova插件库 for android http://cordova.apac ...
- 深入理解Amazon Alexa Skill(二)
理解skill调用 本节来更详细的讨论alexa是如何确定调用哪个skill的. 参考:https://developer.amazon.com/zh/docs/custom-skills/under ...
- linux的自动化操作相关使用方法汇总 专题
Crontab中的除号(slash)到底怎么用? crontab 是Linux中配置定时任务的工具,在各种配置中,我们经常会看到除号(Slash)的使用,那么这个除号到底标示什么意思,使用中有哪些需要 ...
- SkyDrive开发申请ClientID
申请地址: http://go.microsoft.com/fwlink/p/?LinkId=193157 注意:在创建完成一个你的应用实例后,有一个很重要的任务需要你去完成. 那就是在你创建的应用实 ...
- 中国2017 Google 开发者大会第一天简单回顾
昨天有幸参加了中国2017 Google 开发者大会,在这第一天就收获满满,昨天太忙了,今天早晨来一起简单回顾一下,可以让没有参加的童鞋们感受一下现场的温度. 早早就来到了会议现场,外面看不出什么特别 ...
- GitLab一键式安装bitnami 专题
git lab developer角色不能提交到master分支的问题 错误提示: git -c diff.mnemonicprefix=false -c core.quotepath=false p ...
- 学在LINUX下编程(各种情况比较详细)
(from http://www.712100.com/bbs/redirect.php?fid=160&tid=191752&goto=nextnewset) 预备知识 用gcc ...
- 解析 Qt 字库移植并能显示中文 (上篇)
原文http://mobile.51cto.com/symbian-272552.htm 本文介绍的是Qt 字库移植并能显示中文,需要的字体库文件,一般是多个.具体移植那一个,看你使用的字库是什么了, ...
- rest_framework
一.解析器组件(parser) 1.编程:数据结构和算法的结合 2.restful规范 定义:url唯一定位资源,http请求方式区分用户行为 (1)接口设计规范 (2)返回数据规范 (3)错误消息规 ...