第 12 章 设计汇总

微服务开发并不是要学习 C#、Java 或者 Go 编程--而是要学习如何开发应用以适应并充分利用弹性伸缩环境的优势,它们对托管环境没有偏好,并能瞬间启停

换句话说,我们要学习如何开发云原生应用

识别并解决反模式

我们既然已经学习了所有的示例代码,就正好可以着手开发、运行并完善它们

此时,我想再来回顾其中一些思路和哲理,以便为决策过程提供更充分的信息

清理团队监控服务的示例

在这一示例中,我们从一个管理团队及团队成员的简单服务开始

后来扩展了服务的定义,向它添加了用于跟踪位置的后端服务

接着在第 6 章中,开发了一个解决方案

先由移动应用将团队成员的 GPS 坐标信息提交给位置报送服务

接着这一信息流经整个系统,最终产生关于接近事件的通知并发送到用户直接接触的某种界面

问题在于事件处理器和事实服务使用的其实是同一个数据存储

将数据库作为集成层一个常见的副作用在于:最终将有两个或更多服务依赖共同的数据库结构与方案才能正常工作

这意味着,我们将不能独立对基础数据存储进行变更,而这些服务的发布节奏最终将互相绑定在一起,而不能按照期望的方式独立地发布

为修正这一问题,我们可以重新设计架构

在新的设计中,事件处理器和事实服务并不使用相同的数据存储

事件处理器调用事实服务,让它完成写入当前位置的工作

在新的架构中,事实服务拥有事实缓存数据的唯一所有权

另一项优化是让事实服务维护其自有专用数据的同时,还维护一份外部缓存

继续辩论组合式微服务

组合式服务是依赖另一个服务的调用才能完成功能的服务

这种调用通常都是同步的,也就是需要阻塞原始调用,直到嵌套的一个或多个调用完成

在第 8 章中,请求产品详情的客户端,在目录服务发起向库存服务的同步调用以获取特定项的库存状态期间,只能等待

当这一做法在整个企业范围里大量运用,开始有客户报告超时和莫名其妙的服务端错误

这是因为在嵌套同步调用栈上的某个位置发生了失败,而下层的失败则会产生最终返回给客户端的层叠效应

使用断路器缓解风险

处理嵌套式同步调用的一种潜在方案是寻求一种后备机制,一种当调用链上任何位置出现失败时的统一处理方法

当后端服务出现失败时,为防止请求崩溃或者无限期等待而提供一种后备处理的做法通常称为实现了“断路器”模式

消除同步的组合模式

关于断路器和组合式服务最重要的决定并非是如何实现它们,而在于是否确实需要它们

就像我们并非永远都处在于一片乐土之中,我们也不可能总能得到理想中的微服务架构

不过,只要稍微花点时间,对问题和潜在的解决方案加以分析,找到排除常见障碍的思路,就可能避免服务组合

接下来,还要做什么

首先,也是最重要的一点就是“质疑一切”

本书的每一条建议和每一行代码都需要经过验证

本书只是一个起点,希望它能为你提供灵感,为你基于 C# 和 .NET Core 开发强大的、具有弹性伸缩能力和跨平台的微服务提供足够的技术支撑

.NET Core 需要更多的宣传和监督,以及更多人士在生产环境运用它,为完善和巩固它出谋划策,让它成为开发云原生微服务更具优势的平台

《ASP.NET Core 微服务实战》-- 读书笔记(第12章)相关推荐

  1. 《ASP.NET Core 微服务实战》译者序

    最近,我将<ASP.NET Core 微服务实战>一书由英文翻译为中文.这本书是由清华大学出版社引进的,目前还处于最后的排版校对过程中,现将该书的译者序发表于此. 以下为译者译全文: &q ...

  2. 《ASP.NET Core 微服务实战》送书结果公告

    如何构建基于.NET Core和云环境下的微服务技术体系?的送书抽奖结果已经出来了: 当前只有一位同学填写了地址.其他几位同学抓紧填写,3/9 日还没有完成填写将作废,奖品可是热门的<ASP.N ...

  3. 《ASP.NET Core 微服务实战》-- 读书笔记(第10章)

    第 10 章 应用和微服务安全 云应用意味着应用运行所在的基础设施无法掌控,因此安全不能再等到事后再考虑,也不能只是检查清单上毫无意义的复选框 由于安全与云原生应用密切相关,本章将讨论安全话题,并用示 ...

  4. 《ASP.NET Core 微服务实战》-- 读书笔记(第7章)

    第 7 章 开发 ASP.NET Core Web 应用 ASP.NET Core 基础 在本章,我们将从一个命令行应用开始,并且在不借助任何模板,脚手架和向导的情况下,最终得到一个功能完整的 Web ...

  5. 《ASP.NET Core 微服务实战》-- 读书笔记(第3章)

    第 3 章 使用 ASP.NET Core 开发微服务 微服务定义 微服务是一个支持特定业务场景的独立部署单元.它借助语义化版本管理.定义良好的 API 与其他后端服务交互.它的天然特点就是严格遵守单 ...

  6. 《ASP.NET Core 微服务实战》-- 读书笔记(第1章 、第2章)

    译者序 微服务设计方法清晰定义了各个开发团队的业务边界,微服务框架以不同方式实现了服务之间的协作与集成. .NET Core 作为全新的 .NET 技术,它不仅完全开源.跨平台,更面向云原生开发进行了 ...

  7. 《ASP.NET Core 微服务实战》-- 读书笔记(第9章)

    第 9 章 微服务系统的配置 微服务系统中的配置需要关注更多其他方面的因素,包括: 配置值的安全读写 值变更的审计能力 配置信息源本身的韧性和可靠性 少量的环境变量难以承载大型.复杂的配置信息 应用要 ...

  8. 《ASP.NET Core 微服务实战》-- 读书笔记(第11章)

    第 11 章 开发实时应用和服务 在本章,我们将讨论"实时"的准确含义,以及在大部分消费者看来应该属于这一范畴的应用类型 接着,我们将探讨 WebSocket,并分析为什么传统的 ...

  9. 《ASP.NET Core 微服务实战》-- 读书笔记(第6章)

    第 6 章 事件溯源与 CQRS 在本章,我们来了解一下随着云平台一同出现的设计模式 我们先探讨事件溯源和命令查询职责分离(CQRS)背后的动机与哲学 事件溯源简介 事实由事件溯源而来 我们大脑就是一 ...

最新文章

  1. (区间dp 或 记忆化搜素 )Brackets -- POJ -- 2955
  2. 2020年,人工智能如何走向高质量发展?
  3. JavaScript 运行机制详解
  4. 莫博士:Facebook别再推诿,请承担打击假新闻责任
  5. 维修点滴:键盘进杂物
  6. 三维里面点击播放视频
  7. 无法设置或未定义null引用的属性innerHTML
  8. pageControl设置不居中显示,居左或居右
  9. php laravel 相关收集
  10. 乾颐堂现任明教教主(2014年课程)TCPIP协议详解卷一 第三节课笔记
  11. php四段拼接ip,合并相同的ip段算法
  12. 或操作(||)和与操作()的执行顺序以及返回结果和优先级
  13. python爬取百度街景图像
  14. 亲自动手写爬虫系列一、实现一个最简单爬虫
  15. 为什么世界上只有13个根域名服务器
  16. python画circos图_手把手教你画Circos图
  17. 快看快看,这款免费的低代码平台绝绝子
  18. 基于excel的数据分析
  19. STM32L476R快速入门——前期准备(项目设计专题)
  20. 支持生僻字且自动识别utf-8编码的php汉字转拼音类,支持生僻字且自动识别utf-8编码的php汉字转拼音类_php技巧...

热门文章

  1. beautiful sentences
  2. (转)C#网络编程(基本概念和操作) - Part.1
  3. AJAX,只是一种过渡技术吗?
  4. powerpoint转换器_如何将PowerPoint演示文稿转换为主题演讲
  5. Web应用架构-Full-text Search Service
  6. 《统计会犯错——如何避免数据分析中的统计陷阱》—第2章置信区间的优势
  7. 通用路由封装(GRE)×××配置
  8. django基础1--django安装与helloworld测试
  9. XenServer XAPI简介
  10. XP下Virtualbox虚拟Ubuntu共享文件夹