2019独角兽企业重金招聘Python工程师标准>>>

本文来自于个推CTO叶新江在2015Qcon的分享整理。

截止2015年6月,个推SDK累计接入总用户数达50亿 (其中海外近5亿),接入应用超过35万,开发者人数近20万,覆盖独立终端超过8亿(其中海外超过1亿),日均活跃用户近6亿,日分发消息20亿条。

这么庞大的数据,是如何做到的呢?2011年公司做的是小规模IM产品,发展思路偏向于拿来主义,和很多开发者一样会选择MySQL来作为网站数据库。到了2011年,重新设计了系统架构,选择了更为开源的大并发通信系统;直至去年,多地协同、流式处理的理念应运而生,形成了大分布及大数据的处理系统。从单点的数据库到点与点的通讯,再到网络结构系统,不仅需要克服思维上的局限,更需要挑战服务器的极限。
例如:延迟和吞吐量,用户多了之后如何在保证延迟可接受的情况下达到想要的吞吐?关于这点大家可以回想下Java虚拟机的垃圾回收算法。

以下是开发大并发通信系统的相关经验:

1.内部服务调用方式
关于调用方式,异步非侵入式是首选。无需等待返回值的函数调用绝对拥有最高的收益,辅以非侵入调用就能最大程度上减少对目标程序的占用。

2.JVM及线程调优
个推选择CMS(Concurrent Mark-Sweep)作为GC(Garbage Collection),默认了92%的回收触发条件。另外要注意的是Linux下的性能调优,如MAT的使用,利用 top-p-H 来查看CPU占用情况,利用jstack,jmap命令定位问题所在等。

3.TCP 阑尾
TCP是全双工的,因此关闭连接必须要在两个方向上分别进行,反复的通道开启和关闭很容易带来问题。起初TW(Time Wait)就是为了克服不稳定的网络带来的丢包等问题,如今随着网络技术的发展,TW已经成了鸡肋。另外,虽然说TW状态的连接既可以被回收(Recycle)又可以被重用(Reuse),但没有人愿意冒这双重风险。在二者选其一时,能在时间戳上满足接入规律的Reuse有着明显的优势。

4.健壮保障
需要重点关注:关键词,如流控、维稳、异常隔离、分降级、断续处理等。就流控而言,有可能出现SDK发送数据存在逻辑问题而导致浪涌现象的情况。

5.分布式事务
如何在分布式情况下实现将100元钱从A转到B?传统思维是按照A.C.I.D原则进行操作。A.C.I.D指数据库事务正确执行的四个基本要素。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这里我详细讨论下另一种替代方案——B.A.S.E,Basic Availability:基本可用;Soft-state :软状态/柔性事务,可以理解为”无连接”的, 而 “Hard state” 是”面向连接”的;Eventual consistency:最终一致性,最终整个系统(时间和系统的要求有关)看到的数据是一致的。在B.A.S.E中,强调可用性的同时,引入了最终一致性这个概念,不像A.C.I.D,并不需要每个事务都是一致的,只需要整个系统经过一定时间后最终达到是一致的。首先确定考虑因素,即用什么方式来分割交易事务,资源方面有哪些要求,如何保证幂等性。

接下来是具体实现方式,流程如下:

1.设置业务交易记录表 T, 并建立一套和 T 相同存储的队列 Q
2.记录交易到 T, 同时放入队列 Q, 两个动作一个事务
3.A设置一个已处理交易记录表TA
4.监测 Q, 如果有给 A 的交易请求,则
开始事务
查看 TA 中是否有处理过此交易
If没有处理过 then
更新 A 记录
把处理痕迹写入 TA
end if
结束事务
If 上面的事务处理成功 then
Q出列
end if
1. B也按上述方式处理


使用分布式事务有助于简化应用开发,使用消息队列明显需要更多的工作量,两者各有优劣。
总结:对于时间紧迫或者对性能要求不高的系统,应采用分布式事务加快开发效率,对于时间需求不是很紧,对性能要求很高的系统,应考虑使用消息队列方案。对于原使用分布式事务,且系统已趋于稳定,性能要求高的系统,则可以使用消息队列方案进行重构来优化性能。

6.关于前瞻和成本
举个简单的例子——数据分区。实施前确定需要的资源,事先规划和分割,看到资源的限制后安排后期数据搬迁,最后利用redis内存分配占用。

最后谈一点我们理解的O2O下的推送。我们的核心为5W,即在合适的时间(When)、合适的地点(Where)、合适的场景(Which)把合适的内容(What)推送给合适的人(Who)。比如中午12点,用户来到了到中关村附近,日常比较喜欢粤菜,自然希望收到有关粤菜馆的一些优惠信息或者位置信息。在推送依据上,个推依赖于用户画像,并且根据场景进行高效的信息推送。

转载于:https://my.oschina.net/u/1782938/blog/475007

打造基于大并发通信技术及大数据技术的O2O系统相关推荐

  1. 大数据技术在scm系统中的应用

    面对大数据时代带来的变革与挑战,供应商情报系统研究生与开发的目的在于有效利用大数据技术对开放数据进行收集.分析与处理,为评估与管理供应商提供决策依据.从供应商的情报管理的实际需求出发,采用文本分析.知 ...

  2. 基于Python爬虫的股票成交量数据抓取分析系统

    目录 数据获取 2 1.1. 实验环境搭建 2 1.2. 抓取数据 2 1.2.1. 新浪财经 3 1.2.2. 网易财经 6 1.2.3. 东方财富 12 1.2.4. TuShare (挖地兔) ...

  3. 微型计算机工业控制技术,基于ARM的微机原理与接口技术(STM32嵌入式系统架构编程与应用嵌入式与工业控制技术高等学校电子信息类专业系列教材)...

    导语 内容提要 本书首先介绍微型计算机的相关概念及嵌入式系统的应用,接着介绍Cortex M3微处理器架构及开发方法,介绍汇编语言及其程序设计.在开发应用方面,以STM32F103VET6为背景,介绍 ...

  4. 本地门户 PHP,基于ThinkPHP框架开发的本地智慧生活门户O2O系统V3.9.9全新界面商业版+PC和WAP端多个功能+商家+物业+社区+街道办独立后台...

    源码介绍 NIUCMS智慧O2O生活门户是一个多元化的生活服务平台,包含城市新闻.城市自媒体.城市招聘.城市租房.城市商家.城市智慧小区.城市美食.城市贴吧以及城市智慧城市等,源码基于ThinkPHP ...

  5. 基于Java+HTML开发的条形码识别技术取药验证系统

    全套资料下载地址:https://download.csdn.net/download/sheziqiong/85626457 全套资料下载地址:https://download.csdn.net/d ...

  6. 大数据技术的应用现状与展望

    本文是我即将由嵌入式底层驱动行业转入大数据研究领域的综述文章,案例摘自<程序员>电子期刊,由于初学者知识面较窄,查看文献量较少,因此后续还会在此基础上,继续跟踪并深入研究,为论文撰写积累知 ...

  7. 【2017年第4期】工业大数据技术与架构

    郑树泉,1,3, 覃海焕,2,3, 王倩,1,3 1. 上海计算机软件技术开发中心,上海 201112 2. 上海电机学院电子信息学院,上海 201306 3. 上海产业技术研究院工程大数据服务创新中 ...

  8. 大数据技术的回顾与展望 ——写在Hadoop十周年纪念

    今天是Hadoop十岁生日.于2006年1月28日诞生的它改变了企业对数据的存储.处理和分析的过程,加速了大数据的发展,形成了自己的极其火爆的技术生态圈,并受到非常广泛的应用.InfoQ策划了一系列文 ...

  9. 秒针系统-中国领先的第三方营销数据技术公司

    秒针系统-中国领先的第三方营销数据技术公司 秒针系统-中国领先的第三方营销数据技术公司 posted on 2016-06-07 16:06 lexus 阅读(...) 评论(...) 编辑 收藏 转 ...

最新文章

  1. 中国电子学会青少年编程能力等级测试图形化四级编程题:太空大战
  2. 2019研究生新生大数据出炉!清华园迎来8900多名新主人
  3. Keras【Deep Learning With Python】手写数字识别
  4. linux系统编程之文件与I/O(六):fcntl 函数与文件锁
  5. Springboot与jsp使用404错误
  6. python scheduler 定时执行_python使用apscheduler做定时任务的管理
  7. 怎样对付win7黑屏
  8. 持续集成~Jenkins构建GitHub项目的实现
  9. vue host配置_从零开始部署一个 vue 项目
  10. 基于bim二次开发的智能楼宇管理系统
  11. JK触发器波形图分析
  12. iOS16更新后打不开微信 解决办法来了
  13. 苹果手机怎么快速截屏_苹果iPhone XR手机的两种截屏方法
  14. 2021年超全超详细的最新大数据开发面试题,附答案解析
  15. 英语介绍计算机,计算机英语自我介绍
  16. 汕头好的计算机学校有哪些,2021年汕头所有小学名单及排名,汕头最好的小学有哪些...
  17. 甘特图模板--项目管理模板
  18. 张勇:阿里云是一家云计算产品公司,要坚定走向“产品被集成”
  19. Ubuntu使用日常
  20. Low-light images enhancement/暗光/低光/微光增强系列:Attention-guided Low-light Image Enhancement(详解)

热门文章

  1. android 测试 大赛,轻量级android应用自动测试工具-2017全国大学生软件测试大赛.pdf...
  2. 在WORD文档里如何添加编号
  3. ESB学习笔记(Spring Integration实战)
  4. 软件工程开篇自我介绍
  5. JavaEE笔记(九)
  6. W3C标准的理解(2015.3.7)(陆续更新中)
  7. [恢]hdu 1865
  8. SQL Server六步改善安全规划全攻略
  9. Android WebView 开发详解(三)
  10. 检测是否是手机访问接口