说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

高性能微信公众平台开发

HTML文档下载 WORD文档下载 PDF文档下载
微信平台的月活跃数已达4.38亿,微信已被越来越多的商家为一大重点营销平台。微信的发展也带来了大量的数据存储及数据交互。那么,在进行微信开发时,面对用户较多的情况下,应如何确保瞬间并发的压力?

【编者按】目前,微信平台的月活跃数已达4.38亿,微信已被越来越多的商家为一大重点营销平台。面对如此庞大的用户群,商家迫切需要提供定制化的服务。那么,如何运营微信公众号成为企业亟需解决的问题,为此CSDN特别开设了 微信开发者社区供企业共同探讨、借鉴其他行业优秀的应用开发案例,为开发者带来一线“吃螃蟹”的经验得失。另外,企业/用户还可以借助微信项目对接平台,发布微信开发需求、寻找微信开发项目。

在进行微信开发时,面对用户较多的情况下,如何确保瞬间并发的压力?对于开发人员而言,一定要预估好自己的产品以后的用户量和数据量,保证产品稳定、有效地运行。  


微信基础交互

在谈更高性能的微信公众平台接口开发之前,我们先了解下微信开发的基础。微信公众平台官网的解释是:公众平台开发接口提供与用户进行消息交互、自定义菜单交互的能力。对于已接入的第三方接口,当用户发送消息时,微信会推送至第三方服务器。以上就是微信公众平台的开发流程,很多人因不明白而使开发受阻,如图1所示。


图1 微信公众平台开发流程

用户主动发送的消息分成普通消息、事件消息、语音识别结果。普通消息包含文本、图片、语音、视频、位置、链接等多维度消息,也是开发者们最常用的。事件消息包含关注、取消关注、扫描二维码参数、上报地理位置、自定义菜单(点击、跳转)监控等。整个消息按标准XML格式进行传递,所以开发人员可以用任何语言进行代码开发。在大型项目中会涉及转发处理。消息处理主要指的是被动接收,以及靠高级接口进行主动发送、高级群发等。针对这块,不久前微信已推出了模板消息功能。微信在消息处理上的形态已基本形成。

用户处理可以根据OpenID获取用户信息,通过Auth接口进行网页授权,只要在微信浏览器中即可获得用户信息,朋友圈分享的一些功能开发主要依赖此接口。消息对开发人员来说就是指令和关键词,程序主要用于处理各种指令,并返回对应的数据,该逻辑使微信开发更加简单,准入门槛更低。微信的发展也带来了大量的数据存储及数据交互,特别是对于拥有很多商户的开发商来说。

数据存储与快速查询

微信交互完全靠OpenID来进行用户识别,在标准XML中(FromUserName),建议开发者在数据库中建立一个与OpenID对应的表,该表只做关系处理,粉丝相关的数据则使用单独的表去存储。粉丝表的操作非常多,用户关注时要插入,取消关注时要删除。

在一些现场活动中遇到大量用户加入时,如果没有经过优化,服务器基本会崩溃,此时要用数据库分表解决方案。拿MySQL来说,一般建议一张表存储500万数据(多用户系统),否则高并发情况下数据库压力会非常大。另外,比较重要的就是微信交互数据,微信公众平台服务器只提供5天的用户交互信息供运营者查询。

微信在做架构时已意识到这一点,该项不能一直存储供用户查询,否则服务器架构扛不住。从我们公司的角度来看,一个公众号平均有1000个粉丝; 万个公众号,6000万粉丝,每天10%的用户会发送至少一条消息。也就是说,有600万的消息存储量,微信580万公众号的数据压力可想而知。即便如此,对于我们这样的商业公司来说,再大的数据量也要存储,因为我们需要更多的用户数据为商家的发展提供数据分析和数据模型。现阶段我们的处理方案是:近期数据实时查询 、历史数据异步查询 、数据库采用分布式。

  • 近期数据实时查询

将1~2个月的数据存储在实时数据库中,提供分布式解决方案,保证插入、查询的性能。

  • 历史数据异步查询

暂时将数据从热点数据库转移到专门的数据分析服务器,只用来提供查询服务,可借助一些搜索查询,利用数据分析软件进行提炼与大数据挖掘。

  • 数据库分布式

预估数据量比较大的内容,采用分布式存储,保证数据库的高性能服务。

实例解析

“分享有礼”是我们公司2014年七夕节上线的一个项目,上线两天,PV数就达到了200万,成功领取盒子的用户达20万人。该项目源于BMW的“分享至朋友圈,求助好友帮助领取奖品”的活动。技术评审时我们就意识到这是一个疯狂的项目。我们将面临Web、DB、带宽三项挑战,并且还要与微信服务器进行大量交互。

先说微信交互层面,朋友圈分享不需要用户进行关注,也不会产生用户信息交互,比较简单。但其业务逻辑中有个比较可怕的地方,即已领过盒子的用户,在第二次进入时要记录该用户已领取过盒子,同时用户打开朋友圈(朋友分享的链接),点击协助后也要对此进行记录。微信高级接口中有个Auth接口(Scope为snsapi_base),无须用户授权就可以获取用户OpenID。借此我们的解决方案是用户每打开一次,我们就去请求一次微信服务器。然而,这个解决方案带来的潜在风险很大。压力测试过程中,基本上2000并发压力就很大了,我们通过以下方法解决了该问题。

  • access_token进行了缓存存储,这可以减少一次服务器交互。
  • 用户OpenID存储在浏览器Cookie中。程序先判断浏览器Cookie,Cookie中有就不请求,这减少了用户二次打开时的请求量。
  • 用户数据存储的表加上了Memcached这种缓存中间件。

微信浏览器优化方案

在微信公众平台开发中,对微信浏览器的了解很重要。微信浏览器跟普通浏览器没什么区别,只是微信在其中做了一定的修改。当一个产品流量比较大时,上述架构会解决微信服务器交互的压力。所存在的带宽压力、Web压力还是需要靠Web开发技术来解决,手机浏览器每一个请求都要耗费流量。2G网络的用户也很多,所以该项是微信开发非常重要的一点。下面是一些优化小技巧。

  • 图片Sprite把常用的小图片合并成为一张大图,减轻多次请求造成的流量浪费。
  • CSS、JS合并压缩推荐Google的工具Minify。
  • 纯CSS、JS压缩推荐Apache自带的Gzip模块。

所以在进行微信开发时,用户较多的情况下,瞬间并发压力会比较大。不过作为开发人员,一定要预估好自己的产品以后的用户量和数据量。保证产品稳定、有效地运行。  

作者简介:张毅,前腾讯团购电商业务高级工程师,早期还担任过苏州同程旅游网技术经理,负责公司平台网站开发,涉足电商、在线旅游、政府信息化等多个行业。具有多年互联网技术经验,长期专注于LAMP技术应用与优化、技术架构,拥有丰富的大型项目规划和实施经验。


干货来袭,更多微信应用开发精彩案例,请查看 微信技术社区!

在Access数据库中实现密码管理的另一种方式 -VB资料 在VB6.0中使ACCESS数据库在网络使用中保持同步 在VB中更改SQL Server数据库结构 在VB中兼容非ACCESS数据库的技巧 在VB中引用dbf及索引文件 在VB中运行Microsoft Access报表的好方法 在VB中直接用ODBC API访问数据库 在数据库应用中, 经常要动态生成 Select 语句,典型的情况:-VB资料 在运行时修改DataEnvironment的连接字符串-VB资料 在抓取資料庫之資料前先計算資料總筆數 -VB资料 增加 MsFlexGrid 的编辑功能-VB资料 真正删除数据库的记录 -VB资料 用VB制作屏幕保护程序 VB多媒体程序设计 VB设计动画时钟 VB游戏写作技巧(1)秀图篇 VB游戏写作技巧(2)网络篇 VB中播放WAV文件 VB中播放三维动画编程一例 Visual Basic 5.0多媒体创作技巧 Visual Basic 5.0中实现视频画中画 Visual Basic 中制作流水灯 Visual Basic动画编程技术 Visual Basic环境下Video/ Audio压缩数据流播放技术 Visual Basic设计多媒体应用程序 Visual Basic影音控制 Web动画图像分解在VB动画设计中的应用 播放 .flc 动画 -VB资料 播放 AVI -VB资料 播放MP3文件 -VB资料 播放背景音乐 -VB资料 这个UDL文件错在哪? 推荐一篇文章《麦子的颜色》 大家来灌水. vc service pack? 关于聊天室的界面 c++库函数的头文件有.h和没有有什么区别?为什么c++的库函数在VC很多不能用,怎么办? 可以在dll里面放SDI框架并调用吗? MIDAS中,怎样通过Client.exe生成MS Sql2000数据库?(就像《管家婆》那样,运行一次客户端,输入数据库的名称,就会自动在SQL Server2000 如何查找一个对话框的owner窗口? 我应该选择VC还是C#??? 在系统启动时至少有一个服务或驱动程序产生错误,详细信息,请使用事件查看器查看事件日志 操作系统是如何发现新插入的设备的? 关于对Com1,Com2读取条形码的编程 帮个忙,先,谢了! 接着那个堆栈问题,创建了,试验了。但应用时出现了对创建错误? 我想在对话框上输出一个char数组,用什么方法比较好????????????? 怎样移动较大副图片的时候避免或者尽量减少闪动? 怎么把网络编程和数据库联系起来 如何贴背景透明的按钮?急,急,在线等待!!! 奇怪了! 请问如何获得居于网中一个工作组下的所有计算机?? 还是一个dll内部变量的问题。 怎么回事? 送分! 大家看看 请问MSDN的帮助怎么获得 怎么样获得一同名text表单域的值? **C++语言的设计和演化** 图书好贵呀!!! 求表达式正确与否的校验算法 怎样控制DllMain?在哪里可以编辑这个函数? 同一个句柄对于所有进程是否一样? 我的red hat linux8 怎么才能配置声卡 如何判断一个字符串是否是常数 《Java与模式》一书已经出版 --- 作者 各为高手,如何能够看到我打开网页的session的值 关于 Geforce256 的问题. 一定给分!数据库查询问题 solaris下有没有用过syslog编程的? 推荐个好点的flash的控件吧 数据库中的Currency类型字段 初学pb8请指教!多谢! 如何让richtextbox支持语法高亮显示 请问rtsp是什么协议? 函数返回临时指针到底如何处理较好? 原来在bcb4下的程序为什么在BCB6下运行出错? 我是新手 如何用代码关闭显示器和硬盘??????? 如何打印PictureBox中的所有内容,分不够可以再加 问一下大家的下载和注册的比率好吗? 我的IE怎么了? 这是我第二天的C#学习笔记,敬请高手指教 如图,A,B表示两个厂库,要在A,B一侧的河岸边建筑一个码头,使它到两个厂库的距离相等,码头应建筑在什么位置(图片中的红笔画的是我研究时画的,可以忽视这红线) we are not fit in with each other帮忙翻译 太阳轨道旁出现千艘地球大小的飞船是真的吗别乱说些不关这问题的话那你们说他为什么不会被太阳给消灭吖、又不会被引力给吸进去呢 卡尺怎么应用 what was your mother doing when I ----(phone)you yesterday?并翻译 Chinese currency is issued in the following denominations什么意思? 一条大河上有A、B两个码头……一条大河上有A、B两个码头,A在B的上游50千米处,客船、货船分别从A、B两码头同时出发向上游行驶,两船的静水速度相同且始终保持不变.客船出发时有一物品从 how long did you write to your e-friend yesterday?译 Lucy told me happily that she___to Hong Kong for her holiday with her parents the next weekA.WENTB.WOULD GO C.IS GOING TO D.HAD GONE 卡尺怎么使用,谢谢了 七大洲平均海拔都是多少? 欢迎远道而来的朋友(名句) 如何正确使用卡尺 七大洲哪个海拔最高有喜马拉雅山 海拔就高啊 顾明常于同学闹矛盾,因此没有朋友.我们可以用“( ),( )”这句俗语来劝他与大家和睦相处请勿抄袭别人已经传电脑上的答案 数显卡尺第一次使用时候,要按下ORIGIN是什么意思?使用的是日本三丰的量具,新买的卡尺上面就挂着一块牌子这样特别说明:第一次使用该卡尺时的动作步骤, Though having lived abroad for years,many Chinese still ______ the traditioA.perform B.possess C.observe D.support为什么 简单的英语两人对话每人十到二十句左右, 寒假的英文单词是什么 世界七大洲中,平均海拔最高的是什么给出四个选项,请尽快回答A.亚洲 B.非洲 C.南极洲 D.北美洲 法语名词复数的s读不读出来?有什么规律? 用英语表示寒假这个单词 七大洲平均海拔. 法语名词变复数des chinois 和des Chinoises 有什么不同北外的法语第一册P107页,des chinois 和des Chinoises 到底有什么不同?不是以s结尾,复数形式不变嘛?不明白怎么有俩个形式,是不是二者一样? I go to Hong Kong by plane是否等于 I fly to Hong KONG为什么? 英语翻译星期六的晚上,我独自完成了我的家庭作业.因为星期天我要去奶奶家跟她一起玩3个小时.奶奶很喜欢吃蛋糕.所以我买了两块蛋糕.妈妈开心的对我说:“你会让奶奶感到高兴的.”奶奶 Mao Zedong ____for many years ,but he still lives in the hearts of Chinese people.A.died B.had died C.has been died D.has been dead ,为什么? will he go to Hong Kong by plane or by train?改为同义句will he fly to Hong Kong or (take/taking) a train?who is the first person that (eat/eating) cakes? Did you ( ) your room yesterday?A .clean B.cleaned 这个是选择A还是B?为什么? 30.This machine, ______for many years, is still working perfectly. A. after which I have looked B. which I have looked after C. that I have looked after D. I have looked after 为什么A不对 和B不一样吗 世界上有七大洲 是那七个 英语翻译­when you realize thatsomeone is very important to you please tell her ( or him) that youmatters to me! the machine-,( )for many years,is still walking perfectlyA; after which i have looked B;which i have looked after为什么是选b不是a呢?还有一题the secretary asked her boss whether he had anything more-( )before she went back home?A;to type 世界上有哪七大洲? Did your parents help you clean your room?有无错误.十分钟内急求.Did your parents help you clean your room?No,them didn't. 古人认为昼夜交替现象是怎么形成的? 世界七大洲是哪些? 最好别和我说话 翻译英文, what fun we have (chat) with each other during lunchtime,这里的chat 是用动名词形式吗 翻译学什么语言好 I have been corresponding ___ him for many years.填一个介词 _____________(study) volcanoes for many years,I am still amazed ___ its beauty as well ___ itspotential to cause great damage. 翻译要学哪些语言 Have you been corresponding with him?这句话是什么时态?什么用法呢? Though having lived abroad for years,many Chinese still___the traditional customsA perform B possess C observe D support 英语寒假计划按照星期的旅游计划, 世界上有七大洲,分别是:写七个. 七年级英语改写句子:He watched too much TV last week.(保持句意基本不变)He watched TV for ______ ______ last week. 请你用英语来写写自己的寒假计划! 生物的分类依据是什么 He failed to pass the text last week.(句意不变)He_____ _____ ______pass the text last weekHe_____ _____ ______pass the text last week 世界七大洲是那几个 生物的分类是以生物的————,————以及生物之间的————依据进行分类的. 根据句意补全单词:Last week I went to that place m___.还有:Have you ever b__ to Hainan?(这个帮我讲解一下)I have been to the a__.I saw many kinds of fishes.He decided that the best way to do this was to become a flight a__.The p__ 带“树”字的成语 双色叶树种是有哪些 修改病句:爷爷已70多岁了,但精力仍很充足. 如图所示,在河L的同侧有A,B两个村庄,现要在河边建一个货运码头,使该码头到两村的距离相等,问:码头应建在何处?请在图中找出码头的位置. 新叶有色树种有那些这个是我们观赏树木课要用的. 丁大爷今年70岁了
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘