如何用腾讯云快速开发一个陌生人社交app

B18是一个面向中学生的陌生人社交应用。简单来说,它是一个只允许中学生注册的“陌陌”。

它是一个初创的社交应用,前期以快速的功能迭代开发为主,尽可能的降低开发成本、时间成本,验证市场。要达到这个目的,我们团队尽可能的使用现成的第三方服务,挤压时间来对开发核心功能。

云计算高速发展的这几年,IaaS、SaaS雨后春笋般涌现,为应用开发团队提供了各种各样的云服务。怎么从众多的云服务商中选出最适合的一个?

我们选用腾讯云,来作为我们后端服务的根基:

一是腾讯产品的浓厚社交基因,跟我们陌生人社交的产品基因吻合的,众多腾讯自己的社交产品都使用腾讯云;二是腾讯云提供了众多社交产品所需要的功能解决方案,如云通信、短视频、直播等;三是根据团队研发人员过往的云产品使用经验,腾讯云在IO性能、稳定性方面有更为卓越的表现。

我们的后台服务开发过程中,除了核心功能逻辑是由自己开发团队实现外,数据库、数据分析、域名、监控、聊天、社区等等环节,我们都利用了腾讯云云服务来加速我们的产品部署。

整体技术架构

我们的服务器逻辑,使用PHP语言,因为其具有轻量、开发快、易部署运维的特点。它的单进程单线程编程模型大大降低了软件开发的复杂度,对于初创团队而言,还能用相对低廉的价格招聘到适合的工程师。

其中数据存储的环节上,MySQL、Redis、Memcached、对象储存,我们全部都利用了腾讯云的相关数据服务产品。因为根据我们的经验,数据管理,是产品运维中一个比较折腾的点,要做好数据管理相关的性能、监控、备份、回档、扩容、分布式等等环节,是相当不容易的一件事。所以我们使用了腾讯云提供的数据服务,降低“趟坑”的可能性。

选购云主机很容易陷入一个误区,就是一开始就选用一台性能牛逼的云主机,每个月在云主机上就投入了不少金钱。相对于其它主流语言如C、Java,虽然PHP的执行性能并不好,但是它简单轻量,非常适合进行Web开发,部署非常简单。考虑到以后假如遇到并发问题了,利用负载均衡,我们只需简单的增加一台逻辑服务器即可。由于数据服务是剥离的,云主机本身仅仅是进行PHP语言的执行工作,一开始我们可以选购一台低价的云主机即可。

核心功能模块

地理位置定位

作为一款陌生人社交应用,其最核心的功能非“附近的人”莫属了。技术上怎么高效的实现附近的人?比如说怎么快速的找出附近的人? 难道使用SQL数据库筛选出所有用户,并分别获取它们的经纬度进行距离计算?

我们的地理位置定位,使用了geohash算法:用字符串来表示经纬度两个坐标。geohash表示的并不是一个点,而是一个矩形区域。

比如某个经纬度,转化成的字符串是wx4g0ec19,我们要找到这个经纬度附近的人,使用SQL语句 'LIKE wx4g0ec%'来高效的进行附近的人筛选。

图像服务

社交应用,有大量的用户上传照片。在云服务广泛应用之前,开发人员自建文件服务,还得自己购买硬盘,不但价格高昂,还有各种各样的运维问题需要解决,比如,机械硬盘到达生命周期结束怎么办?备份的工作怎么进行?

使用云存储,就有很多好处,价格低、易扩容、稳定安全,还可以轻松跟CDN(内容分发网络)配合,提升用户客户端下载图片的速度,优化用户体验。

数据服务

前面总体架构提及过,我们的数据服务,均使用云服务,而不是自己搭建。那么,我们分别用这些数据服务,做一些什么事情?

关系数据库 MySQL

MySQL数据库是整体社交app的数据重心,重要、基础的数据都储存在里面,比如用户信息、用户地理位置。

云存储 Redis

Redis云存储,保存一些次要、周边的功能系统,比如说用户之间的拜访记录、点赞记录等。要注意的是,很多时候Redis与MySQL配合,是作为缓存的角色出现的,而我们这里Redis是作为数据库。

弹性缓存 Memcached

Memcached主要是作为缓存服务,做性能优化。比方说,“获取附近的人列表”,是一个很消耗数据库性能的计算,因此每一次计算,我们会把附近的人列表,保存成一段时间的缓存,来防止用户不停的刷新附近的人列表来大量消耗服务器性能。

短信验证码

现在一款手机应用,通过手机号码验证码验证进行注册的方式几乎成为了标配。因此我们使用腾讯云的短信服务,来实现验证码功能,每条短信几分钱。

云通信

既然是社交应用,聊天功能怎么能少?自研一个聊天系统,可谓一个浩瀚的工程。能不能直接使用像QQ、微信一样的聊天系统来为我服务? 腾讯云的云通信,就是这样的一套强大的SDK。

经验分享

前面的这些技术架构选型,离不开一个“”字。 不光技术上如此,我们的产品和团队管理同样也基于“快”的原则做过一些尝试。

产品设计原型

我们使用Axure RP进行App的原型设计。 好的原型设计,能让美术和客户端更快的完成他们的工作,比满口的空话、满屏的文字来得实在得多。

团队管理软件

目前我们的团队成员,有异地办公。 怎么确保工程进度完成,团队协作工具必不可少,总不能老是把各种文档通过QQ传来传去吧?

我们探索过teambition, quip等协作工具,考虑到小团队的敏捷性,最终我们还是选用最简单的方法,就是直接用上了OneNote云共享笔记。

Docker开发环境应用

在以往,开发、运维环境不一致,是一个开发人员、运维人员很头疼的问题。Docker的出现解决了这个问题,我们开发人员,使用Docker来搭建整个逻辑服务器的开发环境,诸如PHP、Nginx等软件的版本,是跟生产环境完全一致的,来避免踩坑。

未来

现阶段我们的产品还属于初期,快速的功能开发、扩充业务为主要目的。我们广泛应用的腾讯云云服务,为我们减少了大量的金钱、时间成本。

随着业务发展,我们计划未来会更多的利用腾讯云其它云服务,比如机器学习、消息队列、直播方案、短视频方案等。这些都是我们未来产品发展所需要利用的功能。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

kelly的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据猿

【案例】鹏华基金——金融领域的日志大数据实践

数据猿导读 依托移动终端的普及和互联科技的飞速发展,金融行业需要抓住机会技术升级、积极应变。在转型过程中如何利用大数据技术发掘数据真正的价值,是当前金融业打破传...

2884
来自专栏云计算D1net

开始云征程:迁移计划要先行

当把应用迁往云时,我们不能只是把应用往云中一放就奢求它们能够在其中正常运行了。制定一个完备的迁移计划可确保您的应用运行表现良好,并具有较高的成本效益。 云迁移并...

3125
来自专栏企鹅号快讯

数据中心如何“复制黏贴,无缝迁移”

前言: 企业在发展的过程中由于某些原因,大多数企业在其IT环境的生命周期中可能需要考虑数据中心迁移问题,那么数据中心如何无缝迁移?IT经理和管理人员期望在保持安...

2327
来自专栏ThoughtWorks

2015.5 技术雷达 | 技术篇

(点击图片可查看大图) 当多个独立开发的服务通过 API 交互的时候,API 提供端的改动会让它所有的消费端调用失败。消费端服务通常也不会直接去连接处于开发中...

2805
来自专栏双十二技术哥

Android性能优化(十二)之我为什么写性能优化

从1月10号第一篇文章开始,到现在过去了4个月又20天,陆续写下了性能优化系列文章共计十二篇,大概一个月三篇的节奏。本篇文章是性能系列文章的最后一篇,没有新的大...

872
来自专栏腾讯云技术沙龙

王晓波:同程艺龙Serverless沙龙分享

同程艺龙跟腾讯不太一样,我们是主营机票的一家公司。其实这家公司做的蛮多的,跟大家的生活都相关。

2646
来自专栏微信公众号:Java团长

【重磅】Java大规模分布式跟踪监控系统源码+视频教程小编送你!

本项目对java、scala等运行于jvm的程序进行实时日志采集、索引和可视化,对系统进行进程级别的监控,对系统内部的操作进行策略性的报警、对分布式的rpc调用...

691
来自专栏杨建荣的学习笔记

DBA技能发展变化小结

去年年底的时候,我尤其焦虑,因为圈子的缘故,我能感受到行业里的变化和趋势,所以所想和所做不能匹配的时候,焦虑难免产生。当然我们要做减法和解法。

1141
来自专栏云计算D1net

API如何开启IT基础设施的未来

企业一直在寻找新的方法来提高效率,降低成本的同时保持其产品和服务的质量。云计算的重要组成部分API被IT部门和服务供应商越来越看好(应用程序编程接口),其使工作...

34013
来自专栏腾讯技术工程官方号的专栏

2017 全球移动技术大会

导语 6月9日-10日,“2017年全球移动技术大会(GMTC)”在北京举行。会议为期两天,面向移动开发、前端、AI技术人员,聚焦前沿技术及实践经验,打造技术人...

2347

扫码关注云+社区