作 者:姚秋辰 等 著
定 价:158
出 版 社:电子工业出版社
出版日期:2021年10月01日
页 数:716
装 帧:平装
ISBN:9787121419478
●第1章热身运动1
1.1准备工作1
1.1.1安装JDK2
1.1.2安装IDE4
1.1.3安装Maven5
1.1.4安装 tman6
1.2JavaWeb开发的进化史6
1.2.1应用服务器8
1.2.2青铜Servlet11
1.2.3铂金SpringMVC18
1.2.4王者SpringBoot22
第2章SpringBoot介绍26
2.1SpringBoot的前尘往事26
2.1.1SpringFramework27
2.1.2SpringBoot32
2.2SpringBoot的设计理念34
2.3SpringBoot的核心功能34
2.3.1易于使用的依赖管理Starter35
2.3.2约定大于配置的AutoConfiguration39
2.3.3优雅灵活的配置管理Properties45
2.3.4简单明了的管理工具Actuator51
2.3.5方便快捷的内置容器EmbeddedContainer57
第3章SpringBoot实战63
3.1创建SpringBoot项目63
3.1.1利用SpringInitializr创建项目63
3.1.2项目结构64
3.1.3在项目中添加Starter65
3.1.4偷懒利器lombok68
3.2项目运行打包70
3.2.1SpringBoot项目编译打包70
3.2.2运行SpringBoot项目72
3.3SpringBoot管理日志74
3.3.1日志框架74
3.3.2Log4J275
3.3.3Logback77
3.3.4Slf4j79
3.4数据访问80
3.4.1访问关系型数据库80
3.4.2实现优惠券模板模块DAO层131
3.4.3实现用户领券模块DAO层133
3.4.4使用key-valuestore实现缓存135
3.5消息系统143
3.5.1消息系统的作用143
3.5.2消息系统的两种模式144
3.5.3集成RabbitMQ150
3.5.4集成Kafka157
3.6应用安全管理162
3.6.1Authentication用户身份鉴定163
3.6.2Authorization用户鉴权165
3.6.3OAuth2.0166
3.6.4SpringSecurity168
3.7定时任务173
3.7.1Quartz174
3.7.2SpringBatch178
3.8SpringBoot项目测试186
第4章微服务与SpringCloud189
4.1什么是微服务架构189
4.1.1微服务架构的特点189
4.1.2一线大厂为什么采用微服务架构190
4.1.3微服务架构对系统运维的挑战191
4.2微服务的拆分规范192
4.2.1领域模型192
4.2.2计算密集型业务和I/O密集型业务192
4.2.3区分高频、低频业务场景和突发流量192
4.2.4规划业务主链路193
4.3大厂微服务架构的服务治理方案193
4.3.1业界主流服务治理框架一览193
4.3.2微服务框架的选型建议195
4.4了解SpringCloud196
4.4.1SpringCloud简介196
4.4.2SpringCloud和SpringBoot的关系197
4.5了解SpringCloud组件库198
4.5.1SpringCloud的整体架构198
4.5.2SpringCloud的子项目199
4.5.3Netflix组件库201
4.5.4 组件库202
4.6实战项目技术选型203
4.6.1技术架构选型203
4.6.2SpringCloud组件选型与版本204
第5章使用Eureka实现服务治理205
5.1什么是服务治理205
5.2SpringCloud中常用的注册中心207
5.3分布式系统理论209
5.3.1了解CAP定理209
5.3.2高并发应用在CAP中的偏向性210
5.4Eureka核心概念211
5.4.1服务注册211
5.4.2服务发现212
5.4.3服务续约和服务下线212
5.4.4服务剔除212
5.4.5服务自保213
5.5优惠券项目改造――高可用注册中心213
5.5.1创建项目结构213
5.5.2修改host文件213
5.5.3引入Maven依赖项214
5.5.4创建项目启动类215
5.5.5为注册中心添加配置215
5.6coupon-template-service微服务架构升级218
5.6.1添加依赖项218
5.6.2创建启动类218
5.6.3添加配置项219
5.6.4运行项目220
5.7改造coupon-calculator221
5.8改造coupon-user-service服务222
5.8.1添加依赖项和配置项222
5.8.2声明RestTemplate222
5.8.3改造findCoupon()方法――RestTemplate.exchange函数的用法223
5.8.4改造requestCoupon()方法――getForObject函数的用法225
5.8.5改造placeOrder()方法226
5.8.6启动项目并验证服务注册227
5.9Eureka中的其他配置参数227
第6章使用Nacos实现服务治理229
6.1什么是Nacos229
6.2Nacos的核心功能230
6.2.1服务注册、服务发现与健康检测231
6.2.2配置管理231
6.3Nacos下载与安装232
6.4Nacos实战234
6.4.1Nacos与SpringCloud的集成234
6.4.2Nacos控制台234
6.4.3Nacos实现配置管理237
6.4.4Nacos实现服务注册与服务发现243
第7章使用Ribbon实现负载均衡247
7.1什么是负载均衡247
7.2了解Ribbon248
7.3了解Ribbon的负载均衡器249
7.3.1Ribbon内置的负载均衡策略249
7.3.2各个负载均衡器适用的业务场景250
7.3.3Ribbon的IRule扩展接口250
7.4IPing机制251
7.4.1了解IPing机制251
7.4.2Ribbon内置的IPing策略类252
7.5微服务项目架构升级252
7.5.1添加Ribbon依赖项252
7.5.2添加@LoadBalancer注解253
7.5.3修改getUrl()方法253
7.5.4配置Ribbon负载均衡策略254
第8章使用OpenFeign实现服务间调用256
8.1Feign256
8.1.1什么是Feign256
8.1.2Feign的工作流程257
8.1.3Feign对请求和响应的压缩258
8.2微服务架构升级――使用Feign代理接口调用258
8.2.1添加依赖项258
8.2.2开启Feign注解支持258
8.2.3定义Feign接口259
8.2.4替换RestTemplate261
8.2.5Feign与Ribbon的超时与重试配置263
8.2.6Feign的日志配置265
8.2.7配置请求和响应的压缩参数266
第9章使用Hystrix实现服务间容错267
9.1Hystrix267
9.1.1什么是Hystrix267
9.1.2服务雪崩268
9.1.3服务雪崩的解决方案269
9.2Hystrix的核心概念269
9.2.1服务降级269
9.2.2服务熔断270
9.2.3Hystrix如何切换断路器的开关271
9.3微服务架构升级――配置熔断和降级271
9.3.1添加依赖项和配置项271
9.3.2在Feign接口上指定降级类272
9.3.3为特定方法指定降级逻辑274
9.3.4设置全局熔断参数274
9.3.5为指定方法设置超时时间276
9.3.6隔离机制的配置项277
9.3.7使用@CacheResult缓存注解279
9.3.8开放Actuator端点279
9.4微服务架构升级――利用Turbine收集Hystrix信息281
9.4.1什么是Turbine281
9.4.2添加Turbine子项目281
9.4.3创建启动类282
9.4.4指定需要监控的服务名称283
9.5微服务架构升级――利用HystrixDashboard观察服务健康度284
9.5.1什么是HystrixDashboard284
9.5.2添加HystrixDashboard项目284
9.5.3创建配置项和启动类286
9.6启用HystrixDashboard观察服务状态286
第10章使用Sentinel实现限流控制290
10.1服务容错290
10.2Sentinel简介291
10.2.1什么是Sentinel291
10.2.2Sentinel的核心功能292
10.3Sentinel控制台296
10.4Sentinel与SpringCloud的集成297
10.5使用Sentinel实现降级控制298
10.6使用Sentinel实现限流控制302
10.7Sentinel的日志307
第11章使用SpringCloudConfig和Bus搭建配置中心310
11.1配置中心在微服务中的应用310
11.1.1环境隔离311
11.1.2业务配置项动态推送311
11.1.3中心化的配置管理312
11.2了解SpringCloudConfig和Bus313
11.2.1SpringCloudConfig+Bus架构图313
11.2.2保存配置的几种方式315
11.3准备工作――创建GitHub文件315
11.3.1创建GitHubRepo315
11.3.2添加YML配置文件316
11.4微服务架构升级――搭建高可用的配置中心316
11.4.1创建高可用的config-server项目316
11.4.2添加依赖项和启动类317
11.4.3添加配置――设置GitHub地址,借助Eureka实现高可用319
11.4.4从多个GitHubRepo中读取配置321
11.5GitHub配置文件命名规则322
11.5.1Application、Profile和Branch322
11.5.2路径匹配规则322
11.6对GitHub中的配置项进行加解密324
11.6.1更新JDK中的JCE组件324
11.6.2使用对称密钥对配置项加解密324
11.6.3使用非对称密钥对配置项加解密327
11.7微服务架构升级――从配置中心读取配置项328
11.7.1添加SpringCloudConfig和Bus的依赖项328
11.7.2为配置中心添加service-id328
11.7.3对数据库访问密码进行加密存储330
11.7.4配置@RefreshScope注解330
11.7.5从客户端触发配置刷新332
11.7.6使用Bus批量刷新配置项333
第12章使用SpringCloudGateway搭建服务网关334
12.1了解微服务网关334
12.1.1服务网关的用途335
12.1.2SpringCloud中的网关组件336
12.2SpringCloudGateway的核心概念――路由、谓词和过滤器337
12.3路由功能339
12.3.1通过配置文件设置简单路由339
12.3.2通过Java代码配置路由340
12.3.3谓词工厂340
12.3.4Gateway常用谓词341
12.3.5过滤器342
12.4微服务架构改造――搭建网关模块343
12.4.1添加Gateway的依赖项和启动类343
12.4.2将Gateway连接到注册中心344
12.4.3在Java文件中设置路由规则345
12.4.4添加网关层跨域过滤器347
12.5微服务架构升级――使用Redis+Lua做流控348
12.5.1Redis和Lua的限流算法348
12.5.2设置限流规则350
12.5.3通过Actuator端点查看路由351
第13章使用Sleuth进行调用链路追踪354
13.1为什么微服务架构需要链路追踪354
13.2链路追踪技术介绍356
13.2.1Sleuth356
13.2.2Zipkin357
13.2.3ELK358
13.3Sleuth基本数据结构359
13.4微服务架构升级――集成Sleuth实现链路追踪361
13.4.1添加依赖项361
13.4.2配置Sleuth采样率361
13.5微服务架构升级――搭建Zipkin服务器362
13.5.1添加Zipkin依赖362
13.5.2创建Zipkin启动类363
13.5.3通过RabbitMQ接收日志文件363
13.5.4应用程序集成Zipkin365
13.6微服务架构升级――搭建ELK环境368
13.6.1下载ELK的Docker镜像368
13.6.2在镜像内配置ELK属性368
13.6.3将应用日志输送到Logstash370
13.6.4在Kibana中搜索日志372
第14章使用Stream集成消息队列375
14.1了解Stream375
14.2消息队列在微服务架构中的应用376
14.3消息队列的概念380
14.3.1发布订阅380
14.3.2消费组381
14.3.3消息分区381
14.4微服务架构升级――异步分发优惠券382
14.4.1添加Stream依赖项和消息信道382
14.4.2创建消息生产者383
14.4.3创建消息消费者并添加启动注解384
14.4.4添加Stream配置385
14.5微服务架构升级――Stream异常处理387
14.5.1本机重试387
14.5.2消息重新入队387
14.5.3自定义异常处理――添加降级逻辑388
14.5.4死信队列388
14.6Stream实现延迟消息391
14.6.1延迟消息的使用场景391
14.6.2安装延迟消息插件393
14.6.3实现延迟消息394
第15章使用Seata实现分布式事务396
15.1为什么需要分布式事务396
15.2分布式事务的替代方案397
15.3传统的XA分布式事务解决方案398
15.4Seata框架介绍400
15.5Seata的AT模式402
15.5.1AT模式原理402
15.5.2AT模式下的写隔离404
15.5.3AT模式下的读隔离405
15.5.4TCC模式407
15.5.5Saga模式409
15.5.6XA模式410
15.6微服务架构升级――搭建Seata服务器410
15.6.1下载Seata服务器410
15.6.2修改file.conf文件411
15.6.3修改registry.conf文件412
15.6.4添加服务器JDBC驱动413
15.6.5创建数据库表413
15.7微服务架构升级――应用改造416
15.7.1添加Seata依赖项和配置项416
15.7.2实现业务逻辑417
15.7.3添加数据源代理419
第16章走进容器化的世界420
16.1微服务落地的难点420
16.1.1微服务的兴起与容器的顺势而为420
16.1.2业务的高内聚和低耦合421
16.1.3摆脱软硬件异构的困境423
16.1.4遵循云原生12因素425
16.1.5满足康威定律429
16.1.6一线大厂为什么采用容器技术430
16.2容器技术的演进432
16.2.1容器技术的前世今生432
16.2.2主流容器技术介绍433
16.2.3容器技术生态圈对比434
16.2.4未来展望436
16.3容器编排技术先睹为快436
16.3.1资源统一管理和容器编排协作436
16.3.2Swarm437
16.3.3Mesos437
16.3.4Kubernetes438
16.3.5Rancher439
16.3.6各大容器编排框架对比440
第17章Docker容器技术442
17.1从HelloWorld起步442
17.1.1容器实战基本思路442
17.1.25分钟Docker安装443
17.1.31分钟HelloWorld443
17.1.4Docker感受分享444
17.2Docker架构445
17.2.1整体架构445
17.2.2客户端446
17.2.3Docker宿主机449
17.2.4仓库450
17.2.5镜像451
17.2.6容器451
17.2.7各个组件用途归纳451
17.3Docker镜像452
17.3.1镜像结构452
17.3.2镜像制作453
17.3.3Dockerfile常用指令455
17.3.4Dockerfile排疑解惑458
17.3.5镜像管理思路461
17.4Docker容器464
17.4.1容器的运行原理464
17.4.2隔离特性464
17.4.3特性468
17.4.4容器的起承转合469
17.4.5容器的管理思路472
17.5Docker存储473
17.5.1存储管理的目标473
17.5.2系统卷473
17.5.3数据卷474
17.5.4数据卷容器479
17.5.5存储模式总结480
17.6Docker网络481
17.6.1网络技术分类481
17.6.2none网络482
17.6.3host网络482
17.6.4bridge网络483
17.6.5自定义网络486
17.6.6第三方网络486
17.6.7网络技术选型487
17.7进一步感受Docker的魅力488
17.7.1Nginx反向代理部署488
17.7.2Redis缓存部署489
17.7.3MySQL数据库部署491
17.7.4MongoDB文档数据库部署493
17.7.5RabbitMQ消息队列部署494
17.7.6Kafka集群部署495
17.7.7ELK监控部署497
17.7.8Docker感受新体验498
17.8镜像仓库499
17.8.1搭建私有仓库499
17.8.2上传镜像500
17.8.3下载镜像500
17.8.4仓库的扩展501
17.9【优惠券项目落地】――Docker容器化502
17.9.1容器化总体思路502
17.9.2无状态应用模块容器化503
17.9.3无状态中间件容器化506
17.9.4有状态中间件容器化508
17.9.5容器间网络互通509
17.9.6后续改造规划512
第18章Kubernetes基础513
18.1了解容器编排513
18.1.1容器编排的意义和使命513
18.1.2容器编排的难点514
18.2了解Kubernetes514
18.2.1Kubernetes整体架构514
18.2.2KubernetesMaster节点515
18.2.3KubernetesNode节点516
18.3Kubernetes基本概念516
18.3.1Pod概念516
18.3.2Controller概念517
18.3.3Label资源锁定518
18.3.4Namespace逻辑隔离519
18.3.5Kubernetes的功能理解导图519
18.4Kubernetes集群搭建520
18.4.1基础软件安装520
18.4.2在Master节点创建集群521
18.4.3网络选择和初始化525
18.4.4Node节点加入集群525
18.5Pod管理526
18.5.1Pod原理和实现526
18.5.2Pod生命周期管理528
18.5.3资源和调度选择532
18.5.4健康检查537
18.6Controller管理540
18.6.1Controller原理540
18.6.2Deployment541
18.6.3滚动升级547
18.6.4后台应用DaemonSet552
18.6.5任务Job554
18.6.6控制器选择思路560
18.7【优惠券项目落地】――Kubernetes容器化管理560
18.7.1应用Pod划分总体思路560
18.7.2应用Controller选择561
18.7.3Node资源分配561
18.7.4Liveness健康检查562
第19章Kubernetes网络互联564
19.1跨节点网络565
19.1.1网络互联总体思路565
19.1.2Flannel网络的Kubernetes实现565
19.1.3Canal网络的Kubernetes实现565
19.1.4网络选型566
19.2服务发现与负载均衡566
19.2.1Pod访问方式566
19.2.2ClusterIP方式568
19.2.3NodePort方式571
19.2.4LoadBalancer方式574
19.2.5Ingress方式575
19.2.6服务发现总体思路577
19.3【优惠券项目落地】――服务发现和互联577
19.3.1有状态服务搭建577
19.3.2无状态服务搭建581
19.3.3微服务网络互联和服务发现583
第20章Kubernetes数据存储585
20.1Volume卷586
20.1.1磁盘管理整体思路586
20.1.2emptyDir方式587
20.1.3hostPath方式588
20.1.4云存储方式589
20.1.5PV-PVC方式590
20.1.6StorageClass方式593
20.2ConfigMap和Secret594
20.2.1ConfigMap和Secret的定位594
20.2.2创建方式595
20.2.3数据传递方式599
20.3【优惠券项目落地】――配置和磁盘管理603
20.3.1应用环境变量加载603
20.3.2有状态应用磁盘挂载603
第21章Kubernetes高级功能606
21.1容器化的非功能性需求607
21.1.1架构设计的非功能性考量607
21.1.2Kubernetes容器方案的架构特性607
21.2安全性608
21.2.1安全性整体思路608
21.2.2认证和授权609
21.2.3Pod安全策略612
21.2.4网络访问策略612
21.3可用性613
21.3.1高可用架构整体思路613
21.3.2Node节点高可用614
21.3.3etcd高可用615
21.3.4Master节点高可用615
21.4扩展性616
21.4.1水平还是垂直扩展616
21.4.2手动扩缩容616
21.4.3HPA自动扩缩容619
21.4.4Serverless扩缩容621
21.5易用性622
21.5.1易用性的考量要素622
21.5.2Helm应用包管理623
21.5.3CI/CD流水线627
21.6可观察性629
21.6.1集群观察要点629
21.6.2Dashboard629
21.6.3PrometheusGrafana630
21.6.4ElasticsearchFluentdKibana633
21.7【优惠券项目落地】――Kubernetes容器架构终态637
21.7.1实现服务高可用637
21.7.2容器水平扩展643
21.7.3设置性能监控告警643
21.7.4设置日志监控搜索645
21.7.5微服务容器化落地的思考646
第22章ServiceMesh647
22.1ServiceMesh在微服务中的应用648
22.1.1ServiceMesh引领微服务新时代648
22.1.2Istio的诞生和兴起649
22.1.3ServiceMesh在大厂中的应用650
22.2从BoofInfo样例起步650
22.2.1异构应用的网络互通650
22.2.2应用拓扑监控653
22.2.3应用蓝绿发布656
22.2.4ServiceMesh感受分享657
22.3了解Istio架构657
22.3.1Istio工作原理和整体架构657
22.3.2Proxy模块658
22.3.3Istiod模块659
22.4服务治理659
22.4.1服务治理的整体思路659
22.4.2灰度发布660
22.4.3故障注入663
22.4.4数据流镜像666
22.4.5服务熔断668
22.4.6服务网关669
22.5服务安全671
22.5.1服务安全整体思路671
22.5.2mTLS双向认证加密672
22.5.3基于mTLS的用户授权673
22.5.4用户认证授权675
22.6服务监控677
22.6.1服务监控整体思路677
22.6.2Prometheus+Grafana性能监控677
22.6.3Jaeger服务追踪679
22.7【优惠券项目落地】――非侵入式容器进阶态680
22.7.1激活ServiceMesh680
22.7.2透明授权验证682
22.7.3无埋点应用拓扑管理685
22.7.4优惠券项目容器化落地思考685
本书源码以Spring Boot 2.2.x、Spring Cloud Hoxton和Kubernetes 1.19.2为基础,从Spring Boot单体应用的搭建,到Spring Cloud微服务架构升级,再到使用Docker和Kubernetes容器编排技术做容器化改造,由浅入深、逐步讲解,使读者全面掌握主流微服务架构和容器编排方案。本书共22章,分为三个部分。第一部分,讲解Spring Boot的核心功能和底层原理,手把手带读者搭建一个基于Spring Boot的优惠券平台单体应用系统。第二部分,讲解Spring Cloud微服务技术的应用,涵盖了Spring Cloud Netflix和Spring Cloud 两大组件库的核心组件,在项目实战环节,将Spring Cloud微服务技术应用到优惠券项目中,让读者亲身体验从单体应用升级为微服务架构的过程。第三部分,深入讲解D等