《ASP.NET Core 微服务实战》-- 读书笔记(第12章)
第 12 章 设计汇总
微服务开发并不是要学习 C#、Java 或者 Go 编程--而是要学习如何开发应用以适应并充分利用弹性伸缩环境的优势,它们对托管环境没有偏好,并能瞬间启停
换句话说,我们要学习如何开发云原生应用
识别并解决反模式
我们既然已经学习了所有的示例代码,就正好可以着手开发、运行并完善它们
此时,我想再来回顾其中一些思路和哲理,以便为决策过程提供更充分的信息
清理团队监控服务的示例
在这一示例中,我们从一个管理团队及团队成员的简单服务开始
后来扩展了服务的定义,向它添加了用于跟踪位置的后端服务
接着在第 6 章中,开发了一个解决方案
先由移动应用将团队成员的 GPS 坐标信息提交给位置报送服务
接着这一信息流经整个系统,最终产生关于接近事件的通知并发送到用户直接接触的某种界面
问题在于事件处理器和事实服务使用的其实是同一个数据存储
将数据库作为集成层一个常见的副作用在于:最终将有两个或更多服务依赖共同的数据库结构与方案才能正常工作
这意味着,我们将不能独立对基础数据存储进行变更,而这些服务的发布节奏最终将互相绑定在一起,而不能按照期望的方式独立地发布
为修正这一问题,我们可以重新设计架构
在新的设计中,事件处理器和事实服务并不使用相同的数据存储
事件处理器调用事实服务,让它完成写入当前位置的工作
在新的架构中,事实服务拥有事实缓存数据的唯一所有权
另一项优化是让事实服务维护其自有专用数据的同时,还维护一份外部缓存
继续辩论组合式微服务
组合式服务是依赖另一个服务的调用才能完成功能的服务
这种调用通常都是同步的,也就是需要阻塞原始调用,直到嵌套的一个或多个调用完成
在第 8 章中,请求产品详情的客户端,在目录服务发起向库存服务的同步调用以获取特定项的库存状态期间,只能等待
当这一做法在整个企业范围里大量运用,开始有客户报告超时和莫名其妙的服务端错误
这是因为在嵌套同步调用栈上的某个位置发生了失败,而下层的失败则会产生最终返回给客户端的层叠效应
使用断路器缓解风险
处理嵌套式同步调用的一种潜在方案是寻求一种后备机制,一种当调用链上任何位置出现失败时的统一处理方法
当后端服务出现失败时,为防止请求崩溃或者无限期等待而提供一种后备处理的做法通常称为实现了“断路器”模式
消除同步的组合模式
关于断路器和组合式服务最重要的决定并非是如何实现它们,而在于是否确实需要它们
就像我们并非永远都处在于一片乐土之中,我们也不可能总能得到理想中的微服务架构
不过,只要稍微花点时间,对问题和潜在的解决方案加以分析,找到排除常见障碍的思路,就可能避免服务组合
接下来,还要做什么
首先,也是最重要的一点就是“质疑一切”
本书的每一条建议和每一行代码都需要经过验证
本书只是一个起点,希望它能为你提供灵感,为你基于 C# 和 .NET Core 开发强大的、具有弹性伸缩能力和跨平台的微服务提供足够的技术支撑
.NET Core 需要更多的宣传和监督,以及更多人士在生产环境运用它,为完善和巩固它出谋划策,让它成为开发云原生微服务更具优势的平台


本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。
《ASP.NET Core 微服务实战》-- 读书笔记(第12章)的更多相关文章
- ASP.NET Core微服务实战系列
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,码字辛苦,如果你吃了蛋觉得味道不错,希望点个赞,谢谢关注. 前言 这里记录的是个人奋斗和成长的地方,该篇只是一个系列目录和构想 ...
- 《ASP.NET Core In Action》读书笔记系列,这是一个手把手的从零开始的教学系列目录
最近打算系统学习一下asp.net core ,苦于没有好的中文书藉,只好找来一本英文的 <ASP.NET Core In Action>学习.我和多数人一样,学习英文会明显慢于中文.希 ...
- Spring Cloud微服务实战阅读笔记(一) 基础知识
本文系<Spring Cloud微服务实战>作者:翟永超,一书的阅读笔记. 一:基础知识 1:什么是微服务架构 是一种架构设计风格,主旨是将一个原本独立的系统拆分成多个小型服务 ...
- 《ASP.NET Core In Action》读书笔记系列五 ASP.NET Core 解决方案结构解析1
创建好项目后,解决方案资源管理器窗口里我们看到,增加了不少文件夹及文件,如下图所示: 在解决方案文件夹中,找到项目文件夹,该文件夹又包含五个子文件夹 -Models.Controllers.Views ...
- 《ASP.NET Core In Action》读书笔记系列四 创建ASP.NET Core 应用步骤及相应CLI命令
一般情况下,我们都是从一个模板(template)开始创建应用的(模板:提供构建应用程序所需的基本代码).本节使用 Visual Studio 2017 .ASP.NET Core2.0和 Visua ...
- 《ASP.NET Core In Action》读书笔记系列三 ASP.NET Core如何处理请求的?
在本节中,您将看到ASP.NET Core应用程序如何运行的,从请求URL开始到页面呈现在浏览器中. 为此,您将看到 一个HTTP请求在Web服务器中是如何被处理的.ASP.NET Core如何扩展该 ...
- 《ASP.NET Core In Action》读书笔记系列二 ASP.NET Core 能用于什么样的应用,什么时候选择ASP.NET Core
ASP.NET Core 能用于什么样的应用 ASP.NET Core 可以用作传统的web服务.RESTful服务.远程过程调用(RPC)服务.微服务,这归功于它的跨平台支持和轻量级设计.如下图所示 ...
- 《ASP.NET Core In Action》读书笔记系列一 ASP.NET Core 的诞生
最近打算系统学习一下asp.net core ,苦于没有好的中文书藉,只好找来一本英文的 <ASP.NET Core In Action>学习.我和多数人一样,学习英文会明显慢于中文.希 ...
- 【.NET Core微服务实战-统一身份认证】开篇及目录索引
简介 学习.NETCORE也有1年多时间了,发现.NETCORE项目实战系列教程很少,都是介绍开源项目或基础教程,对于那些观望的朋友不能形成很好的学习思路,遇到问题怕无法得到解决而不敢再实际项目中 ...
- 《C++ Primer 4th》读书笔记 第12章-类
原创文章,转载请注明出处:http://www.cnblogs.com/DayByDay/p/3936473.html
随机推荐
- vim处理冲突文件
一.文件冲突前: 二.文件冲突后(默认为): 此时编辑文档,将before改为after但是异常退出了,此时编辑文档提示冲突: 回车进入展示编辑前的文档: ll-a可查看到隐藏文件的信息: 三.文件冲 ...
- java基础-构建工具mvn-day20
目录 1. 初识mvn 2. 用maven创建工程 3. maven工程 之间的关系 4. 父子 mvn工程 5. mvn常见的插件 6. tomcat插件 1. 初识mvn mvn是一个项目构建工具 ...
- linux 查看服务器cpu 与内存配置
转载请注明出处: 1. 通过 lscpu 命令查看 服务器的cpu 配置 显示格式: Architecture: #架构 CPU(s): #逻辑cpu颗数 Thread(s) per core: #每 ...
- IDEA中无法调出中文输入法?
参考链接:idea写代码时无法切换到中文输入
- 【Gerrit】操作技巧
多笔提交依赖 1. cherry-pick 同步的多笔代码前后有依赖,如第M笔提交是基于第N笔修改的,直接同步过去会有冲突,所以同步M笔提交时需要基于N笔提交,即写入第N笔commit-id 上述填的 ...
- Laravel - 修改时间戳
将 config/app.php文件下将timezone的值改成Asia/Shanghai即可
- [转帖]为什么 Java 内部使用 UTF-16 表示字符串?
https://www.jianshu.com/p/957b249a02d8 背景 许多年前 Unicode 的提出者天真地以为 16 位定长的字符可以容纳地球上所有仍具活力的文字,Java 设计者也 ...
- 【转帖】磁盘IOPS的计算
计算磁盘IOPS的三个因素: 1.RAID类型的读写比 不同RAID类型的IOPS计算公式: RAID类型 公式 RAID5.RAID3 Drive IOPS=Read IOPS + 4*Write ...
- [转帖]Skywalking学习及整合springboot
目录 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要特性 4. Skywalking架构简介 5. Spring Cloud与Skywalking实 ...
- [转帖]linux 系统级性能分析工具 perf 的介绍与使用
目录 1. 背景知识 1.1 tracepoints 1.2 硬件特性之cache 2. 主要关注点 3. perf的使用 3.0 perf引入的overhead 3.1 perf list 3.2 ...