第34期-微服务体系架构技术总结
- 2020/6/4 1:06 | 26分钟
- VIP
容器化应用管理,关系型与非关系型数据库,分布式消息队列,分布式缓存,服务网关实现,反向代理与负载均衡,分布式结构化日志系统,服务注册与发现,健康状况监测,依赖注入容器,轻量级数据访问框架,链式验证规则,实体属性自动映射,远程过程调用,实现单点登录,使用中介者模式的领域事件,客户端实时通信与通知,容错故障处理,日志收集器,帮助文档生成工具,网络钩子,实现后台自动任务,自动化测试,前端库管理与性能优化。
容器化应用管理,关系型与非关系型数据库,分布式消息队列,分布式缓存,服务网关实现,反向代理与负载均衡,分布式结构化日志系统,服务注册与发现,健康状况监测,依赖注入容器,轻量级数据访问框架,链式验证规则,实体属性自动映射,远程过程调用,实现单点登录,使用中介者模式的领域事件,客户端实时通信与通知,容错故障处理,日志收集器,帮助文档生成工具,网络钩子,实现后台自动任务,自动化测试,前端库管理与性能优化。
分布式与结构化日志系统,可用 Serilog 与 NLog 收集日志 ,学习微软 eShop 微服务体系结构中的 Seq 分布结构化日志系统,收集应用程序日志,强大的搜索与过滤机制,分析并绘制日志图表,警报与通知,工具链 ELK 由 ElasticSearch、Logstash 和 Kiabana 三个开源工具组成,使用 ELK 搭建大规模分布式实时日志分析平台,使用 RequestID 在分布式系统中追踪请求。
不同微服务间的通信方式,相同微服务不同领域聚合之间的通信方式,使用 Webhooks 网络钩子向外部系统发送事件通知,学习微软 eShop 微服务体系架构中关于 Webhook 网络钩子的实现,实现钩子查询和注册退订接口,使用可视化客户端界面管理钩子,钩子操作的认证与授权机制。
微服务的安全性,理解身份认证与授权过程,实现单点登录,使用 Identity 进行身份验证,使用外部提供程序进行身份验证,使用持有者令牌进行身份验证,使用 OpenID Connect 或 OAuth 2.0 标识提供程序进行身份验证,使用 IdentityServer 服务颁发安全令牌,跨多个微服务传递访问令牌,关于 JwtBearer 与 Cookie 认证,基于角色的授权和基于策略的授权,在开发过程中安全地存储应用程序机密。
理解关系型数据库与 NoSQL 非关系型数据库,列式数据存储与键值数据存储的区别,学习 MongoDB 数据库,在 Docker 容器中运行 MongoDB 数据库,使用图形化界面管理 MongoDB 数据库,在 ASP.NET Core 中使用开源驱动程序对 MongoDB 数据库实现 CRUD 操作,微软 eShop 微服务架构中应用 MongoDB 存储用户的 GPS 地理位置信息。
在 CQRS 微服务中实现读写分离,理解领域实体与视图模型的区别,使用 Dapper 作为微型 ORM 以执行查询,实现领域事件处理程序,基于 Autofac 扩展依赖注入容器,使用 MediatR 实现命令与命令处理程序模式,使用中介者管道拦截器对命令执行 FluentValidation 链式验证,命令日志记录拦截器,实现可扩展的命令去重功能。
学习 eShop 微服务架构源码,学习面向 DDD 微服务的分层架构,实现领域模型层,编写聚合根、领域实体、值对象和领域事件,适用于领域模型的可重用基类与接口,使用枚举类不是枚举类型,仓储模式与工作单元接口,使用 EfCore 实现基础结构持久层,请求消息去重机制。
在微服务中应用简化后的 CQRS 和 DDD 模式,事件溯与 CQRS 模式,设计面向 DDD 的微服务,设计微服务领域模型,聚合跟、领域实体和值对象,贫血模型与充血模型,模型验证,领域事件的设计和实现,领域事件与集成事件的区别,设计基础结构持久性层,仓储模式与工作单元,使用 EfCore 和 NoSQL 实现基础设施层,设计微服务应用层和 Web API 接口,实现命令和命令处理程序模式。
基于微服务的单元测试、集成测试和功能测试,学习微软 eShop 微服务体系结构中的测试方式,单元测试与 Mock 虚拟对象,为提高集成测试与功能测试的执行效率,可使用 TestHost 在进程内模拟测试服务器,测试微服务之间的交互协作,使用多环境配置文件,在 Docker 容器中运行测试项目。
多体系微服务结构模式,设计面向微服务的 .NET Core 应用程序,创建简单的数据驱动 CRUD 微服务,学习微软 eShop 微服务体系结构源码,定义多容器应用程序,容器环境变量,在容器中运行数据库,数据库迁移与演示数据生成,使用内存数据库提升开发环境性能,在容器中运行的 Redis 分布式缓存服务,在微服务中实现后台自动任务。
微服务的复原模式与容错性,瞬态故障处理设计,重试机制,指数退避算法与抖动策略,超时机制,缓存策略,断路器模式,回退机制,限制请求数,限流限次与计费机制,使用 Polly 开源库处理瞬态故障,编写处理条件,设置策略,使用策略执行方法,可将策略注入到依赖容器,将 HttpClientFactory 与 Polly 集成,学习微软 eShop 微服务体系架构中的瞬态故障处理方式,关于管道中间件实现断路器模拟测试方案。
实现可复原的微服务,瞬时故障与容错性,微软 EF Core 提供程序针对特定数据库的失败条件提供定制的执行策略,同时提供最佳的重试策略,配置重试次数、重试间隔和错误代码,数据库连接字符串中的重试参数,自定义执行策略,执行策略与事务,事务提交失败和幂等性问题,学习 eShop 微服务体系架构中重试机制与事务执行策略的应用。
运行状况监视可获取有关容器和微服务状态的近实时信息,容器业务流程协调程序和负载均衡器用于检查应用的状态,运行状况检查由应用程序作为 HTTP 终结点公开,微软 ASP.NET Core 提供运行状况检查解决方案,配置运行状况检查,编写自定义健康检查器,使用开源扩展库实现运行状况检查,可视化展示与历史状况时间线,可用 Webhook 网络钩子通知其它服务,微软 eShop 微服务体系架构中的健康状况检查。
微服务体系结构通常从服务器端开始处理数据和逻辑,许多情况下 UI 仍作为整体来处理,对于复杂的业务规模,整体式 UI 难以维护,一种称为微前端方法可生成复合 UI 界面,按照这种方法构建的微服务具有自治的逻辑和可视化表示形式,功能十分完整,与之相比,复合 UI 是由微服务本身精确生成和组合而成的,可灵活控制 UI 特定区域的视觉形状。
每个微服务都有唯一名称,用于解析其位置,了解 DNS 解析系统,理解微服务的可寻址性,服务注册表与服务发现,主流的服务注册解决方案,使用开源 Consul 工具搭建服务注册与发现集群,健康检查,负载均衡,全局分布式的键值存储,实战演练,基于 ASP.NET Core 构建微服务,在注册表集群中动态注册服务,使用服务发现动态调用微服务,关于 Consul 与 Ocelot、Nginx、Envoy 和 Kubernetes 的深度集成。
使用完整事件溯源模式,事务日志挖掘,使用发件箱模式关联数据库事务,记录事件日志,将事件发布到总线的原子性,使用辅助微服务将事件发布到总线的复原能力,更新事件消息的幂等性,代码实战演练,使用 EF Core 实现通用的发件箱模式,微软 eShop 微服务架构中关于事件总线的应用。
学习微软 eShop 微服务架构中的事件总线,实现可扩展的事件总线,消息事件定义,事件总线接口抽象,事件处理程序抽象,基于动态类型的处理程序,事件与订阅者管理器,使用 RabbitMQ 完成事件总线接口,使用指数退避算法实现连接复原,依赖注入扩展与配置选项,通过示例代码实战演练,生产者与消费者处理器的依赖注入。
认识 RabbitMQ 提供的命令行工具,学习图形化管理界面,分别配置虚机、连接、通道、交换机、队列、用户和权限,使用图形界面跟踪性能并调试队列,配置队列读写权限,生产者与消费者的身份认证授权,关于 RabbitMQ 高可用性与分布式集群的搭建,使用 Docker 容器编排文件快速启动分布式集群,其它扩展功能介绍。
生产者将消息发布到 Direct 类型的交换机,消费者通过路由键将队列绑定到交换机消费消息,生产者将消息发布到 Topic 类型的交换机,消费者使用路由键通配符订阅消息,使用回复队列间接实现基于 RPC 的请求模式,使用 ACK 确认机制保证生产者与消费者传输消息的可靠性,示例代码与实战演练。
关于 AMQP 通信协议与 RabbitMQ 的基本架构,生产者,消费者,交换机,队列,路由键,虚拟机,使用多个通道复用物理连接,安装方式说明,在 Docker 容器中运行 RabbitMQ 服务端,通过编写代码实战演练,最简单的队列通信方式,将生产者消息分配给多个工作进程,分布式队列的发布订阅模式,定义队列与交换机,并将队列绑定到交换机,消息到达后的自动确认与手动确认。
同步与异步通信,关于 AMQP 高级消息队列协议,基于异步通信的单接收者与多接收者,事件驱动的异步通信,观察者模式,发布者与订阅者模式,抽象可扩展的事件总线接口,事件总线接口的多个实现,发布事件的原子性和复原能力,使用事件溯源模式和发件箱模式实现数据的高可用性与一致性。
认识 K8S 容器集群管理解决方案,理解 Docker 物理架构层次图和体系结构图,关于 Kubernetes 体系架构图,微软 eShop 微服务体系架构中的 K8S 集群部署,如何学习 Docker 和 Kubernetes 技术,使用可视化的界面管理集群,微软 Visual Studio 提供的 Kubernetes 工具可简化面向容器化应用程序的开发。
常用 Docker 命令集合,学习微软平台上开发 Docker 应用程序的流程,构建 Docker 容器开发环境,安装 Visual Studio 容器工具工作负载,在项目中启用 Docker 支持,生成镜像,使用发布工具发布映像到远程仓库注册表,使用容器业务流程协调程序支持管理多个容器,多环境配置文件管理,在项目中读取配置文件,关于容器工具的相关设置。
如何定义每个微服务的边界,创建从多个微服务中检索数据的查询,可用 API 网关聚合数据,关于 CQRS 命令查询职责分离,具体化视图模式,如何实现微服务之间的数据一致性,分布式系统设计中的 CAP 原则与 BASE 原则,同步通信与异步通信,如何设计跨微服务边界的通信。基于分布式消息队列的异步通信,在事件总线上发布与订阅,事件溯源模式。
开源 Envoy 是专为代理和通信总线而设计的,关于官方文档与指南,通过编写 ASP.NET Core 示例演示 Envoy 的使用方法,镜像生成与容器编排,在 Docker 容器中运行 Envoy 代理,使用 Dcoker 容器卷映射配置文件,路由规则设置,负载均衡集群和算法策略配置,学会 Visual Studio 提供 Docker 镜像与容器可视化管理工具,微软 eShop 微服务体系架构中的 Envoy 应用,网关模式与 BFF 代理设计。
学习微软 eShop 微服务体系架构中的网关设计思想,使用单个 Docker 容器映像通过不同的配置运行多个不同类型的 API 网关或 BFF 容器,微服务架构中的网关聚合模式,在网关层面使用 IdentityServer 实现的身份认证与授权横切点,通过分析项目源代码,深入理解微服务中的网关设计和具体实现。
学习 Ocelot 开源网关,理解功能特点,配置,路由规则,请求聚合,服务发现,认证授权,限次限速,谓词转换,缓存,服务质量,请求头转换,用户声明转换,分布式日志追踪,通过示例演示请求转发功能,配置负载均衡服务列表与均衡算法策略,使用 API 聚合器合并多个返回结果,编写自定义的请求聚合器。
正向代理与反向代理,负载均衡,动静分离,高可用性与容错能力,守候进程与工作进程,无需重新启动的热部署,将 Nginx 寄宿到 Windows 服务中,解读强大详细的配置文件,通过示例实战演练,负载均衡策略,默认轮询,加权轮询,最少连接原则,加权最少连接,IP哈希算法,Url哈希算法,关于开源的 Nginx 可视化管理工具,可在 Docker 容器 中运行 Nginx 支持,推荐优质的学习资源。
客户端与微服务终结点直接通信,对于大型复杂应用程序,面临很多问题,可使用客户端到 API 网关的通信模式,实现 BFF 面向前端的后端模式,网关模式的主要功能,反向代理或网关路由,请求聚合,使用第三方框架实现网关功能,分析网关模式的缺点,学习 eShopOnContainers 项目中关于 API 网关模式与 BFF 模式的应用。
在为每个微服务定义模型边界和大小时,应尽可能倾向于小型微服务,但目标并不是尽可能达到最细粒度的分离,根据领域驱动 DDD 限定上下文分析模型的边界,康威定律规定应用程序应反映开发团队的组织结构,若要定义有界上下文,可以使用 DDD 上下文映射模式,关于 eShopOnContainers 项目中的微服务定义。
理解 Docker 容器、映像和注册表,容器的设计原则,容器化单体式应用程序,容器化应用程序中的状态和数据共享,容器化面向 SOA 服务的体系结构,微服务体系结构指南,微服务与 DDD 界定上下文模式之间的关系,逻辑体系结构与物理体系结构。
配置 Visual Studio 开发环境,运行 eShopOnContainers 项目源码,快速生成 Docker 映像,将映像推到容器中运行,使用可视化管理工具查看映像与容器,探索微服务接口和 Web 应用程序,运行基于 Xamarin 开发的 iOS、Android 和 UWP 移动应用,分别使用模拟器和真机运行移动应用。
微服务体系结构与容器化应用程序,虚拟机与容器,系统需求,硬件要求与软件要求,配置 Docker 容器主机,使用脚本配置网络防火墙,克隆项目到本地,项目结构目录说明,构建并生成应用程序映像,将微服务映像推到容器中运行,探索应用程序中提供的各种微服务。
在微服务架构非常流行的今天,微软也提供了一个基于 .NET Core 平台的微服务架构参考示例,微软 eShopOnContainers 项目架构基于 .NET Core 平台和 Docker 容器,提供一个简化版的在线商城项目,该项目中所使用了很多技术点,可供参考学习,微服务架构图,客户端应用与服务端应用,微服务架构模式,适用于容器化的 .NET 应用程序的体系结构。