logo
分类于: 计算机基础 人工智能

简介

App后台开发运维和架构实践

App后台开发运维和架构实践 7.2分

资源最后更新于 2020-03-29 04:50:44

作者:曾健生

出版社:出版社电子工业出版社

出版日期:2016-05

ISBN:9787121283802

文件格式: pdf

标签: 软件开发 产品经理 app 架构 后台开发

简介· · · · · ·

《App后台开发运维和架构实践》通过阐述移动互联网中App后台开发的特点,梳理了App后台开发中会遇到的各个技术点,给出了生产环境常用软件的实战运维经验总结,剖析了常见App后台技术架构设计,为读者呈现一幅包括技术选型、后台搭建、性能优化、运维实践、架构设计的App后台开发蓝图。《App后台开发运维和架构实践》的目标读者是对技术感兴趣的产品经理、刚入行的App后台开发人员,以及从传统软件行业转向App后台开发的技术人员。曾健生,曾任职于广州市赢靖信息科技有限公司,负责社交App后台研发。目前就职bmob后端云从事云服务方面的研发工作。

想要: 点击会收藏到你的 我的收藏,可以在这里查看

已收: 表示已经收藏

Tips: 注册一个用户 可以通过用户中心得到电子书更新的通知哦

目录

  1. 推荐序
  2. 十八般兵器入门
  3. 前言
  4. 致谢
  5. 第1章 App后台入门
  6. 1.1 App后台的功能
  7. 场景一:
  8. 场景二:
  9. 总结:
  10. 1.2 App后台架构
  11. 1.不怕被别人的架构文章搞晕
  12. 2.能快速地整理合适的架构
  13. 1.架构是和业务紧密相关
  14. 2.架构的演变是由业务驱动
  15. 3.架构不是为了炫耀技术
  16. 总结:
  17. 1.3 App和App后台的通信
  18. 1.用HTTP协议还是私有协议?
  19. 2.App和App后台通信使用长连接还是短连接?
  20. 3.App和后端是怎么通信的?
  21. 4.后端是返回给API的数据格式
  22. 1.4 App后台和Web后端的区别
  23. 1.App后台要慎重考虑网络传输的流量,主要在API设计、图片处理上
  24. 2.移动手机弱网络环境
  25. 3.手机电量有限
  26. 1.5 选择服务器
  27. 1.是选择传统的IDC还是云服务器
  28. 2.笔者建议
  29. 1.6 选择编程语言
  30. 1.每种编程语言都有自己擅长的业务场景和性能特性
  31. 2.选择开发效率最高的编程语言
  32. 3.一个大忌是用两套不同的编程语言维护一个相同的业务逻辑
  33. 4.一个系统中,不同的业务逻辑可以用不同的编程语言实现
  34. 1.7 快速入门新技术
  35. 1.7.1 思维模式
  36. 1.7.2 4种快速入门新技术的方法
  37. 1.阅读软件安装的README文件和INSTALL文件
  38. 2.阅读官网的文档
  39. 3.阅读源码里的example文件夹
  40. 4.在搜索引擎网站中搜索
  41. 1.8 App是怎样炼成的
  42. 1.8.1 项目启动阶段
  43. 1.8.2 研发阶段
  44. 1.8.3 测试阶段
  45. 1.8.4 正式推出阶段
  46. 总结
  47. 1.9 最适合App的开发模式——敏捷开发
  48. 1.9.1 Sprint计划会议
  49. 1.9.2 日常开发
  50. 1.9.3 每日例会
  51. 1.9.4 测试和修复Bug
  52. 1.9.5 评审会议
  53. 1.9.6 回顾会议
  54. 1.9.7 及时反馈
  55. 1.9.8 总结
  56. 第2章 App后台基础技术
  57. 2.1 从App业务逻辑中提炼API接口
  58. 2.1.1 业务逻辑思维导图
  59. 2.1.2 功能—业务逻辑思维导图
  60. 2.1.3 基本功能模块关系
  61. 2.1.4 功能模块接口UML(设计出API)
  62. 2.1.5 编写在线API测试文档
  63. 2.1.6 设计稿标注API
  64. 2.2 设计API的要点
  65. 1.根据对象设计API
  66. 2.API的命名
  67. 3.API的安全性
  68. 4.API所返回的数据
  69. 5.图片的处理
  70. 6.返回的提示信息
  71. 7.在线API测试文档
  72. 8.在App客户端启动时调用一个API获取必要的初始化信息
  73. 9.关于API的版本升级问题
  74. 2.3 如何选择合适的数据库产品
  75. 2.3.1 Redis,MongoDB,MySQL读写数据的区别
  76. 2.3.2 Redis,MongoDB,MySQL查找数据的区别
  77. 2.3.3 Redis,MongoDB,MySQL适用场景
  78. 1.Redis适用场景
  79. 2.MongoDB适用场景
  80. (3)MySQL适用场景
  81. 2.4 如何选择消息队列软件
  82. 2.4.1 为什么要用消息队列?
  83. 2.4.2 消息队列的工作流程
  84. 2.4.3 常见的一些消息队列产品
  85. 1.RabbitMQ
  86. 2.Redis
  87. 3.ZeroMQ
  88. 4.ActiveMQ
  89. 2.5 使用分布式服务实现业务的复用
  90. 2.5.1 巨无霸系统的危害
  91. 1.维护上的麻烦
  92. 2.代码管理上的不方便
  93. 3.数据库连接资源的耗尽
  94. 2.5.2 远程服务的优点
  95. 2.5.3 远程服务的实现
  96. 1.REST
  97. 2.PRC
  98. 3.开源的RPC库
  99. 2.6 搜索技术入门
  100. 2.6.1 一个简单的搜索例子
  101. 2.6.2 搜索技术的基本原理
  102. 2.6.3 常见的开源搜索软件介绍
  103. 1.Lucene
  104. 2.Solr
  105. 3.ElasticSearch
  106. 4.Sphinx
  107. 5.CoreSeek
  108. 2.7 定时任务
  109. 2.7.1 Linux定时任务Crontab
  110. 2.7.2 在后台轻松管理各种各样的定时任务
  111. 1.APScheduler的安装
  112. 2.一个创建定时任务的例子
  113. 第3章 App后台核心技术
  114. 3.1 用户验证方案
  115. 3.1.1 使用HTTPS协议
  116. 3.1.2 基本的用户登录方案
  117. 3.2 App通信安全
  118. 3.2.1 URL签名
  119. 3.2.2 AES对称加密
  120. 1.对称加密的原理
  121. 2.AES算法加密App后台返回的token数据
  122. 3.AES算法加密请求过程中所有的敏感数据
  123. 3.2.3 更进一步的通信安全
  124. 3.3 短信服务
  125. 3.3.1 App后台发送短信简介
  126. 3.3.2 选择短信平台
  127. 3.3.3 建立可靠的短信服务
  128. 3.4 处理表情的一些技巧
  129. 3.4.1 表情在MySQL的存储
  130. 3.4.2 当文字中夹带表情的处理
  131. 3.4.3 Openfire中发送表情引起连接断开的问题
  132. 3.5 高效更新数据
  133. 3.5.1 内容的推拉
  134. 3.5.2 数据增量更新策略
  135. 3.6 图片处理
  136. 3.7 视频处理
  137. 3.7.1 FFmpeg简介
  138. 3.7.2 后台调用FFmpeg的功能
  139. 3.8 获取APK和IPA文件里的资源
  140. 3.8.1 Android的APK文件
  141. 1.apk文件的结构
  142. 2.如何获取APK文件的基本信息
  143. 3.8.2 iOS的IPA文件
  144. 1.IPA文件结构
  145. 2.如何获取IPA文件的信息
  146. 3.9 文件系统
  147. 3.9.1 文件云存储服务
  148. 3.9.2 架设文件系统
  149. 1.分布式文件存储系统
  150. 2.图片水印,缩放和裁剪
  151. 3.CDN
  152. 3.10 ELK日志分析平台
  153. 3.10.1 基本模块
  154. 3.10.2 日志分析流程
  155. 3.11 Docker构建一致的开发环境
  156. 3.11.1 Docker原理
  157. 3.11.2 搭建一致的开发环境
  158. 第4章 Linux——App后台应用最广泛的系统
  159. 4.1 基本的系统优化
  160. 4.1.1 开机自启动服务优化
  161. 4.1.2 增大文件描述符
  162. 4.2 常用的命令
  163. 4.2.1 全面了解系统资源情况——top
  164. 1.什么是交换区(Swap)
  165. 2.cached和buffers区别
  166. 4.2.2 显示进程状态——ps
  167. 4.2.3 查看网络相关信息——netstat
  168. 4.2.4 查看某个进程打开的所有文件——lsof
  169. 4.2.5 跟踪数据到达主机所经路由——traceroute
  170. 4.2.6 文件下载/上传工具——“ssh secure shell client”和“lrzsz”
  171. 1.ssh secure shell client
  172. 2.lrzsz
  173. 4.2.7 查看程序的依赖库——LD_DEBUG
  174. 4.2.8 进程管理利器——superivisor
  175. 4.3 故障案例分析
  176. 1.进程管理软件引起的最大连接数限制
  177. 2.占满磁盘空间引起网站无法登录的问题
  178. 第5章 Nginx——App后台HTTP服务的利器
  179. 5.1 简介
  180. 5.2 基本原理
  181. 5.2.1 工作模型
  182. 5.2.2 进程解析
  183. 5.3 常用配置
  184. 5.3.1 Nginx的全局配置
  185. 5.3.2 event配置
  186. 5.3.3 http配置
  187. 5.3.4 负载均衡配置
  188. 5.3.5 server虚拟主机配置
  189. 5.3.6 location配置
  190. 5.3.7 HTTPS的配置
  191. 5.3.8 下载App的配置
  192. 5.3.9 生产环境中修改配置的良好习惯
  193. 5.4 性能统计
  194. 5.5 实现负载均衡的方案
  195. 5.6 用Nginx处理业务逻辑
  196. 第6章 MySQL——App后台最常用的数据库
  197. 6.1 基本架构
  198. 6.2 选择版本
  199. 6.3 配置文件详解
  200. 6.4 软件优化
  201. 6.4.1 正确使用MyISAM和InnoDB存储引擎
  202. 6.4.2 正确使用索引
  203. 6.4.3 避免使用select*
  204. 6.4.4 字段尽可能地设置为NOT NULL
  205. 6.5 硬件优化
  206. 6.5.1 增加物理内存
  207. 6.5.2 增加应用缓存
  208. 6.5.3 用固态硬盘代替机械硬盘
  209. 6.5.4 SSD硬盘+SATA硬盘混合存储方案
  210. 6.6 架构优化
  211. 6.6.1 分表
  212. 6.6.2 读写分离
  213. 6.6.3 分库
  214. 6.7 SQL慢查询分析
  215. 6.8 云数据库简介
  216. 6.9 灵活的存储结构
  217. 6.10 故障排除案例
  218. 性能低下的查询引起的故障
  219. 第7章 Redis——App后台高性能的缓存系统
  220. 7.1 Redis简介
  221. 7.2 Redis的常用数据结构及应用场景
  222. 7.2.1 string——存储简单的数据
  223. 1.简介
  224. 2.数据模型
  225. 3.应用场景
  226. 7.2.2 hash——存储对象的数据
  227. 1.简介
  228. 2.数据模型
  229. 3.应用场景
  230. 7.2.3 list——模拟队列操作
  231. 1.简介
  232. 2.数据模型
  233. 3.应用场景
  234. 7.2.4 set——无序且不重复的元素集合
  235. 1.简介
  236. 2.数据模型
  237. 3.应用场景
  238. 7.2.5 sorted set——有序且不重复的元素集合
  239. 1.简介
  240. 2.数据模型
  241. 3.应用场景
  242. 7.3 内存优化
  243. 7.3.1 监控内存使用的状况
  244. 7.3.2 优化存储结构
  245. 7.3.3 限制使用的最大内存
  246. 7.3.4 设置过期时间
  247. 1.惰性删除
  248. 2.定期删除
  249. 7.4 集群
  250. 7.4.1 客户端分片
  251. 7.4.2 Twemproxy
  252. 7.4.3 Codis
  253. 7.4.4 Redis 3.0集群
  254. 7.4.5 云服务器上的集群服务
  255. 1.动态扩容
  256. 2.数据多备
  257. 3.自动容灾
  258. 4.实惠
  259. 7.5 持久化
  260. 7.5.1 RDB
  261. 7.5.2 AOF
  262. 7.6 故障排除案例
  263. Redis崩溃的故障
  264. 第8章 MongoDB——App后台新兴的数据库
  265. 8.1 简介
  266. 8.2 核心机制解析
  267. 8.2.1 MMAP(内存文件映射)
  268. 8.2.2 Journal日志
  269. 8.3 入门
  270. 8.3.1 基本操作
  271. 1.插入文档
  272. 2.查找文档
  273. 3.更新文档
  274. 4.删除文档
  275. 8.3.2 数组操作
  276. 8.3.3 实例演示MySQL和MongoDB设计数据库的区别
  277. 1.使用MySQL的例子
  278. 2.使用MongoDB的例子
  279. 8.4 高可用集群
  280. 8.4.1 主从
  281. 8.4.2 副本集
  282. 8.4.3 分片
  283. 8.5 LBS——地理位置查询
  284. 1.使用MongoDB查找附近的人
  285. 2.查找某个范围内的坐标
  286. 8.6 MongoDB 3.0版本的改进
  287. 8.6.1 灵活的存储架构
  288. 8.6.2 性能提升7~10倍
  289. 8.6.3 存储空间最多减少80%
  290. 8.6.4 运维成本最多降低95%
  291. 第9章 App后台架构剖析
  292. 9.1 聊天App后台架构
  293. 9.1.1 移动互联网的网络特性
  294. 1.弱网络性
  295. 2.对流量敏感
  296. 9.1.2 协议
  297. 1.MySQL协议格式
  298. 2.Redis协议格式
  299. 1.基于队列的消息协议
  300. 2.基于版本号的消息协议
  301. 9.1.3 整体架构
  302. 1.连接层
  303. 2.业务层
  304. 3.持久层
  305. 4.工作流程
  306. 9.2 社交App后台架构
  307. 9.2.1 基本表结构
  308. 9.2.2 推拉模式
  309. 1.推模式
  310. 2.拉模式
  311. 3.推拉模式的总结
  312. 4.微博的推拉模式
  313. 9.2.3 数据库架构的演进
  314. 1.数据库自增id
  315. 2.分表分库策略
  316. (1)按hash拆分
  317. (2)按时间拆分
  318. (3)综合的策略
  319. 9.2.4 缓存架构的演进
  320. 1.分布式缓存
  321. 2.主从缓存结构
  322. 3.防止缓存失效的措施
  323. 9.3 LBSApp后台架构
  324. 9.3.1 地理坐标详解
  325. 9.3.2 查找附近的人
  326. 1.MySQL的空间数据库
  327. 2.geohash
  328. 3.MongoDB
  329. 9.3.3 基于MongoDB的LBS后台架构演进
  330. 1.副本集架构
  331. 2.分片架构
  332. 9.4 推送服务器后台架构
  333. 9.4.1 Android推送
  334. Comet
  335. Message
  336. Web
  337. thrid-part
  338. 1.App连接推送服务器的流程
  339. 2.后台推送消息到App的流程
  340. 3.App获取离线消息的流程
  341. 9.4.2 iOS推送
  342. 1.APNS原理
  343. 2.APNS推送协议分析
  344. 3.iOS推送服务器架构
  345. 9.5 获得更多App后台架构资料
  346. 1.InfoQ(http://www.infoq.com/cn)
  347. 2.七牛开发者最佳实践日(http://best.qiniu.com/archives/category/developers-best-practice)
  348. 3.UPYUN Open Talk(http://opentalk.upyun.com/show/issues)
  349. 4.微信公众号“高可用架构”(微信号:ArchNotes)
  350. 5.新浪微博@微博平台架构
  351. 第10章 App后台架构的演进
  352. 10.1 架构的核心要素
  353. 10.1.1 高性能
  354. 1.App层
  355. 2.网络传输层
  356. 3.应用服务层
  357. 4.文件服务层
  358. 5.缓存层
  359. 6.数据库层
  360. 10.1.2 高可用
  361. 10.1.3 可伸缩
  362. 10.1.4 可扩展
  363. 10.1.5 安全性
  364. 10.2 架构选型的要点
  365. 10.2.1 用成熟稳定的开源软件
  366. 10.2.2 尽可能使用云服务
  367. 1.DevStore(http://www.devstore.cn/)
  368. 2.百度APIstore(http://apistore.baidu.com/)
  369. 10.3 架构的演进
  370. 10.3.1 单机部署
  371. 1.为什么要加入负载均衡ULB?
  372. 2.为什么一开始就使用Redis?
  373. 3.架构中不包含文件服务
  374. 10.3.2 分布式部署
  375. 10.3.3 服务化
  376. 10.4 架构的特点
  377. 10.4.1 每个App的后台架构不会完全一样
  378. 10.4.2 架构的演进是由业务驱动的
  379. 10.4.3 架构不是为了炫耀技术