温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
Python
原生
构建
应对
海量
用户
数据
扩展
Web
应用
内 容 简 介 本书以一个应用开发贯穿始终,从云原生和微服务的概念原理讲起,使用 Python 构建云原生应用,并使用 React 构建 Web 视图。为了应对大规模的互联网流量,使用了 Flux 构建 UI 和事件溯源及 CQRS模式。考虑到 Web 应用的安全性,本书对此也给出了解决方案。书中对于关键步骤进行了详细讲解并给出运行结果。读者可以利用 Docker 容器、CI/CD 工具,敏捷构建和发布本书示例中的应用到 AWS、Azure这样的公有云平台上,再利用平台工具对基础设施和应用的运行进行持续监控。本书适合全栈工程师和想要使用 Python 构建云原生应用的开发者学习。Copyright 2017 Packt Publishing.First published in the English language under the title Cloud Native Python.本书简体中文版专有出版权由 Packt Publishing 授予电子工业出版社。未经许可,不得以任何方式复制或抄袭本书的任何部分。专有出版权受法律保护。版权贸易合同登记号 图字:01-2017-6967 图书在版编目(CIP)数据 Python 云原生:构建应对海量用户数据的高可扩展 Web 应用/(印)马尼什塞西(Manish Sethi)著;宋净超译.北京:电子工业出版社,2018.7 书名原文:Cloud Native Python ISBN 978-7-121-34177-9.P.马 宋.网页制作工具程序设计.TP393.092 中国版本图书馆 CIP 数据核字(2018)第 099661 号 策划编辑:孙奇俏 责任编辑:牛 勇 印 刷:装 订:出版发行:电子工业出版社 北京市海淀区万寿路 173 信箱 邮编 100036 开 本:787980 1/16 印张:20.25 字数:405 千字 版 次:2018 年 7 月第 1 版 印 次:2018 年 7 月第 1 次印刷 定 价:89.00 元 凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888,88258888。质量投诉请发邮件至 ,盗版侵权举报请发邮件至 。本书咨询联系方式:010-51260888-819,。译者序 本书主要讲解如何使用 Python 来构建云原生应用,其中包含了对云原生应用架构和微服务概念的解析,还包括了使用 React 来构建 Web UI,使用 MongoDB 来存储数据,使用Kafka 消息队列、CQRS 和事件溯源的方式来支持分布式处理等内容。然后详细演示了如何使用 Jenkins 来做 CI/CD,将应用部署到 AWS 或 Azure 云平台上。整本书一气呵成,一个示例贯穿始终,即构建一个“微博”应用。记得当年我还在读大学的时候,还使用 Java 构建过类似微博的 Web 应用,那也是我第一次构建 Web 应用,但是那时只是为了学习 JSP 和 Java Web 应用,也没有用到什么开发框架,而且只是在本地运行。我在看到本书时有种相见恨晚的感觉,如果当初我就读了这本书,那么使用 Python构建一个可扩展的 Web 应用不是轻而易举吗?还可以将应用程序部署到云平台上,让自己的成果公之于众,这对于自己的技术生涯也是不小的激励。本书给出了构建应用的详细步骤和代码示例,甚至每一步的输出结果和页面截图都给出了,所以本书十分适合全栈工程师和想要使用 Python 构建云原生应用的开发者学习。Python 也是我最喜欢的语言之一,它简单,优美,容易使用,而且是很多操作系统都内置支持的编程语言。Python 有着众多第三方包和框架,使用它不仅可以快速开发 Web 应用,还可以进行数据分析、机器学习,甚至调用其他语言,所以有人将 Python 称为“胶水”语言。现在使用 Python 构建云原生应用又成了广大 Python 爱好者的新方向。在翻译本书前,我已经翻译过 Cloud Native Go 这本书,同时在很多会议和网站上分享过有关云原生的话题。还创建了“云原生应用架构”公众号(CloudNativeGo),欢迎读者朋 友 多 多 关 注。也 欢 迎 大 家 通 过 我 的Twitter(jimmysongio)、GitHub(https:/ 与云原生应用布道者 宋净超 2018 年 5 月于北京 Python 云原生:构建应对海量用户数据的高可扩展 Web 应用【IV】推荐序 2000 年左右是“.com”的繁荣时代,那时我使用 C+和 Perl 开发 Web 应用程序。那个年代人们必须亲自去 ISP 数据中心安装机器并进行 RAID 配置。20032006 年,应用开发转向了依靠基于虚拟机的共享主机。而如今,有了像 AWS、Azure、Google Cloud 这样的云计算提供商,以及 Python、Ruby 和 Scala 等编程语言,使得创建和扩展网站像玩玩具一样简单。虽然云计算的出现使创建网络应用变得更简单,但是云计算的新工具、新部署方法和新工作流程不断出现,增加了学习云计算的难度。举个例子,开发人员应该使用哪些计算产品呢?软件即服务,平台即服务,还是基础架构即服务平台?开发人员应该选择 Docker还是普通的虚拟机来部署?整个软件架构应该遵循 MVC 还是微服务模型?本书作者 Manish 针对 Python 开发人员,全面讲解了云计算领域的各项技术。本书从云计算的分类及其产品基础开始讲起。书中的大多数章节都是独立的,读者可以选择阅读自己感兴趣的部分。本书简单明了地解释了像 CI 和 Docker 这样的复杂技术,满足了软件开发的敏捷模型所要求的,开发人员在几天(而不是几周)内学会使用新工具。本书给出了安装、配置的流程,并辅以代码,以使开发人员快速掌握所需的知识,从而提高工作效率。本书尤其适合全栈开发者阅读,同时也适合新手和中级 Python 开发人员学习。本书旨在帮助 Python 开发者快速掌握当今软件开发所需要使用的工具和技术。云计算的复杂性在于细节,无论是部署流程,管理基础设施,保护安全,还是建立工具生态系统,这些选择都将对正在构建软件应用的开发及运维团队产生深远的影响。Ankur Gupta NumerateLabs LLP 创始人 ImportPython&DjangoWeekly 主编 关于作者【V】关于作者 Manish Sethi 是一名在印度班加罗尔工作的工程师。在他的职业生涯中,曾为初创公司和财富 10 强公司工作,帮助企业采用云原生方法来构建大规模可扩展产品。他经常花时间学习和使用新技术,并积极地使用无服务器架构、机器学习和深度学习等方法解决实际问题。他还撰写博客,在聚会上发表演讲,从而为班加罗尔DevOps和Docker社区贡献自己的所学。我要感谢我的兄弟 Mohit Sethi 和我的母亲 Neelam Sethi,在我的职业生涯中和编写本书的过程中,他们给了我非常多的鼓励和支持。Python 云原生:构建应对海量用户数据的高可扩展 Web 应用【VI】关于审校者 Sanjeev Kumar Jaiswal 是一名拥有 8 年行业经验的计算机工程师。他平时使用 Perl、Python 和 GNU/Linux 处理事务。他目前从事渗透测试、源代码评审、安全设计和实施以及Web 和云安全项目开发相关工作。目前,Sanjeev 也在学习 NodeJS 和 React Native。他喜欢教学,会教一些工程专业的学生和 IT 专业人员。在过去的 8 年中他一直利用业余时间教学。2010 年,他秉承通过分享来学习的理想,为计算机科学专业的学生和 IT 专业人员建立了 Alien Coders(http:/www.aliencoders.org)社区,这在印度的工程专业的学生中广受好评。可以通过 Facebook 主页 http:/ Twitter 上aliencoders以及 GitHub 页面 https:/ 关注他。他撰写了 Instant PageSpeed Optimization 一书,并与人共同撰写了 Learning Django Web Development,这两本书都已由 Packt 出版。他已为 Packt 审校了 7 本以上的书籍,并期待为 Packt 和其他出版商编写或审校更多书籍。Mohit Sethi 是一名解决方案架构师,在云计算、存储、分布式系统、数据分析和机器学习等领域的 IaaS、PaaS 和 SaaS 方面,有超过 10 年的构建和管理产品的经验。此前,他曾在硅谷初创公司、财富 10 强公司和国防组织工作。他是一名有 12 年以上开源经验的贡献者,并且在班加罗尔举办 DevOps 聚会已经超过 3 年。可以通过 Twitter(https:/ GitHub(https:/ 前言.XIII 1 云原生应用和微服务简介.1 云计算简介.2 软件即服务.3 平台即服务.4 基础设施即服务.4 云原生概念.5 云原生为何物?为何重要.5 云原生运行时环境.6 云原生架构.6 理解十二要素应用.9 设置 Python 环境.11 安装 Git.11 安装和配置 Python.19 熟悉 GitHub 和 Git 命令.26 本章小结.27 2 使用 Python 构建微服务.29 Python 概念解析.29 模块.29 函数.30 微服务模型.31 构建微服务.32 Python 云原生:构建应对海量用户数据的高可扩展 Web 应用【VIII】构建 user 资源的方法.38 构建 tweet 资源的方法.47 测试 RESTful API.52 单元测试.53 本章小结.56 3 使用 Python 构建 Web 应用.57 应用入门.58 创建应用程序用户.59 使用 Observable 和 AJAX.61 绑定数据到 adduser 模板.63 用户发送推文.65 在推文模板上使用 Observable 和 AJAX.67 绑定数据到 addtweet 模版.69 CORS跨源资源共享.71 Session 管理.72 Cookies.75 本章小结.76 4 与数据服务交互.77 MongoDB 有什么优势,为什么要使用它.77 MongoDB 中的术语.78 安装 MongoDB.79 初始化 MongoDB 数据库.80 在微服务中集成 MongoDB.82 处理 user 资源.83 处理推文资源.90 本章小结.93 目录【IX】5 使用 React 构建 Web 视图.95 理解 React.95 配置 React 环境.96 安装 node.96 创建 package.json.97 使用 React 构建 webViews.98 在微服务中集成 Web 视图.106 用户验证.109 用户登录.109 用户注册.111 用户资料.114 用户注销.117 测试 React webViews.117 Jest.118 Selenium.118 本章小结.118 6 使用 Flux 来构建 UI 以应对大规模流量.119 Flux 介绍.119 Flux 概念.120 在 UI 中添加日期.121 使用 Flux 创建 UI.121 动作和分派器.122 数据源.125 本章小结.134 7 事件溯源与 CQRS.135 简介.136 理解事件溯源.138 事件溯源定律.140 Python 云原生:构建应对海量用户数据的高可扩展 Web 应用【X】CQRS 介绍.142 CQRS 架构的优点.144 事件溯源与 CQRS 面临的挑战.145 应对挑战.146 解决问题.146 使用 Kafka 作为事件存储.151 使用 Kafka 做事件溯源.152 工作原理.154 本章小结.154 8 Web 应用的安全性.155 网络安全性和应用安全性.155 网络应用栈.155