万本电子书0元读

万本电子书0元读

顶部广告

Java持续交付电子书

持续交付为业务的持续发展和整个软件的交付周期增加了巨大的价值,但是掌握这项技术就意味着普通发人员要跳出舒适区,学习很多新技能。本书以实践为基础,作者 Daniel Bryant 和Abraham Marín-Pérez通过大量的实践指导,帮助Java发人员掌握针对不同平台的架构设计、自动化质量保证, 以及包和部署的技巧。 · 你将获得一些理解核心概念的帮助,以及有助于向持续交付迁移的指导意见。

售       价:¥

纸质售价:¥90.30购买纸书

81人正在读 | 0人评论 6.7

作       者:(美)Daniel Bryant(丹尼尔·布莱恩特),(英)Abraham Marin-Perez(亚布拉罕·马林-佩雷斯)

出  版  社:电子工业出版社

出版时间:2019-10-01

字       数:28.7万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:此类商品不支持退换货,不支持下载打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
本书完整介绍了Java软件发的整个生命周期,还结合大量的成功实践经验,介绍了每个阶段可能会使用到的工具和技能。在基础设施已经极大完善的今天,本书还与时俱地介绍了如何在Docker、Kubernetes、Cloud、FaaS等新兴环境下行持续集成和持续交付。 本书完整介绍了Java软件发的整个生命周期,还结合大量的成功实践经验,介绍了每个阶段可能会使用到的工具和技能。在基础设施已经极大完善的今天,本书还与时俱地介绍了如何在Docker、Kubernetes、Cloud、FaaS等新兴环境下行持续集成和持续交付。
【推荐语】
持续交付为业务的持续发展和整个软件的交付周期增加了巨大的价值,但是掌握这项技术就意味着普通发人员要跳出舒适区,学习很多新技能。本书以实践为基础,作者 Daniel Bryant 和Abraham Marín-Pérez通过大量的实践指导,帮助Java发人员掌握针对不同平台的架构设计、自动化质量保证, 以及包和部署的技巧。 · 你将获得一些理解核心概念的帮助,以及有助于向持续交付迁移的指导意见。 · 你将学会如何设计能在不同平台上持续交付Java应用程序的架构。 · 你将学会如何构建应用程序构件,包括胖JAR文件、虚拟机镜像,以及操作系统容器(Docker)镜像。 · 你将学会如何使用Jenkins、PMD和FindSecBug等持续集成工具自动化地行代码质量检查。 · 你将学会如何创建一个复杂的构建管道,以及如何设计独立的部署和发布流程。 · 你将了解为什么功能测试和系统质量属性测试对于发和交付非常重要。 · 你将学会如何在本地有效地构建和测试应用程序,以及监控生产环境中运行的应用程序。
【作者】
Daniel Bryant 是Datawire 的独立技术顾问和产品架构师。他专注于通过发现价值流、创建构建管道以及实施有效的测试策略,在组织内实施持续交付。Daniel 在技术上擅长DevOps 工具、云计算/ 容器平台和微服务实现。他还是一名Java 社区领袖,为几个源项目做出过贡献,也为InfoQ、O’Reilly 和Voxxed 撰写文章,并且会定期出席OSCON、QCon 和JavaOne 等国际会议。Abraham Marin-Perez 是一名Java 和Scala 发人员,在金融、出版和公共部门等行业拥有超过10 年的经验。他还帮助管理伦敦Java 社区,并在Meet a Mentor London小组提供职业发展方面的建议。Abraham 喜欢与其他人分享他的经验,因此经常会在JavaOne 或者Devoxx UK 等国际活动上发表演讲,并在InfoQ 上发表Java 方面的新闻。他还是Real-World Maintainable Software (O’Reilly) 一书的作者。Abraham 目前居住在伦敦,喜欢在天气好的时候外出徒步,或者天气不好的时候在家烹饪。 张若飞,曾任多家互联网金融公司CTO,在宜人贷、雅虎北研、金山云等知名公司担任架构师。十余年互联网研发及技术管理经验,对搭建海量数据、大型分布式系统有丰富经验。著有十余本技术译著,包括《Grails权威指南》《给大忙人看的JavaSE 8》《代码不朽:编写可维护软件的十大原则》《面向可伸缩架构》《云原生Java》等书,总计400余万字。
目录展开

书名页

内容简介

版权页

O’Reilly Media, Inc.介绍

译者序

序一

序二

前言

第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文件——为什么我们决定不使用胖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应用程序

分离部署和发布

部署应用程序

创建一个容器镜像

部署机制

一切都开始于(并且结束于)健康检查

部署策略

使用非托管的集群

更改数据库

发布功能

功能开关

语义版本控制

API的向后兼容性和版本

多阶段升级

管理配置和敏感信息

“打包式”配置

外部配置

处理敏感信息

总结

第11章 功能性测试:正确和接受度

为什么要测试软件

测试什么?敏捷测试象限介绍

持续测试

构建正确的反馈循环

无尽的海龟

人为交易

端到端测试

验收测试

行为驱动开发

stub或者虚拟化第三方服务

将所有这些整合在一起

消费者驱动的合约

RESTful API 合约

消息合约

组件测试

嵌入式数据存储

内存消息队列

测试替代

创建内部资源或接口

进程内和进程外

集成测试

验证外部交互

测试容错性

单元测试

交互型单元测试

独立型单元测试

处理不可预知的测试

数据

还未准备好的资源

不确定性事件

如果你什么都做不了

自上而下的测试和自下而上的测试

自上而下的测试

自下而上的测试

将所有内容都融入构建管道

多少测试才够

总结

第12章 系统质量属性测试:验证非功能性需求

为什么要测试非功能性需求

代码质量

架构质量

ArchUnit:架构方面的单元测试

使用JDepend生成设计质量指标

性能和压力测试

使用Apache Benchmark进行基本的性能测试

使用Gatling进行压力测试

安全、漏洞和威胁

代码级别的安全验证

依赖项验证

与部署平台相关的安全问题

后续步骤:威胁建模

混乱测试

在生产环境中制造混乱(引入猴子)

在预发布环境中造成混乱

需要多少非功能性测试才够

总结

第13章 可观察性:监控、日志和跟踪

可观察性和持续交付

为什么要观察应用程序

我们希望监控:应用程序、网络和机器

如何观察:监控、日志和跟踪

报警

面向可观察性的系统设计

指标

指标的类型

Dropwizard Metrics

Spring Boot Actuator

使用指标的最佳实践

日志

日志的形式

Log4j 2

日志的最佳实践

请求跟踪

trace、span和baggage

Java跟踪工具:OpenZipkin、Spring Sleuth和OpenCensus

分布式跟踪的推荐实践

异常跟踪

Airbrake

系统监控工具

collectd

rsyslog

Sensu

收集和存储

Prometheus

Elastic-Logstash-Kibana

可视化

业务可视化

运维可视化

开发可视化

总结

第14章 迁移到持续交付

持续交付能力

选择你要迁移的项目

情景感知

Cynefin框架和持续交付

所有模型都是错误的,有些是有用的

开展持续交付

测量持续交付

从小处开始,尝试、学习、分享,然后重复整个过程

增加推广范围:领导变革

其他的指导和提示

不良实践和常见的反模式

丑陋的架构:改还是不改

总结

第15章 持续交付和持续改进

从现在开始

建立扎实的技术基础

持续交付价值(最重要的目标)

增加软件的共享责任

促进快速反馈和实验

在组织中开展持续交付

持续改进

总结

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部