高性能微信公众平台开发

目前,微信平台的月活跃数已达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技术应用与优化、技术架构,拥有丰富的大型项目规划和实施经验。

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

高性能微信公众平台开发相关推荐

  1. 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——3.3 微信开发者中心...

    本节书摘来自华章计算机<微信公众平台开发:从零基础到ThinkPHP5高性能框架实践>一书中的第3章,第3.3节,作者 方倍工作室,更多章节内容可以访问云栖社区"华章计算机&qu ...

  2. 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——1.2 微信公众账号注册...

    本节书摘来自华章计算机<微信公众平台开发:从零基础到ThinkPHP5高性能框架实践>一书中的第1章,第1.2节,作者 方倍工作室,更多章节内容可以访问云栖社区"华章计算机&qu ...

  3. 《微信公众平台开发:从零基础到ThinkPHP5高性能框架实践》——1.3 微信公众平台的使用...

    本节书摘来自华章计算机<微信公众平台开发:从零基础到ThinkPHP5高性能框架实践>一书中的第1章,第1.3节,作者 方倍工作室,更多章节内容可以访问云栖社区"华章计算机&qu ...

  4. 微信公众平台开发:从零基础到ThinkPHP5高性能框架实践 Epub +Azw3 +Mobi

    image 下载地址...... 1.网站地址或点击阅读原文 https://51dr.cn/book/detail/28320 2.回复关键字 28320直接获取下载链接,公众号二维码请见文章末尾哦 ...

  5. 微信公众平台开发书籍推荐

    关键字:微信开发图书 微信公众平台开发书籍 微信图书 微信开发书籍 微信图书推荐 微信开发图书推荐 本文介绍了当前图书市场上最主要的微信公众平台开发类书籍,并对每本书的特色做了简要点评,供有需要购买的 ...

  6. 微信公众平台开发需要懂哪些技术

    在学习微信公众平台开发前,您得了解一个流程,为了更直观,商侣科技整理一些网友提供的流程图. 一.从流程图中很直观可以得出,首先您得懂一门服务器语言,这个语言没有任何限制,可以是asp.net,php, ...

  7. 微信公众平台开发(82) 天气预报

    在这篇教程中,我们将介绍如何在微信公众平台上开发天气预报功能.我们将使用中国天气网的气象数据接口来获取天气信息. 这篇教程将介绍以下内容: 获取中国天气网的气象数据 在微信公众平台中回复天气 一.中国 ...

  8. 微信公众平台开发教程(九)微信公众平台通用开发框架

    微信公众平台开发教程(九)微信公众平台通用开发框架 一.思考 开发了几个微信项目,一直在思考: 如何将微信相关的处理与业务系统联系在一起? 如何做到彼此分离,且易于扩展? 能否开发一套独立的微信服务框 ...

  9. Senparc.Weixin.MP SDK 微信公众平台开发教程(十一):高级接口说明

    这里所说的高级接口是指面向通过认证的服务号开通的高级功能. 高级功能大致可以分类为: 用户接口 分组接口 客服接口(有别于之前介绍的多客服) 群发接口 多媒体接口 二维码接口 模板消息接口(不是所有账 ...

最新文章

  1. 真·摸鱼带师!每天工作10分钟年薪57万,这位程序员火了
  2. 你的微信朋友圈让你焦虑了吗?
  3. flask 项目基本框架的搭建
  4. 【SPSS】第十周-面板数据的线性回归
  5. Nginx之rewrite配置
  6. 问题-[Delphi]用LoadLibrary加载DLL时返回0的错误
  7. LNMP环境部署----之Mysql安装部署
  8. windows 用户管理
  9. SDOD: Real-time Segmenting and Detecting 3D Objects by Depth(实时3D检测与分割)
  10. 约瑟夫环问题 poj 1012 poj 2244
  11. 大学计算机基础流媒体,大学计算机基础经典课件.ppt
  12. java gui 计算器_Java实现GUI计算器(完整版)
  13. 浅谈 | 从Web安全到APT防御
  14. 第一次制作中秋博饼小游戏的心得与吐槽(软件工程)
  15. struts 标签logic:iterate用法详解
  16. 日常工作计划安排工具
  17. 【转】鼠标右键多余菜单清理
  18. Vue实现前端3D展示及node环境搭建
  19. 应用宝成腾讯王卡官方应用商店 全部APP下载免流量
  20. centos7 下修改MySQL密码

热门文章

  1. cache在计算机中代表什么,cache是什么意思,计算机中cache是什么意思
  2. 腾讯企业邮箱免费注册及登录方法
  3. 微信点赞功能测试用例
  4. Dell商用台式机、笔记本、服务器800电话
  5. SMM框架学习日志——Spring详述
  6. 痞子衡嵌入式:盘点国内Cortex-M内核MCU厂商高性能产品
  7. java丐帮_java多线程学习笔记(三)
  8. 洛谷3386二分图模板
  9. mars3d学习-方量分析
  10. JAVA 间隔 时间 计算器