互联网
类型
可以朗读
语音朗读
357千字
字数
2019-11-01
发行日期
展开全部
主编推荐语
本书以实践为基础,帮助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章 持续交付和持续改进
- 从现在开始
- 建立扎实的技术基础
- 持续交付价值(最重要的目标)
- 增加软件的共享责任
- 促进快速反馈和实验
- 在组织中开展持续交付
- 持续改进
- 总结
- 关于作者
- 关于封面
展开全部
出版方
电子工业出版社
电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。