前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何用腾讯云快速开发一个陌生人社交app

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

原创
作者头像
kelly
修改2017-06-19 19:26:54
5.1K0
修改2017-06-19 19:26:54
举报

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等软件的版本,是跟生产环境完全一致的,来避免踩坑。

未来

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

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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 整体技术架构
  • 核心功能模块
    • 地理位置定位
      • 图像服务
        • 数据服务
          • 关系数据库 MySQL
            • 云存储 Redis
              • 弹性缓存 Memcached
              • 短信验证码
                • 云通信
                • 经验分享
                • 产品设计原型
                  • 团队管理软件
                    • Docker开发环境应用
                    • 未来
                    相关产品与服务
                    云服务器
                    云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档