App后台开发架构实践笔记1App后台入门1.1App后台的功能(1)远程存储数据;(2)消息中转。1.2App后台架构架构设计的流程(1)根据App的设计,梳理出App的业务流程;(2)把每个业务流程可能会遇到的问题整理出来;(3)根据整理出来的问题,探讨可行的技术解决方案;(4)把所有的技术解决方案有机融合,就是一个App后台的初步架构。架构设计的特点(1)架构是和业务紧密相关;(2)架构的演变是由业务驱动;(3)架构不是为了炫耀技术。1.3App和App后台的通信(1)用HTTP协议还是私有协议;(2)用长连接还是短连接;(3)通信数据格式(JSON、XML)1.4选择服务器(1)传统IDC;(2)云服务器。1.5选择开发语言(1)不同语言有其擅长的业务场景和性能特性;(2)考虑开发效率和运行效率;(3)同一个项目不同业务逻辑可以用不同语言实现。1.6敏捷开发(1)Sprint计划会议;(2)迭代开发;(3)每日例会;(4)评审会议;(5)回顾会议;(6)及时反馈。2App后台基础技术2.1从业务逻辑提炼API接口从业务逻辑到提炼API可分为下面6个阶段:(1)业务逻辑思维导图;根据需求抽象出业务逻辑。(2)功能-业务逻辑思维导图;支撑业务逻辑的功能模块,(3)基本功能模块关系;功能模块设计;(4)功能模块设计UML;(5)设计API;(6)编写API文档。Swagger-UI在线API测试文档,测试驱动开发(TDD)。2.2设计API的要点(1)根据对象设计API;(2)API命名规范;(3)API安全性;(4)API返回数据;(5)图片处理方式;(6)返回的提示信息;(7)在线API测试文档;(8)API版本升级。2.3选择合适的数据库产品(1)Redis、MongoDB、MySQL2.4选择消息队列产品(1)消息队列一般都包含3个角色:队列服务端、队列生产者、队列消费者;(2)常见消息队列产品,RabbitMQ、Redis、ZeroMQ、ActiveMQ、RocketMQ。2.5分布式服务(1)远程服务,REST、RPC。2.6搜索技术(1)开源搜索项目,Lucene、Solr、ElasticSearch、Sphinx、CoreSeek。2.7定时任务(1)Linux定制任务Crontab;(2)JavaQuartz;(3)PythonAPScheduler;3App后台核心技术3.1用户验证方案(1)使用HTTPS协议;(2)使用密钥+令牌。3.2通信安全(1)URL签名;(2)AES对称加密;3.3短信服务(1)选择短信平台;3.4高效更新数据(1)内容的推拉;(2)增量更新。3.5图片处理(1)APP本地缓存图片;(2)不同尺寸图片动态生成。3.6视频处理(1)FFmpeg。3.7资源文件(1)AndroidAPK文件,通过Android-APKtool获取文件的基本信息;(2)iOSIPA文件。3.8文件系统(1)云存储,CDN;(2)分布式文件系统。3.9ELK日志分析平台(1)Logstash、ElasticSearch、Kibana。3.10Docker容器(1)Docker构建一致的开发环境;4App后台运维4.1Linux,App后台应用最广泛的系统(1)常用命令,top、ps、netstat、lsof、traceroute4.2Nginx,App后台HTTP服务的利器(1)HTTP服务;(2)负载均衡。4.3MySQL,App后台最常用的数据库(1)存储引擎,MyISAM、InnoDB;(2)索引;(3)分库分表,MyCat。4.4Redis,App后台高性能的缓存系统(1)常用数据结构;(2)集群,Twemproxy,Codis;(3)持久化。4.5MongoDB,App后台新兴的数据库(1)高可用集群;(2)LBS。5App后台架构剖析5.1聊天App后台架构(1)移动互联网的网络特性,弱网络性、对流量敏感;(2)协议,XMPP、MQTT、ActivitySync、TCP自定义;(3)整体架构,主要包括连接层、业务层、数据层;(4)消息推拉模式;(5)数据库架构,单机部署、读写分离、分表分库;(6)缓存架构,单台缓存、分布式缓存、主从缓存。5.2LBSApp后台架构(1)地理坐标,GPS、基站、AGPS(GPS+基站结合)、WiFi定位;(2)基于MongoDB;(3)推送服务。6App后台架构的演进6.1架构的核心要素软件架构是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计。App后台架构可以定义为由App后台各个组件的功能描述、相互关系构成的整体系统。App后台架构的核心要素:(1)高性能;(2)高可用;(3)可伸缩;(4)可扩展(5)安全性。6.2架构选型的要点(1)用成熟稳定的开源软件;(2)尽可能使用云服务。6.3架构的演进(1)单机部署;(2)分布式部署;(3)服务化。