在UPYUN主办的“UPYUN Open Talk ”第三期北京站上,58同城系统架构师孙玄详细介绍了58同城的商家(移动)管理平台的技术架构及演变历程,并就企业的核心O2O技术进行了专题的分享。

孙玄表示,58同城是一个分类信息网站,涵盖房产、二手车、招聘、黄页等内容,在每一个类别里都能看到方便用户交流沟通的58帮帮。58帮帮分为IM部分和非IM的业务处理部分,目前,整个帮帮系统每天要处理10亿次+的发消息,加好友等传统IM请求,和30亿+的业务线操作,总请求到达40亿次+。帮帮同时在线用户量也突破了100万,给基础设施带来了严峻挑战。

58同城帮帮技术架构

系统起步:传统IM

而说到挑战,58帮帮从诞生到现在,曾经面对过很多。最开始时,它只是一个传统的IM,主要用来满足用户沟通和传递信息的功能。针对这样的业务场景,架构设计如下:

整个架构分为四层:接入层、逻辑层、路由层、数据层。

接入层。直接面对 PC、移动、网页海量客户端的连接请求,整合成少数的长连接,并将请求转发至逻辑层。

逻辑层。主要是一些业务逻辑的处理(例如权限校验、添加好友、发送消息等)。

路由层。主要处理和用户一次登录session相关的数据(比如:用户在线状态,登录IP等),这部分涉及的数据变化非常快,没必要固化,-直接存储在内存中。

数据层。严格来讲是数据中间件,屏蔽了底层RDBMS和NoSQL的区别和复杂性,较容易完成关键数据的存储。

系统发展:第三方业务接入

随着业务的不断变化,58帮帮不再局限于传统的IM,而是一个逐步向一个商家综合移动管理平台演进,例如接入房产、招聘等业务,提供商家管理功能,进行发帖、刷新、置顶帖子等操作。很多功能,比如招聘、房产等需要在客户端完成操作和展示。针对这些需求,在原有IM的架构上了调整,主要变化在客户端APP。

第三方业务接入,由于和IM业务类型不一样,对长连接没有依赖,因此没必须使用长连接,可以直接在APP通过http调用第三方服务,垂直划分后,开发效率非常高,第三方业务可以快速介入,但由于客户端与第三方业务耦合太紧,带来很多兼容性的困难,一旦第三方业务接口发生变动,客户端就要随之更新来适配变化,客户端升级代价非常大,而且不能做到实时更新,比如需要升级时,用户可以选择不升级,这些都会带来很大的麻烦。

系统成熟:客户端轻量化

为解决这个问题,在此基础上又做了些调整,形成了目前的框架:

加入一层帮帮WebService服务。通过这层业务,较少客户端与第三方的耦合,即使第三方服务发生变化,客户端也不受影响。

O2O核心技术解析

对于移动O2O,长连接、移动LBS、推送技术都比较重要。

1. 推送的主要途径

推送方面,主要通过以下三个方式来做:

1.1 客户端轮询(pull)

客户端定期发起查询请求,来达到推送的目的。pull的优点和缺点都很明显,架构简单但实时性差,想提高实时性,只能加快查询频率,但这会造成电量消耗过高。

1.2 短信推送

通过短信发送推送消息,并在客户端置入短信拦截模块,将接收到的短信拦截,并解析后转发给应用处理。这个方案实时性好、到达率高,但成本很高。

1.3 服务端长连接(push)

这是目前的主流实现方式,实时性好,且电量消耗低。

2. 不同平台的实现方案

基本上目前的推送技术都是结合这 3 个方面展开的,但对于不同的终端平台,又有各自不一样的实现,这里简单介绍一下 IOS 和 android 上的具体实现方案。

2.1 IOS 平台

对于 IOS 来说比较简单,你没有别的选择,因为 IOS 中的应用是不允许后台常驻的,所以你没有办法通过开发自己的 push service 来完成推送下发,只能通过苹果 APNS 渠道来完成推送,大致流程如下:

2.2 Android 平台

在 android 平台上,由于没有 IOS 那样的限制,可选的方案就多一些。你可以通过谷歌官方的。

C2DM 完成推送,可以借助开源的推送协议(例如 XMPP)实现,也可以借助市面上的各种推送产品完成推送。

谷歌 C2DM 的主要流程如下:

C2DM 和 APNS 流程类似,但其最大的问题是服务器在国外,很容易被屏蔽,而且由于 android 社区分裂比较严重,很多厂商可能直接就把 C2DM 模块给去掉了,所以在国内这个方案极不可靠。

对于开源推送协议,常见的有 XMPP 等,事实上谷歌的 C2DM 底层就是基于 XMPP 实现的,通过调用和测试,主要遇到了两个问题:1. 没有ACK 机制,消息不可靠。2. 请求量大时会不稳定。

最后就是一些市面上的第三方推送产品了,使用这些产品需要面对几个问题:

首先是到达率。虽然都宣传到达率能到 90%及以上,但实际使用起来,发现远远不到。

其次是实时性。第三方推送产品的推送通道是共用的,会面向多个客户,如果某一个客户推送量特别大,你的推送实时性可能就会受到影响,这些都是你不可控的。

曾经,58同城也有考虑过自己去实现一套推送方案,如果自己来做的话,要先解决几个难点。首先是服务端海量长连接的管理,然后是客户端常驻 sevice 的稳定性,手机在内存不足的时候,系统会杀掉你的 service,甚至有些系统比较强势,它不允许你的 service 常驻,如何在这些复杂场景下处理好,非常麻烦。

综合上面的一些考虑,58 帮帮目前的推送方案没有过多的使用自建方案,主要结合多家第三方推送来实现。针对到达率的提升,什么手机上使用什么推送产品,这需要去做一些数据分析,然后再做针对性优化。

孙玄:解析58同城典型技术架构及演变相关推荐

  1. 10亿次+消息、40亿次+总请求丨以58帮帮为例看58同城典型技术架构演变

    10亿次+消息.40亿次+总请求丨以58帮帮为例看58同城典型技术架构演变 来源:<程序员>2015年10月期 作者:孙玄 作者介绍:58赶集集团系统架构师,技术负责人,技术委员会架构组主 ...

  2. 以58帮帮为例看58同城典型技术架构演变

    58同城作为中国最大的生活服务平台,涵盖了房产.招聘.二手.二手车.黄页等业务,在每一个业务类别里都能看到方便用户交流沟通的58帮帮.本文选取了58帮帮作为58同城典型技术架构的代表,详细讲述了58帮 ...

  3. 以IM为例看58同城典型技术架构演变

    58同城作为中国最大的生活服务平台,涵盖了房产.招聘.二手.二手车.黄页等业务,在每一个业务类别里都能看到方便用户交流沟通的58帮帮.本文选取了58帮帮作为58同城典型技术架构的代表,详细讲述了58帮 ...

  4. 【SDCC讲师专访】58同城孙玄:一切抛开业务的架构设计都是耍流氓

    本期我们采访的讲师是来自58同城高级系统架构师&技术负责人孙玄,他是58的技术委员会架构组主任,产品技术学院优秀讲师,代表58同城参与多次对外演讲. 58同城高级系统架构师,技术委员会架构组主 ...

  5. 58 同城 iOS 客户端组件化演变历程

    导语: 架构的演进是为业务不断发展服务的,架构不能脱离业务,这是最基本的出发点.58 同城 iOS 客户端随着业务量和用户量的持续增长,架构也是不断受到挑战,采用什么样的架构去适应这些变化,对技术人员 ...

  6. 医药企业数字化转型的技术架构和演变策略

    伴随着新经济浪潮的高歌猛进,数字化技术和实体经济结合越来越紧密,各行各业都加速迈进了数字驱动.创新驱动的阶段.传统印象中,医药企业庞大而且笨重,组织机构和职能相当臃肿.但随着数字经济时代来临,医药行业 ...

  7. 58同城|TEG技术工程平台群-闪电面试专场内推(12月7日)

    今年冬天有点冷 如果你在一家公司默默付出着,却一直没有回报,甚至"优化"这种事儿降临到了你的头上,你内心知道,自己的技术是 ok 的,只是有硬性名额要求 如果你的工资一直没有涨 如 ...

  8. 【干货】阿里资深无线技术专家孙兵谈闲鱼社区技术架构演进

    近期在ArchSummit北京会议上,阿里巴巴资深无线技术专家孙兵(花名酒丐)发表了<网格社区-闲鱼技术架构演讲>主题演讲.孙兵2011年加入阿里巴巴,先后在B2B.淘宝.手机淘宝等部门负 ...

  9. 58 同城 iOS 客户端 IM 系统演变历程

    [编者按]58 同城 App 自 1.0 版本开始,便一直致力于自研 IM 系统.在这过程中,发现如何降低 IM 系统层次和页面间的耦合,减少 IM 系统的复杂性,是降低技术成本提高研发效率的关键.对 ...

  10. 前后端分离技术架构模式演变

    PHP与Vite能摩擦出啥样的爱情火花? 一.背景 前段日子公司里准备要重构一个拥有10年高龄的网站,当时听到这个消息心里无比激动,因为我现在就是这个网站的维护人员

最新文章

  1. mysql 主机 %_MySQL 开启远程链接(localhost 以外的主机)
  2. wxpython 安装_下载和安装wxPython
  3. 【贪心】【字典树】Gym - 101466A - Gaby And Addition
  4. Glide 这样用,更省内存!!!
  5. The 2020 ICPC Asia Macau Regional Contest A. Accelerator(分治+NTT)
  6. 微信小程序:一起玩连线,一个算法来搞定
  7. SPOJ-New Distinct Substrings,注意会爆int
  8. C#:泛型Range助手
  9. Python与C++引用分析
  10. 初中英语听力计算机考试反馈,【初中英语】英语听说机考,怎样才能有效提高英语听力和口语水平?...
  11. 教你阅读vue源码的正确姿势,看完就学废!
  12. 六度分离 (Floyd算法)
  13. 给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
  14. Vue 关闭浏览器清除Cookies
  15. SSD算法详解 及其 keras实现 (下)
  16. vRealize Operations Manager 仪表板示图
  17. 学习嵌入式的开发线路,新手怎么学习嵌入式?
  18. Vue $attrs使用方式及使用场景
  19. 行业说 | 建筑业面临失宠,越来越留不住年轻人?原因在这
  20. SpringBoot四大核心

热门文章

  1. 登录SYSTEM账户 Windows黑科技 首创方法 教程附源码(c++)
  2. Numpy安装、升级与卸载
  3. Nordic nRF52840实战学习--使用nRF52840开发板抓蓝牙数据包
  4. 案例研究:FIT2CLOUD 飞致云携手联友科技助力东风日产云管平台建设
  5. Java集合的常见面试题(全)
  6. RoboWare 下载地址
  7. 《统计学》第八版贾俊平第十章方差分析知识点总结及课后习题答案
  8. 432考研_贾俊平《统计学》第1章 导论思维导图
  9. Unity世界坐标转换屏幕坐标(测试)
  10. 一周项目实战系列--SpringBoot实现微信点餐系统(1)