深入分析Java Web技术内幕(修订版)、 java微服务
书号:9787121232930 9787121304934
微服务是利用云平台开发企业应用程序的新技术,它是小型、轻量和过程驱动的组件。微服务适合设计可扩展、易于维护的应用程序。可以使开发更容易,还能使资源得到佳利用。本书帮助你用Java构建供企业使用的微服务架构,内容包括微服务核心概念和框架、大型软件项目的高层次设计、开发环境设置和前期配置、对微服务架构持续集成的部署、实现微服务的安全性、有效地执行测试、微服务设计的佳做法和一般原则,以及如何检测和调试问题。本书适合想要了解微服务架构,以及想要深入了解如何有效地实施企业级微服务的Java开发人员。
前言 XV
1 一种解决方法 1
微服务的演变 2
整体式架构概述 3
整体式架构的局限性与它的微服务解决方案的对比 3
一维的可扩展性 6
在出故障时回滚版本 7
采用新技术时的问题 7
与敏捷实践的契合 8
减轻开发工作量——可以做得更好 9
微服务的构建管道 10
使用诸如Docker的容器部署 11
容器 11
Docker 12
Docker的架构 13
Docker容器 14
部署 14
小结 14
2 设置开发环境 17
Spring Boot配置 18
Spring Boot概述 18
把Spring Boot添加至REST示例 19
添加一个嵌入式Jetty服务器 21
示例REST程序 22
编写REST控制器类 24
@RestController 25
@RequestMapping 25
@RequestParam 25
@PathVariable 26
制作一个示例REST可执行应用程序 29
设置应用程序构建 30
运行Maven工具 30
用Java命令执行 31
使用Postman Chrome扩展测试REST API 31
更多的正向测试场景 34
反向的测试场景 35
NetBeans IDE安装和设置 37
参考资料 42
小结 42
3 领域驱动设计 43
领域驱动设计基本原理 44
组成部分 45
普遍存在的语言 45
多层架构 45
表示层 46
应用程序层 46
领域层 46
基础架构层 47
领域驱动设计的工件 47
实体 47
值对象 48
服务 49
聚合 50
存储库 52
工厂 53
模块 54
战略设计和原则 55
有界上下文 55
持续集成 56
上下文映射 57
共享内核模式 58
客户和供应商模式 58
顺从者模式 59
反腐层 59
独立方法 59
开放主机服务 60
精馏 60
示例领域服务 60
实体的实现 61
存储库的实现 63
服务的实现 66
小结 67
4 实现微服务 69
OTRS概述 70
开发和实现微服务 71
餐馆微服务 72
控制器类 73
服务类 76
存储库类 79
实体类 82
预订和用户服务 85
注册和发现服务(Eureka服务) 85
执行 87
测试 87
参考资料 92
小结 92
5 部署和测试 93
使用Netflix OSS的微服务架构概述 93
负载均衡 95
客户端的负载均衡 95
服务器端的负载均衡 98
电路断路器与监控 102
使用Hystrix的回退方法 102
监控 103
设置Hystrix仪表板 105
设置Turbine 107
使用容器部署微服务 109
安装和配置 109
具有4 GB内存的Docker机器 110
使用Maven构建Docker映像 110
使用 Maven 运行Docker 114
使用Docker执行集成测试 115
把映像推送到注册表 118
管理Docker容器 119
参考资料 121
小结 121
6 实现微服务的安全性 123
启用安全套接字层 123
身份验证和授权 127
OAuth 2.0 127
OAuth的用法 128
OAuth 2.0规范——简明详细信息 128
OAuth 2.0角色 129
OAuth 2.0客户端注册 131
OAuth 2.0协议端点 135
OAuth 2.0授权类型 137
使用Spring Security的OAuth实现 144
授权码许可 150
隐式许可 153
资源所有者密码凭据许可 154
客户端凭据许可 155
参考资料 155
小结 156
7 利用微服务Web应用程序来使用服务 157
AngularJS框架概述 157
MVC 158
MVVM 158
模块 158
提供程序和服务 160
作用域 161
控制器 161
过滤器 161
指令 162
UI-Router 162
OTRS 功能的开发 163
主页/餐馆列表页 163
index.html 164
app.js 169
restaurants.js 172
restaurants.html 179
搜索餐馆 180
餐馆详细信息与预订选项 181
restaurant.html 181
登录页面 183
login.html 184
login.js 185
预订确认 186
设置web应用程序 187
小结 201
8 佳做法和一般原则 203
概述和心态 203
佳做法和原则 205
Nanoservice(不推荐)、规模和整体性 205
持续集成和部署 206
系统/端到端测试自动化 207
自我监控和记录 207
每个微服务都使用独立的数据存储区 209
事务边界 210
微服务框架和工具 210
深入分析Java Web技术内幕(修订版)
阿里巴巴集团技术丛书。技术大牛范禹、玉伯、毕玄联合力荐!大型互联网公司开发应用实践!
内容简介:
《深入分析Java Web技术内幕(修订版)》新增了淘 宝在无线端的应用实践,包括:CDN 动态加速、多终端化改造、 多终端Session 统一 ,以及在大流量的情况下,如何跨越性能、网络和一个地区的电力瓶颈等内容,并提供了比较完整的解决方案。
《深入分析Java Web技术内幕(修订版)》主要围绕Java Web 相关技术从三方面全面、深入地进行了阐述。首先介绍前端知识,即在JavaWeb 开发中涉及的一些基本知识,包括Web 请求过程、HTTP、DNS 技术和CDN 技术。其次深入介绍了Java 技术,包括I/O 技术、中文编码问题、Javac 编译原理、class 文件结构解析、ClassLoader 工作机制及JVM 的内存管理等。·后介绍了Java 服务端技术,主要包括Servlet、Session 与Cookie、Tomcat 与Jetty服务器、Spring 容器、iBatis 框架和Velocity 框架等原理介绍,并介绍了服务端的一些优化技术。
《深入分析Java Web技术内幕(修订版)》不仅介绍这些技术和框架的工作原理,而且结合示例来讲解,通过通俗易懂的文字和丰富、生动的配图,让读者充分并深入理解它们的内部工作原理,同时还结合了设计模式来介绍这些技术背后的架构思维。
目录:
第1章 深入Web请求过程1
1.1 B/S网络架构概述2
1.2 如何发起一个请求4
1.3 HTTP协议解析6
1.3.1 查看HTTP信息的工具8
1.3.2 浏览器缓存机制9
1.4 DNS域名解析12
1.4.1 DNS域名解析过程12
1.4.2 跟踪域名解析过程15
1.4.3 清除缓存的域名18
1.4.4 几种域名解析方式19
1.5 CDN工作机制20
1.5.1 CDN架构20
1.5.2 负载均衡21
1.5.3 CDN动态加速24
1.6 总结25
第2章 深入分析Java I/O的工作机制26
2.1 Java的I/O类库的基本架构26
2.1.1 基于字节的I/O操作接口27
2.1.2 基于字符的I/O操作接口28
2.1.3 字节与字符的转化接口29
2.2 磁盘I/O工作机制30
2.2.1 几种访问文件的方式30
2.2.2 Java访问磁盘文件34
2.2.3 Java序列化技术35
2.3 网络I/O工作机制37
2.3.1 TCP状态转化38
2.3.2 影响网络传输的因素40
2.3.3 Java Socket的工作机制40
2.3.4 建立通信链路41
2.3.5 数据传输42
2.4 NIO的工作方式42
2.4.1 BIO带来的挑战42
2.4.2 NIO的工作机制43
2.4.3 Buffer的工作方式46
2.4.4 NIO的数据访问方式48
2.5 I/O调优50
2.5.1 磁盘I/O优化50
2.5.2 TCP网络参数调优51
2.5.3 网络I/O优化53
2.6 设计模式解析之适配器模式57
2.6.1 适配器模式的结构57
2.6.2 Java I/O中的适配器模式58
2.7 设计模式解析之装饰器模式58
2.7.1 装饰器模式的结构59
2.7.2 Java I/O中的装饰器模式59
2.8 适配器模式与装饰器模式的区别60
2.9 总结60
第3章 深入分析Java Web中的中文编码问题61
3.1 几种常见的编码格式61
3.1.1 为什么要编码61
3.1.2 如何“翻译”62
3.2 在Java中需要编码的场景64
3.2.1 在I/O操作中存在的编码64
3.2.2 在内存操作中的编码66
3.3 在Java中如何编解码67
3.3.1 按照ISO-8859-1编码69
3.3.2 按照GB2312编码70
3.3.3 按照GBK编码71
3.3.4 按照UTF-16编码71
3.3.5 按照UTF-8编码72
3.3.6 UTF-8编码代码片段72
3.3.7 对几种编码格式的比较74
3.4 在Java Web中涉及的编解码74
3.4.1 URL的编解码76
3.4.2 HTTP Header的编解码79
3.4.3 POST表单的编解码79
3.4.4 HTTP BODY的编解码80
3.5 JS中的编码问题81
3.5.1 外部引入JS文件81
3.5.2 JS的URL编码82
3.5.3 其他需要编码的地方84
3.6 常见问题分析84
3.6.1 中文变成了看不懂的字符84
3.6.2 一个汉字变成一个问号85
3.6.3 一个汉字变成两个问号85
3.6.4 一种不正常的正确编码86
3.7 一种繁简转换的实现方式87
3.8 总结88
第4章 Javac编译原理89
4.1 Javac是什么90
4.2 Javac编译器的基本结构90
4.3 Javac工作原理分析92
4.3.1 词法分析器93
4.3.2 语法分析器100
4.3.3 语义分析器105
4.3.4 代码生成器115
4.4 设计模式解析之访问者模式118
4.4.1 访问者模式的结构119
4.4.2 Javac中访问者模式的实现120
4.5 总结121
第5章 深入class文件结构122
5.1 JVM指令集简介122
5.1.1 与类相关的指令124
5.1.2 方法的定义125
5.1.3 属性的定义126
5.1.4 其他指令集127
5.2 class文件头的表示形式135
5.3 常量池139
5.3.1 UTF8常量类型142
5.3.2 Fieldref、Methodref常量类型143
5.3.3 Class常量类型143
5.3.4 NameAndType常量类型144
5.4 类信息144
5.5 Fields和Methods定义145
5.6 类属性描述149
5.7 Javap生成的class文件结构150
5.7.1 LineNumberTable152
5.7.2 LocalVariableTable153
5.8 总结155
第6章 深入分析ClassLoader工作机制156
6.1 ClassLoader类结构分析157
6.2 ClassLoader的等级加载机制158
6.3 如何加载class文件161
6.3.1 加载字节码到内存161
6.3.2 验证与解析163
6.3.3 初始化Class对象163
6.4 常见加载类错误分析163
6.4.1 ClassNotFoundException163
6.4.2 NoClassDefFoundError164
6.4.3 UnsatisfiedLinkError165
6.4.4 ClassCastException166
6.4.5 ExceptionInInitializerError167
6.5 常用的ClassLoader分析168
6.6 如何实现自己的ClassLoader172
6.6.1 加载自定义路径下的class文件172
6.6.2 加载自定义格式的class文件174
6.7 实现类的热部署176
6.8 Java应不应该动态加载类178
6.9 总结179
第7章 JVM体系结构与工作方式180
7.1 JVM体系结构180
7.1.1 何谓JVM180
7.1.2 JVM体系结构详解183
7.2 JVM工作机制185
7.2.1 机器如何执行代码185
7.2.2 JVM为何选择基于栈的架构186
7.2.3 执行引擎的架构设计187
7.2.4 执行引擎的执行过程188
7.2.5 JVM方法调用栈193
7.3 总结197
第8章 JVM内存管理198
8.1 物理内存与虚拟内存199
8.2 内核空间与用户空间200
8.3 在Java中哪些组件需要使用内存201