作品简介

《App后台开发运维和架构实践》通过阐述移动互联网中App后台开发的特点,梳理了App后台开发中会遇到的各个技术点,给出了生产环境常用软件的实战运维经验总结,剖析了常见App后台技术架构设计,为读者呈现一幅包括技术选型、后台搭建、性能优化、运维实践、架构设计的App后台开发蓝图。

《App后台开发运维和架构实践》的目标读者是对技术感兴趣的产品经理、刚入行的App后台开发人员,以及从传统软件行业转向App后台开发的技术人员。

曾健生,曾任职于广州市赢靖信息科技有限公司,负责社交App后台研发。目前就职bmob后端云从事云服务方面的研发工作。

作品目录

  • 推荐序
  • 十八般兵器入门
  • 前言
  • 致谢
  • 第1章 App后台入门
  • 1.1 App后台的功能
  • 场景一:
  • 场景二:
  • 总结:
  • 1.2 App后台架构
  • 1.不怕被别人的架构文章搞晕
  • 2.能快速地整理合适的架构
  • 1.架构是和业务紧密相关
  • 2.架构的演变是由业务驱动
  • 3.架构不是为了炫耀技术
  • 总结:
  • 1.3 App和App后台的通信
  • 1.用HTTP协议还是私有协议?
  • 2.App和App后台通信使用长连接还是短连接?
  • 3.App和后端是怎么通信的?
  • 4.后端是返回给API的数据格式
  • 1.4 App后台和Web后端的区别
  • 1.App后台要慎重考虑网络传输的流量,主要在API设计、图片处理上
  • 2.移动手机弱网络环境
  • 3.手机电量有限
  • 1.5 选择服务器
  • 1.是选择传统的IDC还是云服务器
  • 2.笔者建议
  • 1.6 选择编程语言
  • 1.每种编程语言都有自己擅长的业务场景和性能特性
  • 2.选择开发效率最高的编程语言
  • 3.一个大忌是用两套不同的编程语言维护一个相同的业务逻辑
  • 4.一个系统中,不同的业务逻辑可以用不同的编程语言实现
  • 1.7 快速入门新技术
  • 1.7.1 思维模式
  • 1.7.2 4种快速入门新技术的方法
  • 1.阅读软件安装的README文件和INSTALL文件
  • 2.阅读官网的文档
  • 3.阅读源码里的example文件夹
  • 4.在搜索引擎网站中搜索
  • 1.8 App是怎样炼成的
  • 1.8.1 项目启动阶段
  • 1.8.2 研发阶段
  • 1.8.3 测试阶段
  • 1.8.4 正式推出阶段
  • 总结
  • 1.9 最适合App的开发模式——敏捷开发
  • 1.9.1 Sprint计划会议
  • 1.9.2 日常开发
  • 1.9.3 每日例会
  • 1.9.4 测试和修复Bug
  • 1.9.5 评审会议
  • 1.9.6 回顾会议
  • 1.9.7 及时反馈
  • 1.9.8 总结
  • 第2章 App后台基础技术
  • 2.1 从App业务逻辑中提炼API接口
  • 2.1.1 业务逻辑思维导图
  • 2.1.2 功能—业务逻辑思维导图
  • 2.1.3 基本功能模块关系
  • 2.1.4 功能模块接口UML(设计出API)
  • 2.1.5 编写在线API测试文档
  • 2.1.6 设计稿标注API
  • 2.2 设计API的要点
  • 1.根据对象设计API
  • 2.API的命名
  • 3.API的安全性
  • 4.API所返回的数据
  • 5.图片的处理
  • 6.返回的提示信息
  • 7.在线API测试文档
  • 8.在App客户端启动时调用一个API获取必要的初始化信息
  • 9.关于API的版本升级问题
  • 2.3 如何选择合适的数据库产品
  • 2.3.1 Redis,MongoDB,MySQL读写数据的区别
  • 2.3.2 Redis,MongoDB,MySQL查找数据的区别
  • 2.3.3 Redis,MongoDB,MySQL适用场景
  • 1.Redis适用场景
  • 2.MongoDB适用场景
  • (3)MySQL适用场景
  • 2.4 如何选择消息队列软件
  • 2.4.1 为什么要用消息队列?
  • 2.4.2 消息队列的工作流程
  • 2.4.3 常见的一些消息队列产品
  • 1.RabbitMQ
  • 2.Redis
  • 3.ZeroMQ
  • 4.ActiveMQ
  • 2.5 使用分布式服务实现业务的复用
  • 2.5.1 巨无霸系统的危害
  • 1.维护上的麻烦
  • 2.代码管理上的不方便
  • 3.数据库连接资源的耗尽
  • 2.5.2 远程服务的优点
  • 2.5.3 远程服务的实现
  • 1.REST
  • 2.PRC
  • 3.开源的RPC库
  • 2.6 搜索技术入门
  • 2.6.1 一个简单的搜索例子
  • 2.6.2 搜索技术的基本原理
  • 2.6.3 常见的开源搜索软件介绍
  • 1.Lucene
  • 2.Solr
  • 3.ElasticSearch
  • 4.Sphinx
  • 5.CoreSeek
  • 2.7 定时任务
  • 2.7.1 Linux定时任务Crontab
  • 2.7.2 在后台轻松管理各种各样的定时任务
  • 1.APScheduler的安装
  • 2.一个创建定时任务的例子
  • 第3章 App后台核心技术
  • 3.1 用户验证方案
  • 3.1.1 使用HTTPS协议
  • 3.1.2 基本的用户登录方案
  • 3.2 App通信安全
  • 3.2.1 URL签名
  • 3.2.2 AES对称加密
  • 1.对称加密的原理
  • 2.AES算法加密App后台返回的token数据
  • 3.AES算法加密请求过程中所有的敏感数据
  • 3.2.3 更进一步的通信安全
  • 3.3 短信服务
  • 3.3.1 App后台发送短信简介
  • 3.3.2 选择短信平台
  • 3.3.3 建立可靠的短信服务
  • 3.4 处理表情的一些技巧
  • 3.4.1 表情在MySQL的存储
  • 3.4.2 当文字中夹带表情的处理
  • 3.4.3 Openfire中发送表情引起连接断开的问题
  • 3.5 高效更新数据
  • 3.5.1 内容的推拉
  • 3.5.2 数据增量更新策略
  • 3.6 图片处理
  • 3.7 视频处理
  • 3.7.1 FFmpeg简介
  • 3.7.2 后台调用FFmpeg的功能
  • 3.8 获取APK和IPA文件里的资源
  • 3.8.1 Android的APK文件
  • 1.apk文件的结构
  • 2.如何获取APK文件的基本信息
  • 3.8.2 iOS的IPA文件
  • 1.IPA文件结构
  • 2.如何获取IPA文件的信息
  • 3.9 文件系统
  • 3.9.1 文件云存储服务
  • 3.9.2 架设文件系统
  • 1.分布式文件存储系统
  • 2.图片水印,缩放和裁剪
  • 3.CDN
  • 3.10 ELK日志分析平台
  • 3.10.1 基本模块
  • 3.10.2 日志分析流程
  • 3.11 Docker构建一致的开发环境
  • 3.11.1 Docker原理
  • 3.11.2 搭建一致的开发环境
  • 第4章 Linux——App后台应用最广泛的系统
  • 4.1 基本的系统优化
  • 4.1.1 开机自启动服务优化
  • 4.1.2 增大文件描述符
  • 4.2 常用的命令
  • 4.2.1 全面了解系统资源情况——top
  • 1.什么是交换区(Swap)
  • 2.cached和buffers区别
  • 4.2.2 显示进程状态——ps
  • 4.2.3 查看网络相关信息——netstat
  • 4.2.4 查看某个进程打开的所有文件——lsof
  • 4.2.5 跟踪数据到达主机所经路由——traceroute
  • 4.2.6 文件下载/上传工具——“ssh secure shell client”和“lrzsz”
  • 1.ssh secure shell client
  • 2.lrzsz
  • 4.2.7 查看程序的依赖库——LD_DEBUG
  • 4.2.8 进程管理利器——superivisor
  • 4.3 故障案例分析
  • 1.进程管理软件引起的最大连接数限制
  • 2.占满磁盘空间引起网站无法登录的问题
  • 第5章 Nginx——App后台HTTP服务的利器
  • 5.1 简介
  • 5.2 基本原理
  • 5.2.1 工作模型
  • 5.2.2 进程解析
  • 5.3 常用配置
  • 5.3.1 Nginx的全局配置
  • 5.3.2 event配置
  • 5.3.3 http配置
  • 5.3.4 负载均衡配置
  • 5.3.5 server虚拟主机配置
  • 5.3.6 location配置
  • 5.3.7 HTTPS的配置
  • 5.3.8 下载App的配置
  • 5.3.9 生产环境中修改配置的良好习惯
  • 5.4 性能统计
  • 5.5 实现负载均衡的方案
  • 5.6 用Nginx处理业务逻辑
  • 第6章 MySQL——App后台最常用的数据库
  • 6.1 基本架构
  • 6.2 选择版本
  • 6.3 配置文件详解
  • 6.4 软件优化
  • 6.4.1 正确使用MyISAM和InnoDB存储引擎
  • 6.4.2 正确使用索引
  • 6.4.3 避免使用select*
  • 6.4.4 字段尽可能地设置为NOT NULL
  • 6.5 硬件优化
  • 6.5.1 增加物理内存
  • 6.5.2 增加应用缓存
  • 6.5.3 用固态硬盘代替机械硬盘
  • 6.5.4 SSD硬盘+SATA硬盘混合存储方案
  • 6.6 架构优化
  • 6.6.1 分表
  • 6.6.2 读写分离
  • 6.6.3 分库
  • 6.7 SQL慢查询分析
  • 6.8 云数据库简介
  • 6.9 灵活的存储结构
  • 6.10 故障排除案例
  • 性能低下的查询引起的故障
  • 第7章 Redis——App后台高性能的缓存系统
  • 7.1 Redis简介
  • 7.2 Redis的常用数据结构及应用场景
  • 7.2.1 string——存储简单的数据
  • 1.简介
  • 2.数据模型
  • 3.应用场景
  • 7.2.2 hash——存储对象的数据
  • 1.简介
  • 2.数据模型
  • 3.应用场景
  • 7.2.3 list——模拟队列操作
  • 1.简介
  • 2.数据模型
  • 3.应用场景
  • 7.2.4 set——无序且不重复的元素集合
  • 1.简介
  • 2.数据模型
  • 3.应用场景
  • 7.2.5 sorted set——有序且不重复的元素集合
  • 1.简介
  • 2.数据模型
  • 3.应用场景
  • 7.3 内存优化
  • 7.3.1 监控内存使用的状况
  • 7.3.2 优化存储结构
  • 7.3.3 限制使用的最大内存
  • 7.3.4 设置过期时间
  • 1.惰性删除
  • 2.定期删除
  • 7.4 集群
  • 7.4.1 客户端分片
  • 7.4.2 Twemproxy
  • 7.4.3 Codis
  • 7.4.4 Redis 3.0集群
  • 7.4.5 云服务器上的集群服务
  • 1.动态扩容
  • 2.数据多备
  • 3.自动容灾
  • 4.实惠
  • 7.5 持久化
  • 7.5.1 RDB
  • 7.5.2 AOF
  • 7.6 故障排除案例
  • Redis崩溃的故障
  • 第8章 MongoDB——App后台新兴的数据库
  • 8.1 简介
  • 8.2 核心机制解析
  • 8.2.1 MMAP(内存文件映射)
  • 8.2.2 Journal日志
  • 8.3 入门
  • 8.3.1 基本操作
  • 1.插入文档
  • 2.查找文档
  • 3.更新文档
  • 4.删除文档
  • 8.3.2 数组操作
  • 8.3.3 实例演示MySQL和MongoDB设计数据库的区别
  • 1.使用MySQL的例子
  • 2.使用MongoDB的例子
  • 8.4 高可用集群
  • 8.4.1 主从
  • 8.4.2 副本集
  • 8.4.3 分片
  • 8.5 LBS——地理位置查询
  • 1.使用MongoDB查找附近的人
  • 2.查找某个范围内的坐标
  • 8.6 MongoDB 3.0版本的改进
  • 8.6.1 灵活的存储架构
  • 8.6.2 性能提升7~10倍
  • 8.6.3 存储空间最多减少80%
  • 8.6.4 运维成本最多降低95%
  • 第9章 App后台架构剖析
  • 9.1 聊天App后台架构
  • 9.1.1 移动互联网的网络特性
  • 1.弱网络性
  • 2.对流量敏感
  • 9.1.2 协议
  • 1.MySQL协议格式
  • 2.Redis协议格式
  • 1.基于队列的消息协议
  • 2.基于版本号的消息协议
  • 9.1.3 整体架构
  • 1.连接层
  • 2.业务层
  • 3.持久层
  • 4.工作流程
  • 9.2 社交App后台架构
  • 9.2.1 基本表结构
  • 9.2.2 推拉模式
  • 1.推模式
  • 2.拉模式
  • 3.推拉模式的总结
  • 4.微博的推拉模式
  • 9.2.3 数据库架构的演进
  • 1.数据库自增id
  • 2.分表分库策略
  • (1)按hash拆分
  • (2)按时间拆分
  • (3)综合的策略
  • 9.2.4 缓存架构的演进
  • 1.分布式缓存
  • 2.主从缓存结构
  • 3.防止缓存失效的措施
  • 9.3 LBSApp后台架构
  • 9.3.1 地理坐标详解
  • 9.3.2 查找附近的人
  • 1.MySQL的空间数据库
  • 2.geohash
  • 3.MongoDB
  • 9.3.3 基于MongoDB的LBS后台架构演进
  • 1.副本集架构
  • 2.分片架构
  • 9.4 推送服务器后台架构
  • 9.4.1 Android推送
  • Comet
  • Message
  • Web
  • thrid-part
  • 1.App连接推送服务器的流程
  • 2.后台推送消息到App的流程
  • 3.App获取离线消息的流程
  • 9.4.2 iOS推送
  • 1.APNS原理
  • 2.APNS推送协议分析
  • 3.iOS推送服务器架构
  • 9.5 获得更多App后台架构资料
  • 1.InfoQ(http://www.infoq.com/cn)
  • 2.七牛开发者最佳实践日(http://best.qiniu.com/archives/category/developers-best-practice)
  • 3.UPYUN Open Talk(http://opentalk.upyun.com/show/issues)
  • 4.微信公众号“高可用架构”(微信号:ArchNotes)
  • 5.新浪微博@微博平台架构
  • 第10章 App后台架构的演进
  • 10.1 架构的核心要素
  • 10.1.1 高性能
  • 1.App层
  • 2.网络传输层
  • 3.应用服务层
  • 4.文件服务层
  • 5.缓存层
  • 6.数据库层
  • 10.1.2 高可用
  • 10.1.3 可伸缩
  • 10.1.4 可扩展
  • 10.1.5 安全性
  • 10.2 架构选型的要点
  • 10.2.1 用成熟稳定的开源软件
  • 10.2.2 尽可能使用云服务
  • 1.DevStore(http://www.devstore.cn/)
  • 2.百度APIstore(http://apistore.baidu.com/)
  • 10.3 架构的演进
  • 10.3.1 单机部署
  • 1.为什么要加入负载均衡ULB?
  • 2.为什么一开始就使用Redis?
  • 3.架构中不包含文件服务
  • 10.3.2 分布式部署
  • 10.3.3 服务化
  • 10.4 架构的特点
  • 10.4.1 每个App的后台架构不会完全一样
  • 10.4.2 架构的演进是由业务驱动的
  • 10.4.3 架构不是为了炫耀技术
展开全部