新書推薦:
《
双城史
》
售價:HK$
110.9
《
冯友兰和青年谈心系列:不是问题的问题(哲学大师冯友兰和年轻人谈心,命运解读)
》
售價:HK$
55.8
《
月与蟹(青鲤文库)荣获第144届直木奖,天才推理作家经典作品全新译本。一部青春狂想曲,带你登上心理悬疑之巅。
》
售價:HK$
50.4
《
索恩丛书·盛清统治下的太监与皇帝
》
售價:HK$
88.5
《
透过器物看历史(全6册)
》
售價:HK$
490.6
《
我在台北故宫博物院读名画
》
售價:HK$
109.8
《
尼罗河往事:古埃及文明4000年
》
售價:HK$
76.2
《
一个人·谁也不是·十万人(诺贝尔文学奖得主反思自我的巅峰之作)
》
售價:HK$
54.9
|
編輯推薦: |
1.本书将O-stock项目拆解划分成众多微服务,让它们运行在各自的Docker容器中,实现持续集成/持续部署。
2.作者在十几年的计算机工作中一直致力于软件开发,使用不同的语言和不同类型的软件架构,一直保持着好奇心与从业初心,不断地研究并将新知识应用到开发中
3.微服务将逐渐成为单体应用程序的替代方案,它通过将大型代码库分解为小的、定义良好的部分,帮助解决代码的复杂问题
|
內容簡介: |
本书以一个名为O-stock的项目为主线,介绍云、微服务等概念以及Spring Boot和Spring Cloud等诸多Spring项目,并介绍如何将O-stock项目一步一步地从单体架构重构成微服务架构,进而将这个项目拆分成众多微服务,让它们运行在各自的Docker容器中,实现持续集成/持续部署,并终自动部署到云环境(AWS)的 Kubernetes集群中。针对在重构过程中遇到的各种微服务开发会面临的典型问题(包括开发、测试和运维等问题),本书介绍了解决这些问题的核心模式,以及在实战中如何选择特定Spring Cloud子项目或其他工具(如 KeyCloak、Zipkin、ELK技术栈)解决这些问题。本书适合拥有构建分布式应用程序的经验、拥有Spring的知识背景以及对学习构建基于微服务的应用程序感兴趣的Java开发人员阅读。对于希望使用微服务构建基于云的应用程序,以及希望了解如何将基于微服务的应用部署到云上的开发人员,本书也具有很好的学习参考价值。
|
關於作者: |
约翰·卡内尔(John Carnell)是一位资深云工程师,拥有二十多年的Java开发经验。他大部分时间都在使用AWS平台构建基于电话的微服务。他的日常工作主要是设计和构建跨Java、Clojure和Go等多种技术平台的微服务。伊拉里·华卢波·桑切斯(Illary Huaylupo Sánchez)是一名软件工程师,拥有十多年的Oracle认证开发经验,目前,Illary 在哥斯达黎加圣何塞的微软公司担任高级软件工程师,在那里她将大部分时间花在研究和开发各种流行的项目上。
|
目錄:
|
第 1章 欢迎迈入云世界,Spring 1
1.1 微服务架构的演进 1
1.1.1 n 层架构 2
1.1.2 什么是单体架构 2
1.1.3 什么是微服务 3
1.1.4 为什么要改变构建应用的方式 5
1.2 使用Spring 开发微服务 6
1.3 我们在构建什么 7
1.4 本书涵盖什么内容 8
1.4.1 在本书中你会学到什么 8
1.4.2 为什么本书与你有关 9
1.5 云和基于微服务的应用程序 9
1.5.1 使用Spring Boot 来构建微服务 10
1.5.2 云计算到底是什么 14
1.5.3 为什么是云和微服务 16
1.6 微服务不只是编写代码 17
1.7 核心开发模式 18
1.8 路由模式 19
1.9 客户端弹性模式 21
1.10 安全模式 22
1.11 日志记录和跟踪模式 23
1.12 应用程序度量模式 24
1.13 构建/部署模式 25
1.14 小结 26
第 2章 使用Spring Cloud 探索微服务世界 27
2.1 什么是Spring Cloud 27
2.1.1 Spring Cloud Config 28
2.1.2 Spring Cloud 服务发现 29
2.1.3 Spring Cloud LoadBalancer和Resilience4j 29
2.1.4 Spring Cloud API Gateway 29
2.1.5 Spring Cloud Stream 29
2.1.6 Spring Cloud Sleuth 30
2.1.7 Spring Cloud Security 30
2.2 通过示例来介绍Spring Cloud 30
2.3 如何构建云原生微服务 32
2.3.1 代码库 34
2.3.2 依赖 35
2.3.3 配置 35
2.3.4 后端服务 36
2.3.5 构建、发布和运行 37
2.3.6 进程 37
2.3.7 端口绑定 38
2.3.8 并发 38
2.3.9 可任意处置 38
2.3.10 开发环境/生产环境等同 38
2.3.11 日志 39
2.3.12 管理进程 39
2.4 确保本书的示例是有意义的 40
2.5 使用Spring Boot和Java来构建微服务 40
2.5.1 设置环境 41
2.5.2 从骨架项目开始 41
2.5.3 引导Spring Boot 应用程序:编写引导类 45
2.6 小结 46
第3章 使用Spring Boot 构建微服务 48
3.1 架构师的故事:设计微服务架构 49
3.1.1 分解业务问题 49
3.1.2 建立服务粒度 51
3.1.3 定义服务接口 53
3.2 何时不要使用微服务 53
3.2.1 构建分布式系统时的复杂性 54
3.2.2 服务器或容器散乱 54
3.2.3 应用程序的类型 54
3.2.4 数据事务和一致性 54
3.3 开发人员的故事:用Spring Boot和Java构建微服务 55
3.3.1 构建微服务的入口:Spring Boot 控制器 55
3.3.2 将国际化添加到许可证服务 64
3.3.3 实现Spring HATEOAS 来显示相关的链接 68
3.4 DevOps 故事:构建运行时的严谨性 71
3.4.1 服务装配:打包和部署微服务 72
3.4.2 服务引导:管理微服务的配置 73
3.4.3 服务注册和发现:客户端如何与微服务通信 74
3.4.4 传达微服务的健康状况 75
3.5 将视角综合起来 77
3.6 小结 77
第4章 欢迎来到Docker 79
4.1 容器还是虚拟机 80
4.2 Docker 是什么 81
4.3 Dockerfile 83
4.4 Docker Compose 84
4.5 集成Docker 与微服务 86
4.5.1 构建Docker 镜像 86
4.5.2 使用Spring Boot 创建Docker镜像 91
4.5.3 使用Docker Compose 启动服务 93
4.6 小结 94
第5章 使用Spring Cloud Config服务器端控制配置 96
5.1 关于管理配置(和复杂性) 97
5.1.1 配置管理架构 97
5.1.2 实施选择 99
5.2 构建Spring Cloud Config服务器端 100
5.2.1 创建Spring Cloud Config引导类 104
5.2.2 使用带有文件系统的Spring Cloud Config 服务器端 105
5.2.3 创建服务的配置文件 106
5.3 将Spring Cloud Config与Spring Boot客户端集成 110
5.3.1 建立许可证服务的Spring Cloud Config 服务依赖项 111
5.3.2 配置许可证服务以使用Spring Cloud Config 112
5.3.3 使用Spring Cloud Config服务器端连接数据源 115
5.3.4 使用@ConfigurationProperties直接读取属性 118
5.3.5 使用Spring Cloud Config服务器端刷新属性 119
5.3.6 使用Spring Cloud Config服务器端和Git 120
5.3.7 使用Spring Cloud Config服务集成Vault 122
5.3.8 Vault UI 122
5.4 保护敏感配置信息 125
5.4.1 创建对称加密密钥 125
5.4.2 加密和解密属性 126
5.5 后的想法 128
5.6 小结 128
第6章 关于服务发现 129
6.1 我的服务在哪里 130
6.2 云中的服务发现 132
6.2.1 服务发现架构 132
6.2.2 使用Spring 和Netflix Eureka进行服务发现实战 135
6.3 构建Spring Eureka服务 136
6.4 通过Spring Eureka注册服务 141
6.4.1 Eureka 的REST API 144
6.4.2 Eureka 仪表板 145
6.5 使用服务发现来查找服务 146
6.5.1 使用Spring Discovery Client查找服务实例 148
6.5.2 使用带有Load Balancer功能的Spring Rest模板调用服务 150
6.5.3 使用Netflix Feign 客户端调用服务 152
6.6 小结 153
第7章 当糟糕的事情发生时:使用Spring Cloud和Resilience4j的弹性模式 154
7.1 什么是客户端弹性模式 155
7.1.1 客户端负载均衡模式 156
7.1.2 断路器模式 156
7.1.3 后备模式 156
7.1.4 舱壁模式 156
7.2 为什么客户端弹性很重要 157
7.3 实现Resilience4j 160
7.4 设置许可证服务以使用Spring Cloud和Resilience4j 160
7.5 实现断路器 162
7.5.1 向组织服务添加断路器 166
7.5.2 定制断路器 166
7.6 后备处理 168
7.7 实现舱壁模式 169
7.8 实现重试模式 172
7.9 实现限流器模式 174
7.10 ThreadLocal和Resilience4j 176
7.11 小结 180
第8章 使用Spring Cloud Gateway进行服务路由 182
8.1 什么是服务网关 183
8.2 Spring Cloud Gateway简介 184
8.2.1 建立Spring Cloud Gateway项目 185
8.2.2 配置Spring Cloud Gateway与Eureka 进行通信 188
8.3 在Spring Cloud Gateway 中配置路由 189
8.3.1 通过服务发现自动映射路由 189
8.3.2 使用服务发现手动映射路由 191
8.3.3 动态重新加载路由配置 194
8.4 Spring Cloud Gateway 的真正威力:断言和过滤器工厂 194
8.4.1 内置的断言工厂 195
8.4.2 内置的过滤器工厂 196
8.4.3 自定义过滤器 197
8.5 构建前置过滤器 200
8.6 在服务中使用关联ID 203
8.6.1 UserContextFilter:拦截传入的HTTP请求 205
8.6.2 UserContext:使服务易于访问HTTP 206
8.6.3 自定义RestTemplate和UserContextInteceptor:确保关联ID被传播 207
8.7 构建接收关联ID的后置过滤器 208
8.8 小结 210
第9章 保护微服务 211
9.1 OAuth2是什么 212
9.2 Keycloak简介 213
9.3 从小事做起:使用Spring和Keycloak来保护单个端点 214
9.3.1 将Keycloak服务添加到Docker 214
9.3.2 设置Keycloak 215
9.3.3 注册客户端应用程序 218
9.3.4 配置O-stock用户 222
9.3.5 对O-stock用户进行身份认证 224
9.4 使用Keycloak保护组织服务 227
9.4.1 将Spring Security和Keycloak JAR添加到各个服务 228
9.4.2 配置服务以指向Keycloak服务 228
9.4.3 定义什么和谁可以访问服务 229
9.4.4 传播访问令牌 233
9.4.5 从JWT 中解析自定义字段 239
9.5 关于微服务安全的一些总结 240
9.5.1 对所有业务通信使用HTTPS/安全套接字层(SSL) 241
9.5.2 使用服务网关访问微服务 241
9.5.3 将服务划分到公共API和私有API 241
9.5.4 通过封锁不需要的网络端口来限制微服务的攻击面 241
9.6 小结 242
第 10章 使用Spring Cloud Stream的事件驱动架构 243
10.1 消息传递、EDA和微服务的案例 244
10.1.1 使用同步请求-响应方式来传达状态变化 244
10.1.2 使用消息传递在服务之间传达状态更改 246
10.1.3 消息传递架构的缺点 248
10.2 Spring Cloud Stream简介 249
10.3 编写简单的消息生产者和消费者 251
10.3.1 在Docker中配置Apache Kafka和Redis 252
10.3.2 在组织服务中编写消息生产者 252
10.3.3 在许可证服务中编写消息消费者 258
10.3.4 在实际操作中查看消息服务 261
10.4 Spring Cloud Stream用例:分布式缓存 262
10.4.1 使用Redis来缓存查找 263
10.4.2 定义自定义通道 269
10.5 小结 271
第 11 章 使用Spring Cloud Sleuth和Zipkin进行分布式跟踪 272
11.1 Spring Cloud Sleuth与关联ID 273
11.1.1 将Spring Cloud Sleuth添加到许可证服务和组织服务中 274
11.1.2 剖析Spring Cloud Sleuth跟踪 274
11.2 日志聚合与Spring Cloud Sleuth 275
11.2.1 Spring Cloud Sleuth/ELK技术栈实现实战 277
11.2.2 在服务中配置Logback 278
11.2.3 在Docker中定义和运行ELK技术栈应用程序 281
11.2.4 配置Kibana 284
11.2.5 在Kibana 中搜索Spring Cloud Sleuth的跟踪ID 287
11.2.6 使用Spring Cloud Gateway将关联ID添加到HTTP响应 288
11.3 使用Zipkin 进行分布式跟踪 290
11.3.1 设置Spring Cloud Sleuth和Zipkin依赖项 291
11.3.2 配置服务以指向Zipkin 291
11.3.3 配置Zipkin服务器端 292
11.3.4 设置跟踪级别 293
11.3.5 使用Zipkin跟踪事务 293
11.3.6 可视化更复杂的事务 296
11.3.7 捕获消息传递踪迹 297
11.3.8 添加自定义跨度 299
11.4 小结 301
第 12章 部署微服务 303
12.1 构建/部署管道的架构 304
12.2 在云中设置O-stock的核心基础设施 307
12.2.1 使用亚马逊的RDS创建PostgreSQL数据库 309
12.2.2 在AWS中创建Redis集群 312
12.3 超越基础设施:部署O-stock和ELK 313
12.3.1 创建运行EKL的EC2实例 313
12.3.2 在EC2实例中部署ELK技术栈 316
12.3.3 创建一个EKS集群 317
12.4 构建/部署管道实战 323
12.5 创建构建/部署管道 324
12.5.1 设置GitHub 325
12.5.2 使服务能够在Jenkins中构建 326
12.5.3 理解并生成管道脚本 330
12.5.4 创建Kubernetes管道脚本 332
12.6 关于构建/部署管道的总结 333
12.7 小结 334
附录A 微服务架构实践 335
A.1 Richardson成熟度模型 335
A.2 Spring HATEOAS 337
A.3 外部化配置 337
A.4 持续集成和持续交付 338
A.5 监控 339
A.6 日志记录 339
A.7 API网关 340
附录B OAuth2授权类型 341
B.1 密码授权类型 341
B.2 客户端凭据授权类型 343
B.3 授权码授权类型 344
B.4 隐式授权类型 345
B.5 如何刷新令牌 347
附录C 监控微服务 349
C.1 引入Spring Boot Actuator进行监控 349
C.1.1 添加Spring Boot Actuator 349
C.1.2 启用Actuator端点 350
C.2 设置Micrometer和Prometheus 351
C.2.1 了解Micrometer和Prometheus 351
C.2.2 实现Micrometer和Prometheus 352
C.3 配置Grafana 354
C.4 小结 358
|
|