展开全部

主编推荐语

本书以实践为基础,帮助Java开发人员掌握针对不同平台的架构设计、自动化质量保证,以及打包和部署的技巧。

内容简介

本书完整介绍了Java软件开发的整个生命周期,还结合大量的成功实践经验,介绍了每个阶段可能会使用到的工具和技能。在基础设施已经极大完善的今天,本书还与时俱进地介绍了如何在Docker、Kubernetes、Cloud、FaaS等新兴环境下进行持续集成和持续交付。

目录

  • 版权信息
  • 内容简介
  • O'Reilly Media, Inc.介绍
  • 业界评论
  • 译者序
  • 序一
  • 序二
  • 前言
  • 为什么我们要写这本书
  • 为什么你应该阅读本书
  • 这本书不包括什么内容
  • 本书中使用的排版规范
  • 斜体(Italic)
  • 等宽字体(Constant width)
  • 如何使用代码示例
  • O'Reilly Safari
  • 联系我们
  • 感谢
  • 【读者服务】
  • 第1章 持续交付:为什么需要持续交付,什么是持续交付
  • 入门知识
  • 赋能开发者:为什么我们要持续交付
  • 快速反馈会减少上下文切换
  • 自动化的、可重复的以及可靠的发布
  • 定义“完成”的概念
  • 什么是构建管道
  • 核心的构建管道阶段
  • 容器技术的影响
  • 对当前架构的影响
  • 总结
  • 第2章 Java开发的演化
  • 现代Java应用程序的需求
  • 对业务增长速度和稳定性的要求
  • API经济的崛起
  • 云计算的机会和成本
  • 模块化归来:拥抱更小的服务
  • 对持续交付的影响
  • Java部署平台的演化
  • WAR和EAR:应用服务器统治的年代
  • 可执行的胖JAR文件:十二要素风格应用的出现
  • 容器镜像:不断增加的可移植性(以及复杂性)
  • 函数即服务:“无服务器”架构的出现
  • 平台对持续交付的影响
  • DevOps、SRE和发布工程
  • 研发和运维
  • 站点可靠性工程
  • 发布工程
  • 共享责任、指标和可观察性
  • 总结
  • 第3章 设计持续交付的架构
  • 优秀架构的基础
  • 松耦合
  • 高内聚
  • 耦合、内聚和持续交付
  • 面向业务敏捷的架构
  • 不好的架构会限制业务的发展
  • 复杂性和变更成本
  • API驱动的应用程序的最佳实践
  • “自上而下”构建API
  • 良好的API有助于持续测试和集成
  • 部署平台和架构
  • 设计符合“十二要素”的云原生应用程序
  • 培养机械同理心
  • 面向失败的设计和持续测试
  • 越来越小的服务
  • 交付单体应用程序的挑战
  • 微服务:当SOA遇到领域驱动设计
  • 函数、lambda表达式和纳米服务(Nanoservices)
  • 架构:“难以改变的东西”
  • 总结
  • 第4章 Java应用的部署平台、基础设施以及持续交付
  • 由平台提供的功能性
  • 基本的开发流程
  • 传统的基础设施平台
  • 传统的平台组件
  • 传统基础设施平台面临的挑战
  • 传统基础设施的好处
  • 传统基础设施平台上的CI / CD
  • 云平台
  • 深入云计算
  • 云计算面临的挑战
  • 云计算的好处
  • 云计算中的持续交付
  • 平台即服务
  • 简单了解PaaS的原理
  • PaaS平台面临的挑战
  • PaaS的好处
  • CI/CD和PaaS
  • 容器(Docker)
  • 容器平台组件
  • 容器面临的挑战
  • 容器的好处
  • 持续交付容器
  • Kubernetes
  • Kubernetes的核心概念
  • Kubernetes面临的挑战
  • Kubernetes的好处
  • Kubernetes的持续交付
  • 函数即服务/无服务器函数
  • FaaS的概念
  • FaaS面临的挑战
  • FaaS的好处
  • CI/CD和FaaS
  • 使用基础设施即代码
  • 总结
  • 第5章 构建Java应用程序
  • 分解构建过程
  • 自动化构建过程
  • 构建依赖
  • 外部依赖
  • 多模块项目
  • 使用多代码库还是单代码库
  • 插件
  • 发布和公开构件
  • Java构建工具概述
  • Ant
  • Maven
  • Gradle
  • Bazel、Pants和Buck
  • 其他JVM构建工具:SBT和Leiningen
  • Make
  • 如何选择一个构建工具
  • 总结
  • 第6章 其他构建工具和技巧
  • Linux、Bash和基本的CLI命令
  • 用户、权限和组
  • 使用文件系统
  • 查看和编辑文本
  • 将所有东西连在一起:重定向、管道和过滤器
  • 搜索和操作文本:grep、awk和sed
  • 诊断工具:top、ps、netstat和iostat
  • HTTP调用和JSON操作
  • curl
  • HTTPie
  • jq
  • 编写基础脚本
  • xargs
  • 管道和过滤器
  • 循环
  • 条件
  • 总结
  • 第7章 打包应用程序
  • 构建一个JAR文件:循序渐进
  • 构建一个可执行的胖JAR文件
  • Maven Shade插件
  • 构建Spring Boot Uber JAR文件
  • 瘦JAR文件
  • 构建WAR文件
  • 在云平台上打包
  • 将部署比作烹饪:烘焙式部署还是煎炸式部署
  • 构建RPM和DEB OS包
  • 其他构建OS包的工具(支持Windows)
  • 使用Packer创建可在多个云平台部署的机器镜像
  • 创建机器镜像的其他工具
  • 构建容器
  • 创建Docker容器镜像
  • 使用fabric8制作Docker镜像
  • 打包FaaS Java应用程序
  • 总结
  • 第8章 在本地环境中工作(就像在生产环境中一样)
  • 本地开发面临的挑战
  • mock、stub和服务虚拟化
  • 模式#1:profile、mock和stub
  • 使用Mockito进行mock
  • 模式#2:服务虚拟化和API 仿真
  • 使用Hoverfly虚拟化服务
  • 虚拟机:Vagrant和Packer
  • 安装Vagrant
  • 创建一个Vagrantfile
  • 模式#3:生产环境镜像
  • 容器:Kubernetes、minikube和Telepresence
  • 介绍Docker Java Shop示例程序
  • 构建Java应用程序和容器镜像
  • 部署到Kubernetes平台
  • 简单的冒烟测试
  • 构建剩余的应用程序
  • 在Kubernetes上部署整个Java应用程序
  • 查看部署的应用程序
  • Telepresence:在本地远程工作
  • 模式#4:环境租赁
  • FaaS:AWS Lambda和SAM Local
  • 安装SAM Local
  • AWS Lambda脚手架
  • 测试AWS Lambda事件处理
  • SAM Local 冒烟测试
  • FaaS: Azure Functions和VS Code
  • 安装Azure Functions Core Tools
  • 在本地构建和测试函数
  • 使用VS Code进行本地和远程测试
  • 总结
  • 第9章 持续集成:创建构建管道的第一步
  • 为什么要持续集成
  • 如何实施CI
  • 中心化与分布式的版本控制系统
  • Git入门
  • 核心的Git CLI命令
  • Hub:一个Git和GitHub必备的工具
  • 有效地使用DVCS
  • 基于主干的开发
  • 基于功能分支的开发
  • Gitflow
  • 没有万全之策:如何选择分支策略
  • 代码审查
  • 我们要寻找什么
  • 代码审查自动化:PMD、Checkstyle和FindBugs
  • 审查pull request
  • 自动化构建
  • Jenkins
  • 发动你的团队
  • 定期合并代码
  • “停下来”:管理失败的构建
  • 不要在测试上使用@Ignore
  • 保持快速的构建过程
  • 平台(基础设施即代码)的CI
  • 总结
  • 第10章 通过管道进行部署和发布
  • 介绍Extended Java Shop应用程序
  • 分离部署和发布
  • 部署应用程序
  • 创建一个容器镜像
  • 部署机制
  • 使用Helm来打包Kubernetes应用程序
  • 一切都开始于(并且结束于)健康检查
  • 部署策略
  • 使用非托管的集群
  • 更改数据库
  • 发布功能
  • 功能开关
  • 语义版本控制
  • API的向后兼容性和版本
  • 多阶段升级
  • 管理配置和敏感信息
  • “打包式”配置
  • 外部配置
  • 处理敏感信息
  • 总结
  • 第11章 功能性测试:正确和接受度
  • 为什么要测试软件
  • 测试什么?敏捷测试象限介绍
  • 持续测试
  • 构建正确的反馈循环
  • 无尽的海龟
  • 人为交易
  • 端到端测试
  • 验收测试
  • 行为驱动开发
  • stub或者虚拟化第三方服务
  • 将所有这些整合在一起
  • 消费者驱动的合约
  • RESTful API 合约
  • 消息合约
  • 组件测试
  • 嵌入式数据存储
  • 内存消息队列
  • 测试替代
  • 创建内部资源或接口
  • 进程内和进程外
  • 集成测试
  • 验证外部交互
  • 测试容错性
  • 单元测试
  • 交互型单元测试
  • 独立型单元测试
  • 处理不可预知的测试
  • 数据
  • 还未准备好的资源
  • 不确定性事件
  • 如果你什么都做不了
  • 自上而下的测试和自下而上的测试
  • 自上而下的测试
  • 自下而上的测试
  • 将所有内容都融入构建管道
  • 多少测试才够
  • 总结
  • 第12章 系统质量属性测试:验证非功能性需求
  • 为什么要测试非功能性需求
  • 代码质量
  • 架构质量
  • ArchUnit:架构方面的单元测试
  • 使用JDepend生成设计质量指标
  • 性能和压力测试
  • 使用Apache Benchmark进行基本的性能测试
  • 使用Gatling进行压力测试
  • 安全、漏洞和威胁
  • 代码级别的安全验证
  • 依赖项验证
  • 与部署平台相关的安全问题
  • 后续步骤:威胁建模
  • 混乱测试
  • 在生产环境中制造混乱(引入猴子)
  • 在预发布环境中造成混乱
  • 需要多少非功能性测试才够
  • 总结
  • 第13章 可观察性:监控、日志和跟踪
  • 可观察性和持续交付
  • 为什么要观察应用程序
  • 我们希望监控:应用程序、网络和机器
  • 如何观察:监控、日志和跟踪
  • 报警
  • 面向可观察性的系统设计
  • 指标
  • 指标的类型
  • Dropwizard Metrics
  • Spring Boot Actuator
  • Micrometer
  • 使用指标的最佳实践
  • 日志
  • 日志的形式
  • SLF4J
  • Log4j 2
  • 日志的最佳实践
  • 请求跟踪
  • trace、span和baggage
  • Java跟踪工具:OpenZipkin、Spring Sleuth和OpenCensus
  • 分布式跟踪的推荐实践
  • 异常跟踪
  • Airbrake
  • 系统监控工具
  • collectd
  • rsyslog
  • Sensu
  • 收集和存储
  • Prometheus
  • Elastic-Logstash-Kibana
  • 可视化
  • 业务可视化
  • 运维可视化
  • 开发可视化
  • 总结
  • 第14章 迁移到持续交付
  • 持续交付能力
  • 选择你要迁移的项目
  • 情景感知
  • Cynefin框架和持续交付
  • 所有模型都是错误的,有些是有用的
  • 开展持续交付
  • 测量持续交付
  • 从小处开始,尝试、学习、分享,然后重复整个过程
  • 增加推广范围:领导变革
  • 领导力是一项很有价值的技能
  • 其他的指导和提示
  • 不良实践和常见的反模式
  • 丑陋的架构:改还是不改
  • 总结
  • 第15章 持续交付和持续改进
  • 从现在开始
  • 建立扎实的技术基础
  • 持续交付价值(最重要的目标)
  • 增加软件的共享责任
  • 促进快速反馈和实验
  • 在组织中开展持续交付
  • 持续改进
  • 总结
  • 关于作者
  • 关于封面
展开全部

评分及书评

评分不足
1个评分

出版方

电子工业出版社

电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。