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

高性能微信公众平台开发

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技术应用与优化、技术架构,拥有丰富的大型项目规划和实施经验。


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

应用数据分析新标准:Flurry增应用崩溃分析功能 Twitter被黑客入侵,25万用户信息可能被窃 16亿美元超级计算机项目助力解读人脑 卡巴斯基发现新型Android恶意软件 可入侵Windows 谷歌发布基于B-Tree的C++模板库 开源产品系列:高性能Web框架Zend Framework LiFi是否会取代WiFi? 1月浏览器排行:IE10突破1% Chrome连续3月下滑 Wine让Android也能运行Windows软件 Cory Ondrejka,是这位工程师拯救了Facebook! 三星争夺企业市场的三大痛点与对策 Xcode更新至4.6 支持iOS 6.1 工程师揭秘:NVIDIA如何锻造Android掌机 VMware掌控Puppet 老用户会被锁定吗? 试图领导创新:三星创新中心11亿美元建基金 基于WebRTC Chrome与Firefox实现视频通话 将OpenStack私有云部署到Hadoop MapReduce环境 Web设计师必备的10款最佳排版工具 诺基亚CEO谈平板计划 Android为候选系统 244亿美元!戴尔公司正式完成私有化 对抗苹果 Facebook或推Find My Friends应用 前谷歌工程团队负责人:如何打造一个完美的产品 好消息!Google Drive可存储共享JavaScript等网站 Android Rivers:用Kotlin语言写出的新闻应用 辞旧迎新 老牌游戏开发商的移动进化之路 iSuppli:硬盘市场持续萎缩 大数据应用成重要市场 全球最大校园Hackathon:失败后,你能学到什么? 走进Evasi0n,越狱黑客如何拿到iOS权限 提升服务扩展性和冗余的八个编码方向 分析数据预测未来?数据挖掘绝不是大公司的专利 揭秘LinkedIn数据科学家如何工作 求助!!! 如何让Class Wizard认识外部添加的类? 难题:如何实现数据库的多个文件下载?-----(50分) 【请问】handi兄,我在你的ftp里面看到了ase12.5,为什么我下载之后一安装就提示java.exe产生了错误呢?这个能装吗? jbuilder5运行servlet时调用的时默认的tomcat吗?可以改成自定义的tomcat吗 请问怎样获得CString的指针地址呀! 一个template问题,想不出办法,高手请进 屏幕取字功能!!!! 谁知道哪个网站能提供注册码的查询呀?!或者有谁能提供 system mechanic 这个软件的注册码呀?!这是一个在win xp下清理垃圾的软件。 关于.abs是什么东东? ★高分请教一个简单问题,关于JSP连接SQLServer2000★ !!高手指教:怎样改变Static Text控件中字体的大小!! 请问如何改MainMenu的背景色. *** 想对BMP文件从bfoffBits开始的数据直接读取来显示位图(256色),怎么实现? 请问在VC.NET下怎样删掉一个自己添加的函数或者变量?以前在VC6.0下直接按Delete就可以了!可现在非要自己手动在头文件和*.Cpp文件中删掉 将数据倒入excel用ole的createoleobject在那个单元亚?还有那有excelapplication??? 我总以为现在的女孩子都是那样...,但今天我遇到一个很好的,使我又重新拾起了信心 八皇后问题,知道的请进,谢谢 对话框中的CHILD,POPUP,OVERLAPPED属性是什么意思?用的时候要注意些什么? 怎样将windows中的某个逻辑驱动器,映射成另一个驱动器的某个文件夹? 我最后的二十分都给出来了。 上次给错了,所以补给!见http://www.csdn.net/expert/topic/569/569663.xml asdfa 西瓜你在吗?帮个忙 十一月份又开始学vc 很简单的,如何修改对框上控件的字体? 怎样用ADO创建一个新的ACCESS文件,并带表。 数据表如休动态增加内容,请教各位大侠給予解决方案 ADoTable问题!!!!! 急--关于莫名手机短消息! “无法创建组建对象“的原因有哪些??请大家帮忙?谢谢!!!!! 侯捷--》多线程的读后问题:核心对象究竟是什么东西? 请问大家,有谁用过AQtime来测试Delphi开发的软件?介绍一下测试过程和经验。谢谢·!!! C原代码? 高手请进:在TC中如何分配一个大于256*256个字节的内存单元? 要扭曲事实就必须先弄清真相 面试问题!一个小长方形落在一个大长方形上面,位置任意,请坐一条线将它们的面积2等分!!! 面试问题!一个小长方形落在一个大长方形上面,位置任意,请坐一条线将它们的面积2等分!!! [求助]关于Visual InterDev 与数据库操作 面试问题!一个小长方形落在一个大长方形上面,位置任意,请作一条线将它们的面积2等分!!! 面试问题!一个小长方形落在一个大长方形上面,位置任意,请作一条线将它们的面积2等分!! 请问用flash控件做的播放器如何支持flashmx的文件呢??? 一个从oracle数据库中导数据导sql server2000中 请问如何做一个像VC中编辑对话框是显示的工具箱 如何打发51的七天? 拨号上网的电脑和通过局域网上网的电脑怎样才能进行语音通话? 请教VB数据库的问题。 VB还有出路吗? 如何在其它应用程序中控制VC,让它打开指定工程,打开该工程中的文件,查找指定的内容,等等 我需要Delphi和SQL Server 2000的图片,用来美化我的论文! 用什么软件可以捕获自己网卡上的包? 想写一篇科学小论文,但不知道写什么主题 2011过新年作文.急...!急...!急...!至少300字 ()了一顿 ()了一眼 ()了一次 ()了一脚 ()了一掌 ()里填动词且只填一个字只能填一个字 要回的话 帮忙再添几个 谢了饱()一顿 ()一趟 () 怎样写一篇科技论文 作文军训心得体会怎么写? 求一个字,意思是眼睛的一般小说里面经常看到,说主人公的双 怎么怎么样的,那个字似乎是读mei,但是不太记得到底怎么写了, 英语翻译别在乎太多因为很疼别看得太淡因为很空 作文军训心得体会400字左右怎么写? 上网弊大于利辩论词急用啊 小明家的正常电流是15安培,但只有5安培的保险丝,怎么办为什么并联,“每给通过电流就是五安培” M1和M2是两个垂直放置的平面镜,发光点S在镜中成像的个数是( )A.2个B.3个c.4个D.无法确定 在期末考试中,幸福的语文、科学两科的平均成绩是98.5,他想让语文、数学科学的平均成绩达到99分他数学必须得考多少分 更换家庭电路中的保险丝,使保险丝更粗就可以通过更大电流 这样做合理吗?为什么这样做不能保证安全用电? 物理题 两个平面镜呈72度时,在角平分线处有一点光源S,它在两平面镜中成像个数为 克隆人的辩论词拜求各位大哥大姐,明天要辩论赛了.俺是反方方,理应好答.但是如果正方说:“只克隆单个器官,不是克隆人,便不会对克隆人不公平.”那我该怎么答? 在两个平行放置的平面镜之间有一发光点,则发光点在两个平面镜中所成的虚像有几个 不是同底幂数的乘法和除法怎么做?在2012年2月6日下午8点前给出答案.比如:2的6次方乘5的7次方,3的5次方除以5的4次方.要公式.给100分 即加鸟(成一个字),这个字的读音是什么.最好能帮忙将这个字(完整的字)贴在答案中. 作文《发生在家里的一件事》500字 六年级下册语文第二单元作文 求一个字的读音,上面是个亩字,下面是日字,这个字的读音是什么? 家中发生的体现亲情的事作文,400字左右 PS: 遇到克隆我作文600字 有关过新年的作文 400字注意:具体要写和家人一起过年的场面,其他写不写都无所谓. 四字成语最后一个字是\"常\"字的有哪些 如图所示,两个相互垂直的平面镜,在其中任一位置放置光源S,那么它所成的像共有( )如图所示,两个相互垂直的平面镜,在其中任一位置放置光源S,那么它所成的像共有(  )A.1个 B.2个 C.3 有关过新年的作文400字 主要写大年三十这一天的事情(比如:吃团年饭、夜里十二点放烟花等)400字左右 越多篇好 四字成语有什么是最后一个字的 两平面镜成90度,光源S在其中,问镜中会呈现出几个像?并说出理由教我怎样画,我知道答案是3个 求作文.我和家人过新年.400字~~~急~~谢谢 谁能帮我把这句中文翻译成英文“我对未来有很好的计划,我想在长大后环游世界” 光源S置于两个互相平行的平面镜之间,它在两个平面镜中将成几个像? 有关于快乐乐过新年的作文400字左右 平面镜所成的像是虚像,它不能出现在光屏上,可以用眼睛看见,这是为什么? 什么是幂数幂与幂函数的区别是什么?那是幂是一整体是吧 关于克隆人是福音的辩论词 物体通过平面镜所成的像是虚像,但为什么把能呈现在光屏上的像称为实像?平面镜难道不是光屏吗 幂数是什么? 数学;统计图条形统计图很容易看出( )条形统计图是用( )表示数量的多少,然后根据数量的多少画这些( )再把它们按一定的( )排列起来. 平面镜成的虚像为什么能在眼睛中呈现,无法在光屛上呈现 同底幂数乘法 数学有什么统计图 平面镜成的虚像,不能出现在光屏上,但为什么人眼可以观察到?提示:人眼的晶状体相当于凸透镜 虽然有提示 但我还是不明白. 木和米分别组词,但是得用同一个字,这个字是什么? "福”这个字!右边的偏旁用五笔帮我打出来下?左面我会,礻只要右面,帮我打出来谢谢! 平面镜所成的像是虚像,它不能出现在光屏上,但却能用眼睛观察到,这是为什么?如题.【提示:人样的水晶体相当于凸透镜.】 有哪些用眼的词语,是一个字的很多个 用五笔怎么打偏旁部首啊?请问一下,用五笔怎么打那些偏旁部首啊?比如说青字头啦,革命的革下半部分啦等等,就是五笔字根里的那些不是成字的东西/拜托啦! 英语翻译什麽都要有充足原因,连开心、连笑都要有充足原因吗?你们活的好累!没有你们高深. 平面镜成像实验中把纸放在像的烛焰处不会烧起来.所以不是实像,而是虚像,那么若是实像会烧起来吗? 一个汉字组词必须把这个字放在前面吗?比如眼睛的“睛”? 写一篇科技小论文600字, 随着生活水平的提高,家用电器日益增多.某户进行电路旧线改造后,将保险丝的规格由5A换成了8A,则该线路 求一句 励志有哲理 名句 ,带英语翻译 ,我纹身上, 数学分班考试全班平均分数是85分,其中有5分之4的人及格,几个人的平均分是93分,不及格人的平均分是 求一篇写一件关于规则的作文,400-600字左右, 英汉互译的有哲理的文章清给我一篇英汉互译的有哲理的小文章,字数不要太多,大概英文汉文都念起来七八分钟吧.有哲理一些,最好是关于地震的感人故事,2008奥运会也行.谢谢大家的支持! 怎么写一篇科学小论文?主要是小论文的格式和内容, 写一件有关规则的事 (作文)400字以上 写人眼睛动作的词语(一个字)
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘