展开全部

主编推荐语

Azure计算团队的产品架构师撰写,现代云原生应用开发入门的实践指南。

内容简介

本书旨在能够提供一些基础知识,来帮助开发者和架构师更从容地开启云原生应用之旅。

本书首先介绍一些分布式系统的基本原理及其与云原生应用的关系,然后再进一步介绍容器和函数等相关技术,接着,本书会介绍服务间的通信模式、服务的弹性和数据模式,并讨论在什么情况下应该使用这些技术,最后会总结一些经验性的东西,例如如何结合DevOps方法,怎么兼顾可移植性,以及一些最佳实践。这些最佳实践对于打造一个成功的云原生应用是非常有帮助的。

这本书不会手把手教你如何实现一个满足特定业务需求的云原生应用。但是在读完这本书之后,你一定会知道如何去设计、构建和运维一个成功的云原生应用。

目录

  • 版权信息
  • O'Reilly Media,Inc. 介绍
  • 译者序
  • 前言
  • 第1章 云原生简介
  • 1.1 分布式系统
  • 1.1.1 分布式系统的误区
  • 1.1.2 CAP定理
  • 1.2 十二要素应用
  • 1.3 可用性和服务等级协议
  • 1.4 本章小结
  • 第2章 云原生基础
  • 2.1 容器
  • 2.1.1 容器隔离等级
  • 2.1.2 容器编排
  • 2.1.3 Kubernetes概述
  • 2.1.4 Kubernetes和容器
  • 2.2 无服务器架构
  • 2.3 函数计算
  • 2.4 从虚拟机到云原生
  • 2.4.1 提升和转变
  • 2.4.2 应用的现代化改造
  • 2.4.3 应用的优化
  • 2.5 微服务
  • 2.5.1 微服务架构的优势
  • 2.5.2 微服务架构带来的挑战
  • 2.6 本章小结
  • 第3章 云原生应用的设计
  • 3.1 云原生应用的基础
  • 3.1.1 精益运营
  • 3.1.2 安全性
  • 3.1.3 可靠性与可用性
  • 3.1.4 可扩展性与成本
  • 3.2 云原生与传统架构的对比
  • 3.3 函数计算与服务
  • 3.3.1 函数计算的使用场景
  • 3.3.2 使用函数计算的考虑因素
  • 3.3.3 函数与服务的组合运用
  • 3.4 API设计与版本控制
  • 3.4.1 API的前后兼容
  • 3.4.2 语义版本号
  • 3.5 服务间的通信
  • 3.5.1 通信协议
  • 3.5.2 消息协议
  • 3.5.3 序列化的考虑因素
  • 3.5.4 幂等性
  • 3.5.5 请求与响应
  • 3.5.6 发布者与订阅者
  • 3.5.7 发布者/订阅者模式与请求/响应模式间的选择
  • 3.5.8 同步与异步
  • 3.6 网关
  • 3.6.1 路由
  • 3.6.2 聚合
  • 3.6.3 卸载
  • 3.6.4 网关的实现
  • 3.7 出口网关
  • 3.8 服务网格
  • 3.9 架构示例
  • 3.10 本章小结
  • 第4章 数据处理
  • 4.1 数据存储系统
  • 4.1.1 对象、文件和磁盘
  • 4.1.2 数据库
  • 4.1.3 流和队列
  • 4.1.4 区块链
  • 4.1.5 数据存储的选择
  • 4.2 多数据存储下的数据
  • 4.2.1 捕获数据更改
  • 4.2.2 将更改作为事件写入更改日志
  • 4.2.3 事务监管
  • 4.2.4 事务回滚
  • 4.2.5 提取、转换和加载
  • 4.2.6 微服务和数据湖
  • 4.3 客户端访问数据
  • 4.3.1 受限的客户令牌(代客密钥)
  • 4.3.2 细粒度访问控制的数据库服务
  • 4.3.3 GraphQL数据服务
  • 4.4 可快速伸缩的数据
  • 4.4.1 数据分片
  • 4.4.2 数据缓存
  • 4.4.3 内容分发网络
  • 4.5 数据分析
  • 4.5.1 数据流
  • 4.5.2 批处理
  • 4.5.3 对象存储上的数据湖
  • 4.5.4 数据湖和数据仓库
  • 4.5.5 分布式查询引擎
  • 4.6 Kubernetes中的数据库
  • 4.6.1 存储卷
  • 4.6.2 StatefulSet
  • 4.6.3 DaemonSet
  • 4.7 本章小结
  • 第5章 DevOps
  • 5.1 什么是DevOps
  • 5.1.1 协作
  • 5.1.2 自动化
  • 5.1.3 精益原则和流程
  • 5.1.4 度量
  • 5.1.5 分享
  • 5.2 测试
  • 5.2.1 测试替身
  • 5.2.2 自动化测试金字塔
  • 5.2.3 不同测试类型的适用时机
  • 5.2.4 测试节奏
  • 5.2.5 在生产环境中测试
  • 5.3 开发环境和工具
  • 5.3.1 开发工具
  • 5.3.2 开发环境
  • 5.3.3 本地开发环境
  • 5.3.4 本地开发环境结合远端集群
  • 5.3.5 Skaffold开发工作流
  • 5.3.6 将远端集群路由到本地开发环境
  • 5.3.7 云端开发环境
  • 5.4 持续集成/持续交付
  • 5.4.1 源代码管理
  • 5.4.2 构建阶段
  • 5.4.3 测试阶段
  • 5.4.4 部署阶段
  • 5.4.5 发布阶段
  • 5.4.6 发布后阶段
  • 5.5 监控
  • 5.5.1 收集指标
  • 5.5.2 服务的可观测性
  • 5.6 配置管理
  • 5.6.1 单一环境变量
  • 5.6.2 多环境变量
  • 5.6.3 将配置数据放入存储卷中
  • 5.6.4 密钥保存
  • 5.6.5 部署配置
  • 5.7 持续集成/持续交付流程示例
  • 5.8 本章小结
  • 第6章 最佳实践
  • 6.1 迈向云原生
  • 6.1.1 找个合理的理由打破巨石应用
  • 6.1.2 先解耦简单的服务
  • 6.1.3 学会小规模的运维
  • 6.1.4 使用防损层模式
  • 6.1.5 使用刀砍模式
  • 6.1.6 准备一个数据迁移策略
  • 6.1.7 重写所有模板代码
  • 6.1.8 重新考虑框架、语言、数据结构和数据存储
  • 6.1.9 淘汰老代码
  • 6.2 确保弹性
  • 6.2.1 用重试来解决瞬时故障
  • 6.2.2 使用有限次的重试
  • 6.2.3 用断路器来处理非瞬时故障
  • 6.2.4 优雅地降级
  • 6.2.5 使用隔离模式
  • 6.2.6 实现健康及就绪检查
  • 6.2.7 为容器设定CPU和内存限制
  • 6.2.8 实现限速和限流
  • 6.3 确保安全性
  • 6.3.1 安全性需求同其他需求一样重要
  • 6.3.2 在设计时就考虑安全性
  • 6.3.3 授予最小访问权限
  • 6.3.4 使用独立的账号、订阅和租客
  • 6.3.5 安全地存储所有密钥
  • 6.3.6 模糊化数据
  • 6.3.7 传输数据加密
  • 6.3.8 使用联合身份管理
  • 6.3.9 使用基于角色的访问控制
  • 6.3.10 Kubernetes pod的隔离
  • 6.4 处理数据
  • 6.4.1 使用托管数据库和数据分析服务
  • 6.4.2 使用最符合数据需求的存储
  • 6.4.3 将数据保存在多个地域或可用区中
  • 6.4.4 使用数据分区和复制以提高扩展性
  • 6.4.5 避免过度获取及频繁的I/O操作
  • 6.4.6 不要把业务逻辑放在数据库中执行
  • 6.4.7 使用类生产环境数据来测试
  • 6.4.8 处理瞬时故障
  • 6.5 性能和伸缩性
  • 6.5.1 设计可扩展的无状态服务
  • 6.5.2 使用平台的自动伸缩功能
  • 6.5.3 使用缓存
  • 6.5.4 用分区来实现超出服务限制的扩容
  • 6.6 函数计算
  • 6.6.1 编写单一用途的函数
  • 6.6.2 避免串联函数
  • 6.6.3 函数应保持轻量和简单
  • 6.6.4 实现无状态函数
  • 6.6.5 分离函数入口和函数的业务逻辑
  • 6.6.6 避免长时间运行的函数
  • 6.6.7 用队列解决跨函数通信问题
  • 6.7 运维
  • 6.7.1 部署和发布是两项独立的活动
  • 6.7.2 部署的内容要尽量小
  • 6.7.3 组件层级的CI/CD定义
  • 6.7.4 应用部署的一致性
  • 6.7.5 采用零宕机发布
  • 6.7.6 不要变更部署后的架构
  • 6.7.7 使用容器化构建
  • 6.7.8 用代码来描述基础设施
  • 6.7.9 使用命名空间来组织Kubernetes中的服务
  • 6.7.10 环境间的隔离
  • 6.7.11 分隔函数源代码
  • 6.7.12 关联代码提交和部署
  • 6.8 日志、监控及告警
  • 6.8.1 使用统一的日志系统
  • 6.8.2 使用关联ID
  • 6.8.3 在日志记录中包含上下文
  • 6.8.4 统一的结构化日志格式
  • 6.8.5 适当地标记指标
  • 6.8.6 避免告警疲劳
  • 6.8.7 定义基于重点性能指标的告警
  • 6.8.8 在生产环境中持续测试
  • 6.8.9 从基础的指标开始
  • 6.9 服务通信
  • 6.9.1 设计时考虑前后兼容性
  • 6.9.2 封装好服务避免泄露内部细节
  • 6.9.3 优先考虑异步通信
  • 6.9.4 使用高效的序列化技术
  • 6.9.5 使用队列和流来应对高负载和流量高峰
  • 6.9.6 用批处理来提高请求处理的效率
  • 6.9.7 拆分大的消息
  • 6.10 容器
  • 6.10.1 将镜像存储在可信的注册服务器中
  • 6.10.2 充分利用Docker的构建缓存
  • 6.10.3 不要使用特权模式运行容器
  • 6.10.4 使用显式的容器镜像标签
  • 6.10.5 保持小的容器镜像
  • 6.10.6 单个容器只运行一个应用
  • 6.10.7 使用可信镜像仓库中经过验证的镜像
  • 6.10.8 对镜像进行漏洞扫描
  • 6.10.9 不要将数据保存在容器中
  • 6.10.10 永远不要在容器中存放密钥和配置
  • 6.11 本章小结
  • 第7章 可移植性
  • 7.1 为什么要使应用可移植
  • 7.2 可移植性的代价
  • 数据引力和可移植性
  • 7.3 何时及如何实现可移植性
  • 7.3.1 标准化的接口
  • 7.3.2 共用的服务和功能
  • 7.3.3 抽象和分层
  • 7.3.4 第三方服务商的托管服务
  • 7.3.5 可移植性工具
  • 7.3.6 把Kubernetes作为可移植性层
  • 7.4 本章小结
  • 作者简介
  • 封面介绍
展开全部

评分及书评

4.5
4个评分
  • 用户头像
    给这本书评了
    5.0

    随着 “云计算” 的兴起,越来越多的公司开始 “上云”。很多公司的上云之路是从传统应用的迁移开始的,但越来越多的创新企业开始直接基于云基础设施来设计、开发新一代应用。于是 “云原生应用” 这个概念这两年也变得愈发火热。这种 “诞生在云上的公司” 往往具备很多不同寻常的特质,这使其具有快速爆发的潜力。利用公有云丰富的 IaaSPaaS SaaS 产品,公司可以实现业务的高度弹性,也便于实现数据驱动的运营。毫无疑问,“云原生” 正悄然改变着软件开发的传统思维和模式。

      转发
      评论

    出版方

    机械工业出版社有限公司

    机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。