APP后台架构20191205

1.架构,架构与业务紧密相关,是有业务驱动的。

2.APP后台演进原则。

App后台的架构是由业务规模驱动而演进的,App后台是为业务服务的,App后台的价值在于能为业务提供其所需要的功能,不应过度设计。

从项目的角度,当App访问量不大时,应该快速搭建App后台,让App尽快上线给用户提供服务,验证商业模式的正确性,同时快速迭代产品。

当App访问量不断上升,这时要在保证快速迭代的前提下,同时兼顾高性能和高可用。

当App访问量达到一定阶段后,增长曲线就会放缓,但业务变得更加复杂,对高性能和高可用的要求也更高,性能问题、模块间的耦合、代码的复杂性会更加突出和明显,这时要使用业务拆分、分布式服务调用,甚至是技术转型等问题。

  1.项目启动时,单机部署。

app后台一个极简化的架构:

一开始就使用Redis的好处:

既能用作缓存,又能充当队列服务,而且并发性能高,能在长时间内应对业务压力,非常适合初期的项目。

这里使用Redis验证用户信息,充当消息队列。

而文件服务初期可以选择 文件云存储服务,或者自己搭建一个资源服务器。

  2.项目一定规模时,分布式部署:

看一个百万到千万级的架构:

这里新增了专门用于连接内部服务器的SSH服务的外网通道,保证SSH操作随时可用,同时加入了服务器集群,提供负载能力。

随着业务的发展,某些数据表的规模会以几何级增长,当数据达到一定规模时,查询读取性能就下降的厉害,数据库主从的架构不能应对业务上的读写压力,这时架构上要考虑分表(水平拆分/垂直拆分)。

当业务继续不断发展,数据库分表后的读写性能也可能没法满足业务上的需求,这时只能采用进一步的拆分策略——分库。用 Cobar 或者 MyCat 等关系型数据等分布式处理系统后,分库后的架构如下:

 3.可供选择的成熟稳定的开源软件

功能 可供选择的开源软件
项目管理软件 Mantis、BugFree
代码管理软件 SVN、Git
编程语言 Java、PHP、Python等
服务器系统 CentOS、Ubuntu
HTTP/HTTPS服务器 Nginx、Tomcat、Apache
负载均衡 Nginx、LVS、HAProxy
邮件服务 Postfix、Sendmail
消息队列 RabbitMQ、ZeroMQ、Redis
文件系统 Fastdfs、mogileFS、TFS
Android推送 Androidpn、gopush
IOS推送 Javapns、Pyapns
地理位置查询LBS MongoDB
聊天 Openfire、ejobberd
监控 ngiOS、zabbix
缓存 Memcache、Redis
关系型数据库 MySQL、MariaDB、PostgreSQL
NoSQL数据库 Redis、MongoDB、Cassandra
搜索 Coreseek、Solr、ElasticSearch
图片处理 GraphicsMagick、ImageMagick
分布式访问服务 dubbo、dubbox

4.可供选择的可靠云服务

对于初创公司还是建议尽可能的使用成熟可靠的云服务和开源软件,自身只专注于业务逻辑。

功能 可供选择的云服务
项目管理工具 Teambition、Tower
代码托管平台 GitHub、Gitlab、Bitbucket、CSDN CODE、Coding
负载均衡 阿里云SLB、腾讯云CLB
邮件服务 SendCloud、MailGun
消息队列 阿里云MNS、腾讯云CMQ
文件系统、图片处理 七牛云、阿里云对象存储OSS、腾讯云对象存储COS
Android推送 极光、个推、百度推送
IOS推送 极光、个推、百度推送
聊天 融云、环信
监控 监控宝、云服务器自带的监控服务
缓存 阿里云缓存服务、腾讯云弹性缓存
关系型数据库 阿里云RDS、腾讯云CDB
NoSQL数据库 阿里云NoSQL产品、腾讯云NoSQL产品
搜索 阿里云开放搜索、腾讯云搜TCS
分布式访问服务 阿里云EDAS
防火墙 阿里云云盾、腾讯云安全
短信发送 shareSDK、bmob、Luosimao
社交登录分享 shareSDK

5.选择合适的数据库产品和服务器系统

数据库产品:

数据库 数据存放位置 查找数据的区别
Redis 内存 基于键值对存储,读写速度快
MongoDB 同时使用了硬盘和内存 每个数据有一个id(索引),知道id(索引)查询速度快,不知道id(索引)效率低
MySQL(MongoDB) 硬盘 每个数据有一个id(索引),知道id(索引)查询速度快,不知道id(索引)效率低

然后根据不同的产品需求选择恰当的数据库产品,如果没有特殊的需求,Redis做缓存系统,MySQL 或 MariaDB 做数据库(常见的设置是 数据库默认字符集utf8,默认排序utf8_general_ci) 将会是很好的选择。

软件优化:

硬件优化:

架构优化:

  1. 分库(把一张表的数据分别存储在不同的数据库,可用MyCat实现,MyCat,关系型数据库分布式处理软件)。
  2.  MyCat以代理服务器的形式位于App服务器和后台数据库之间,
  3.  对外开放的接口是MySQL通信协议,将App服务器传过来的sql语句按照路由的规则拆解转发到不同的后台数据库,并把结果汇总返回。

mycat部署模型如下:

服务器系统:

CentOS+Ngnix+tomcat

6.选择合适的消息队列软件:

当后台系统发现完成某些小任务需要花费很多时间,而且迟点晚成也不影响整个任务的完成进度时,就会把这些小任务交给消息队列。例如发送邮件、短信、推送消息等任务都非常适合在消息队列中处理。

把这些任务放在消息队列中,可加快App后台请求都响应时间。同时消息队列也能把大量的并发请求变成串行的请求,来减轻服务器的负担。

常见的消息队列软件有:

消息队列软件 说明
RabbitMQ 重量级,适合企业级的开发,自带Web监控界面,方便监控队列的情况
Redis 轻量级,是一个key-value系统,但是也支持消息队列这种数据结构,App后台中Redis被广泛使用
ZeroMQ 号称最快,尤其针对大吞吐量的需求场景
ActiveMQ Apache的一个子项目,能够以代理人和点对点的技术实现队列

7.使用分布式服务实现服务的复用:

随着业务不断增加,后台系统由一个单一应用膨胀为一个巨无霸系统,系统中聚合了大量的应用和服务,各个模块之间有很多功能重复实现(例如登录模块),造成了开发、运维、部署的麻烦。

解决这些问题的方法就是把重复实现的模块独立部署为远程服务,新增的业务调用远程服务所提供的功能实现相关的业务,不依赖于里面具体的代码实现。

8.实现远程服务可以 参考 REST设计原则 和 RPC远程调用协议。

开源的RPC库有:

开源的RPC库 说明
Hprose 轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库
Dubbo 分布式服务框架,致力于提供高性能和透明化的RPC远程调用服务和SOA服务治理方案

9.用户验证方案最佳实践:

App操作中经常涉及用户登录操作,登录就需要使用到用户名和密码,为了安全起见,在登录过程中暴漏密码的次数越少越好。

1.HTTPS协议是 HTTP协议 和 SSL/TLS协议 的组合。其是一个安全通信通道,基于HTTP开发,用于在客户计算机和App后台之间交换信息。其使用安全套接字层(SSL)进行信息交换,简单来说就是HTTP的安全版。

HTTPS实际上应用了安全套接字层(SSL)作为HTTP应用层的子层。

HTTPS的模型:

HTTP
SSL/TLS(安全套接字层/传输层安全协议)
TCP
IP
网络传输

避免信息的泄漏,最基本的方案是所有涉及安全性的API请求都必须使用HTTPS协议。

2.选择JSON作为数据交换格式

JSON是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,易于编写,也易于机器解析和生成,而且对比XML更省流量,这些特性使得JSON成为理想的数据交换语言。

3.基本的用户验证方案

传统Web网站使用Cookie+Session保持用户的登录状态,App后台则使用token进行验证,流程如下:

此时App已经获取到了token值,为了安全,我们不在网络上传输token,而使用签名校验(这里使用URL签名)的方式,API请求加上URL签名sign和用户id后如下:

test.com/user/update?uid=2&sign=3f1e736bc4ae958ae7e8500b45aefdbb&age=22

这样,token就不需要附在URL上了。App后台签名校验流程如下:

还有的童鞋喜欢设置时间戳,这样时间一长,URL就失效了,也是一种不错的进一步的优化方案。

建议:为了保障数据安全,这里建议 同时使用 HTTPS 和 签名校验。

结束语:在移动互联网项目中,产品的研发讲求 小步快走,快速迭代。 架构的设计也可以遵循同样的思路。

原文地址:https://www.cnblogs.com/coolyouguo/p/11990118.html

时间: 2024-10-05 20:09:32

APP后台架构20191205的相关文章

App 后台架构设计方案 设计思想与最佳实践

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/53933096 做App做的久了,就想研究一下与之相关的App后台,发现也是蛮有趣的.App后台的两个重要作用就是 远程存储数据 和 消息中转.这里面的知识体系也是相当复杂,做好一个App后台也是需要长期锤炼的.本篇文章从 App 后台架构 的角度介绍.好了,下面进入正题: 说起架构,我们先看一下何为架构,百度百科是这样说的:架构,又名软件架构,是有关软件整体结构与组件的抽象描述,

《App 后台开发运维和架构实践》目录

ps:由于书的目录太长了,各大网店(京东,当当,亚马逊)都显示不完整,所以这里列出目录的完整版. 第1章 App后台入门 16 1.1 App后台的功能 16 1.2 App后台架构 17 1.3 App和App后台的通信 19 1.4 App后台和Web后端的区别 22 1.5 选择服务器 23 1.6 选择编程语言 24 1.7 快速入门新技术 25 1.7.1 思维模式 25 1.7.2 4种快速入门新技术的方法 25 1.8 App是怎样炼成的 26 1.8.1 项目启动阶段 26 1.

《App后台开发运维和架构实践》前言

笔者在2012年从开发电子商务网站转向了开发App后台,当时在一家做社交App的创业公司里工作,笔者和搭档都没有任何从事移动互联网开发的经验,不清楚App后台怎么架构,只能摸着石头过河,那时网络上只有一些零散的资料,当遇到问题时只能不断地摸索和思考,来找到解决问题的方法. 在从事开发App后台接近4年的时间中,笔者参与了两款社交App的开发,现在就职于bmob,从事云后台服务的研发工作,慢慢地对App后台的架构有了一些体会. 从2013年年底开始,笔者把工作笔记发表在CSDN博客专栏"App后端

《App后台开发运维和架构实践》推荐序

软件开发工具的成长速度远远超过开发人员的成长速度,这是现实. 每个月,甚至每天,我们都可以见到新的类库.框架.工具.语言.它们或者极大地降低了开发的成本,或者极大地提升了开发的效率. 随之而来的问题就是,如何让开发人员妥善地运用好这些工具? 曾经有好几个做开发的同事跟我说:"写软件谁不会?从网上找些开源的类和项目来改改就是了".目前也确实充斥着这种"改改就是"的工作思维.介绍某个类库和项目如何安装和调用的文章俯拾皆是. 但是每种工具究竟有什么优缺点?适合用来解决什么

微信与朋友圈后台架构

微信朋友圈技术之道:三个人的后台团队与每日十亿的发布量 视屏讲解 概述 截止到2015年7月,微信每月活跃用户约5.49亿,朋友圈每天的发表量(包括赞和评论)超过10亿,浏览量超过100亿.得益于4G网络的发展,以上数据仍有很快的增长,而且相对于PC互联网时代,移动互联网时代的峰值要来得更加凶猛.比如,2015年元月的流量到了平时的2倍,而峰值则达到了平时峰值的2倍,相当于平时正常流量的5倍,这对整个系统的考验是很残酷的.本次分享将简单介绍微信后台团队的开发模式.微信朋友圈的架构以及在性能上的一

QPS从0到4000请求每秒,谈达达后台架构演化之路

达达是全国领先的最后三公里物流配送平台. 达达的业务模式与滴滴以及Uber很相似,以众包的方式利用社会闲散人力资源,解决O2O最后三公里即时性配送难题(目前达达已经与京东到家合并). 达达业务主要包含两部分:商家发单,配送员接单配送,如下图所示. 达达的业务规模增长极大,在1年左右的时间从零增长到每天近百万单,给后端带来极大的访问压力.压力主要分为两类:读压力.写压力.读压力来源于配送员在APP中抢单,高频刷新查询周围的订单,每天访问量几亿次,高峰期QPS高达数千次/秒.写压力来源于商家发单.达

现货!《PHP7实践指南:o2o网站与App后台开发》京东天猫有售

终于发售了,啥也不想说了,喜欢的或需要的就点击 链接 进去购买吧. 另外此书将作为 2017 PHP全球开发者大会 现场活动用书 天猫购书包邮 PHP7实践指南:O2O网站与App后台开发 数据库设计 PHP开发工程 适合作为企业内部培训.培训机构和大专院校的教学参考书 京东购书PHP7实践指南:O2O网站与App后台开发 陈小龙 PHP7语言编程教程书籍 php7 PHP全球开发者大会 2017 PHP 全球开发者大会 -百格活动 作者简介陈小龙,奇虎360软件工程师,是国内较早研究微信开发和

Android软硬整合设计与框架揭秘: HAL&Framework &Native Service &App&HTML5架构设计与实战开发

掌握Android从底层开发到框架整合技术到上层App开发及HTML5的全部技术: 一次彻底的Android架构.思想和实战技术的洗礼: 彻底掌握Andorid HAL.Android Runtime.Android Framework.Android Native Service.Android Binder.Android App.Android Testing.HTML5技术的源泉和精髓等核心技术,不仅仅是技术和代码本身,更重要的是背后的设计思想和商业哲学. 一.课程特色 l  贯通And

APP后台 手机后台框架java springmvc

获取[下载地址 (劳动所得,不喜勿喷)] [免费支持更新]A 代码生成器(开发利器);全部是源码     增删改查的处理类,service层,mybatis的xml,SQL( mysql   和oracle)脚本,   jsp页面 都生成   就不用写搬砖的代码了,生成的放到项目里,可以直接运行B 阿里巴巴数据库连接池druid;  数据库连接池  阿里巴巴的 druid.Druid在监控.可扩展性.稳定性和性能方面都有明显的优势C 安全权限框架shiro ;  Shiro 是一个用 Java