《架构探险:轻量级微服务架构》读书笔记

黄勇著,本书分上下两册。各个章节之间的衔接关系不是很紧密。这也是当下技术书籍的一个通用套路吧。可以先行大致通读一遍,然后选择自己感兴趣或者薄弱章节仔细研读一番。

上册

  • 第一章 微服务架构设计概述
  • 第二章 微服务开发框架
  • 第三章 微服务网关
  • 第四章 微服务注册与发现
  • 第五章 微服务封装
  • 第六章 微服务部署

下册

  • 第一章 轻量级的微服务
  • 第二章 微服务日志
  • 第三章 微服务监控
  • 第四章 微服务通信
  • 第五章 微服务解耦
  • 第六章 微服务测试
  • 第七章 微服务配置

1.微服务架构设计概述

在这里插入图片描述

2.微服务开发框架

在这里插入图片描述
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,可在pom.xml加入依赖: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、CORS、Spring、Spring Security解决方案

  1. JSONP,JSON with padding,缺陷是只支持GET请求。通过iframe可以实现发送POST请求。
  2. CORS,cross-origin resource sharing

SB提供CORS支持,注意spring 4.2后才开始支持:

  1. 配置文件的方式
  2. 注解的

3.微服务网关

在这里插入图片描述
使用Node.js搭建API网关,实现反向代理。

反向代理的应用场景:

  • 动静分离:使静态资源和动态资源分离;
  • 实现Ajax跨域访问;
  • 搭建统一服务网关接口。

性能测试工具:Apache Benchmark。

4.微服务注册与发现

在这里插入图片描述

ZooKeeper,ZK五大特性:

  • 顺序性
  • 原子性
  • 单一性
  • 可靠性
  • 实时性

ZNode的四种节点类型

配置项

zkServer.sh脚本使用

搭建集群

连接ZK:

  • 命令行
  • Java客户端
  • Node.js客户端

5.微服务封装

关于Docker的知识点脑图:
在这里插入图片描述
Spotify的docker-maven-plugin插件

docker run -m参数调整容器内存限制。

6.微服务部署

本章的知识点脑图
在这里插入图片描述

微服务测试

使用Spring boot 单元测试

搭建REST API自动化测试框架

自动生成REST API文档

7.轻量级的微服务

在这里插入图片描述

8.微服务日志

在这里插入图片描述

9.微服务监控

在这里插入图片描述
Actuator端点:

Spring Boot Admin功能:

包括服务端和客户端。spring-boot-admin-server-ui封装一个Web应用程序,使用Node.js编写,使用Maven来运行Node.js持续。

开启JMX监控,引入jolokia-core依赖。

cAdvisor

Google开源的Go语言编写的用于分析Docker容器资源使用情况的开源组件。可通过Docker容器方式运行,然后监控当前宿主机中所有Docker容器的运行情况。

InfluxDB

docker启动命令:

Grafana

docker启动命令:

环境变量:GF_SECURITY_ADMIN_PASSWORD,设置密码

Zipkin

10.微服务通信

在这里插入图片描述

Retrofit

基于OkHttp,Maven依赖:

RPC

使用HTTP实现同步调用

RestTemplate不能直接通过依赖注入来获取该实例,必须通过RestTemplateBuilder来构建,后者可以直接依赖注入。RestTemplate对象的exchange()方法将HTTP header参数传递到服务端。

OkHttp是Square开源项目,支持HTTP2,所有发送到同一主机的请求能共享同一个socket连接,确保性能,提供连接池,gzip,响应缓存等特性。

11.微服务解耦

在这里插入图片描述
ActiveMQ管理两类消息通道:

  • Queue:队列,点对点通信,P2P,解决缓冲、耦合问题;
  • Topic:主题,发布与订阅,Publish-Subscribe,解决消息广播、耦合问题。

ActiveMQ吞吐量不高,一般都使用RabbitMQ。

Event-Sourcing

在一个对象从创建到销毁的整个生命周期中,会产生大量的事件Event,事件有自己所属的事件类型(Event Type)。
Event Type可枚举,事件无法枚举,事件包含时间、事件类型、模型等信息。
Event-Sourcing要求在记录对象状态的同时,还要去记录对象所发生的一系列事件,这些事件需要随时间的先后顺序依次记录到数据库。

12.微服务测试

在这里插入图片描述
JUnit注解@FixMethodOrder用于类上面:

@FixMethodOrder(MethodSorters.NAME_ASCENDING)

使JUnit以字母升序依赖执行各个测试方法。

其源码:

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface FixMethodOrder {
    MethodSorters value() default MethodSorters.DEFAULT;
}

MethodSorters是一个枚举类:

public enum MethodSorters {
    NAME_ASCENDING(MethodSorter.NAME_ASCENDING),
    JVM((Comparator)null),
    DEFAULT(MethodSorter.DEFAULT);

    private final Comparator<Method> comparator;
}

JUnit可以做断言,但不专业;可考虑使用AssertJ。

JsonPath,参考JsonPath实战

JSONassert,断言JSON字符串,

Postman

参考Postman使用教程

环境变量

自带的测试脚本

DevTools

newman

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对代码有侵入性!通过注解的方式。

apiDoc

13.微服务配置

在这里插入图片描述

Ansible

Registrator

搭建服务配置中心

自注册服务配置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

johnny233

晚饭能不能加鸡腿就靠你了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值