云萌主云应用官方论坛

标题: 如何用腾讯云快速开发一个陌生人社交app [打印本页]

作者: 行走的唐僧肉    时间: 2017-2-15 10:09
标题: 如何用腾讯云快速开发一个陌生人社交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等软件的版本,是跟生产环境完全一致的,来避免踩坑。
  未来
  现阶段我们的产品还属于初期,快速的功能开发、扩充业务为主要目的。我们广泛应用的腾讯云云服务,为我们减少了大量的金钱、时间成本。
  随着业务发展,我们计划未来会更多的利用腾讯云其它云服务,比如机器学习、消息队列、直播方案、短视频方案等。这些都是我们未来产品发展所需要利用的功能。






欢迎光临 云萌主云应用官方论坛 (https://yunmengzhu.com/) Powered by Discuz! X3.4