《架构探险:轻量级微服务架构》读书笔记
黄勇著,本书分上下两册。各个章节之间的衔接关系不是很紧密。这也是当下技术书籍的一个通用套路吧。可以先行大致通读一遍,然后选择自己感兴趣或者薄弱章节仔细研读一番。
上册
- 第一章 微服务架构设计概述
- 第二章 微服务开发框架
- 第三章 微服务网关
- 第四章 微服务注册与发现
- 第五章 微服务封装
- 第六章 微服务部署
下册
- 第一章 轻量级的微服务
- 第二章 微服务日志
- 第三章 微服务监控
- 第四章 微服务通信
- 第五章 微服务解耦
- 第六章 微服务测试
- 第七章 微服务配置
1.微服务架构设计概述
2.微服务开发框架
讲解Spring boot。还是能学到一些不是很常用的技巧的。
SB中没有使用到任何代码生成技术。
GET类型的请求,可以简化为@RequestMapping,因为默认的REST API就是GET请求。
SB打包生成的jar包中有一个MANIFEST.MF文件,有一行Main-Class信息值得重视。
配置文件修改metrics端点的名称和路径:
endpoint.metric.id=doNotWantUKow
endpoint.metric.path=/vital/demo
SB的HATEOAS插件可以汇总端点信息,包括名称和链接。maven加入spring-boot-starter-hateoas即可。
SB提供HAL Browser网页图形化工具,加入依赖:
<dependency>
<groupId>org.webjars</groupId>
<artifactId>hal-browser</artifactId>
</dependency>
如果想了解Actuator,可以maven加入依赖:spring-boot-actuator-docs。然后发送/docs请求查看即可。
health的敏感信息不详暴露出去,配置文件新增配置即可:endpoints.health.sensitive=true
每次发送/health请求时,获取的健康情况实际上是从缓存中读取的,默认时间1000ms,叫做TTL,time to live,可配置:endpoints.health.time-to-live=1200
SB包含许多内置的健康检查功能,都对应着一个健康检查指标类(添加对应的starter,即可使用),即接口HealthIndicator的实现类,如果想要实现自定义的健康检查指标类,实现这个接口,并重写health()方法即可。
actuator已经很强大,spring-boot-admin更是专业级的监控工具。
跨域问题,解决方法:
- JSONP,JSON with padding,缺陷是只支持GET请求。通过iframe可以实现发送POST请求。
- CORS,cross-origin resource sharing
SB提供CORS支持,注意spring 4.2后才开始支持:
- 配置文件的方式
- 注解的
3.微服务网关
4.微服务注册与发现
5.微服务封装
6.微服务部署
微服务测试
使用Spring boot 单元测试
搭建REST API自动化测试框架
自动生成REST API文档
---------- 分割线 -------
7.轻量级的微服务
8.微服务日志
9.微服务监控
10.微服务通信
使用HTTP实现同步调用
RestTemplate不能直接通过依赖注入来获取该实例,必须通过RestTemplateBuilder来构建,后者可以直接依赖注入。RestTemplate对象的exchange()方法将HTTP header参数传递到服务端。
OkHttp是Square开源项目,支持HTTP2,所有发送到同一主机的请求能共享同一个socket连接,确保性能,提供连接池,gzip,响应缓存等特性。
使用RPC实现同步调用
搭建分布式RPC框架
11.微服务解耦
12.微服务测试
使用SB单元测试
搭建REST API自动化测试框架
自动生成REST API文档
Swagger
Swagger官方推出的API文档规范成为业界公认的OpenAPI文档规范。
Swagger工具三件套:Swagger Editor、Swagger CodeGen、Swagger UI。
搭建Swagger Editor镜像服务:
docker run -d -p 8081:8080 swaggerapi/swagger-editor
搭建Swagger UI镜像服务:
docker run -d -p 8082:8080 swaggerapi/swagger-ui
安装 Swagger CodeGen:
brew install swagger-codegen
swagger-codegen简单使用示例:
swagger-codegen generate -i -l <编程语言>
swagger-codegen generate -i http://petstore.swagger.io/v2/swagger.json -l spring
swagger-codegen generate -i http://petstore.swagger.io/v2/swagger.json -l java
文档驱动开发。
Java开发使用 swagger-core,引入maven依赖。
目前,swagger-core仅支持JAX-RS与servlet实现的REST API的文档生成,springfox解决这个问题,曾经的项目名是swagger-springmvc,提供集成解决方案,maven引入依赖 springfox-swagger2,springfox-swagger2 内部依赖于 swagger core项目的两个子依赖 swagger-models和swagger-annotations。另外,由于要在页面上可视化文档,需要引入springfox-swagger-ui依赖。
swagger对代码有侵入性!通过注解的方式。