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

第 12 章 设计汇总

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

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

识别并解决反模式

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

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

清理团队监控服务的示例

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

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

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

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

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

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

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

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

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

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

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

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

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

继续辩论组合式微服务

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

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

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

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

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

使用断路器缓解风险

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

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

消除同步的组合模式

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

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

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

接下来,还要做什么

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[蓝桥杯2017初赛]纸牌三角形-枚举permutation+数论

题目描述 A,2,3,4,5,6,7,8,9 共9张纸牌排成一个正三角形(A按1计算)。要求每个边的和相等。 下图就是一种排法这样的排法可能会有很多。 如果考虑旋转、镜像后相同的算同一种,一共有多少种不同的排法呢? 输出 输出一个整数表示答…

算法----最大承载量下的最大价值问题

算法----最大承载量下的最大价值问题 代码&#xff1a; 栈代码&#xff1a;&#xff08;存储哪些是需要的价值物&#xff09; #pragma once #include<stdio.h> #define maxSize 100 typedef struct stack {int * base;int * top; }stack; bool init(stack & Stack…

oracle多条件分组统计_多条件统计,就必须用Ifs系列函数,绝对的高能!

数据统计&#xff0c;我们并不陌生&#xff0c;但是在实际的工作或应用中&#xff0c;数据统计都是附加条件的&#xff0c;而且大多情况下是“多条件”的&#xff0c;此时&#xff0c;我们必须掌握“Ifs”系列函数。一、多条件判断&#xff1a;Ifs函数。功能&#xff1a;判断指…

AcWing 895. 最长上升子序列

给定一个长度为N的数列&#xff0c;求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数N。 第二行包含N个整数&#xff0c;表示完整序列。 输出格式 输出一个整数&#xff0c;表示最大长度。 数据范围 1≤N≤1000&#xff0c; −10^9≤数列中的数≤ 10…

word List18

word List18 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

AcWing 1015. 摘花生

Hello Kitty想摘点花生送给她喜欢的米老鼠。 她来到一片有网格状道路的矩形花生地(如下图)&#xff0c;从西北角进去&#xff0c;东南角出来。 地里每个道路的交叉点上都有种着一株花生苗&#xff0c;上面有若干颗花生&#xff0c;经过一株花生苗就能摘走该它上面所有的花生。…

干货,不小心执行了rm -f,除了跑路,如何恢复?

作者&#xff1a;justmine头条号&#xff1a;大数据与云原生微信公众号&#xff1a;大数据与云原生创作不易&#xff0c;在满足创作共用版权协议的基础上可以转载&#xff0c;但请以超链接形式注明出处。为了方便阅读&#xff0c;微信公众号已按分类排版&#xff0c;后续的文章…

数据结构----二叉树叶子结点到根节点的高度计算

数据结构----二叉树叶子结点到根节点的高度计算 代码&#xff1a; #include<stdio.h> #include<stdlib.h> typedef struct bstTree {int data;struct bstTree* lchild, *rchild; }bstTree; void createBSTTree(bstTree* & T, int data) {//创建二叉排序树bst…

nginx 带宽_前端工程师不可不知的Nginx知识

历史背景互联网的全球化导致了互联网的数据量快速增长&#xff0c;加上在本世纪初摩尔定律在单核 CPU 上的失效&#xff0c;CPU 朝着多核方向发展&#xff0c;而 Apache 显然并没有做好多核架构的准备&#xff0c;它的一个进程同一时间只能处理一个连接&#xff0c;处理完一个请…

网格路径最小数字和

给定一个包含非负整数的 m x n 网格&#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 说明&#xff1a;每次只能向下或者向右移动一步。 数据范围&#xff1a; n < 100,m < 100; 输入&#xff1a; 3 3 1 3 1 1 5 1 4 2 1 输出&a…

word List 19

word List 19 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

矩形法_字体设计 | 新手必学,超简单的矩形造字法!!

点击蓝字关注&#xff0c;创智助你长姿势作为一个刚刚踏入设计界的“萌新”来说&#xff0c;字体设计可能是除了版式设计之外最简单的功课了&#xff0c;那么今天教学内容就是最简单的字体设计&#xff1a;矩形造字法。矩形造字法是以软件中的“矩形工具”为基础&#xff0c;以…

NETCore Bootstrap Admin 通用后台管理权限 [1]: 前后台分离系统简介

前言从事软件开发这个行业现在已经有十几年了&#xff0c;项目无论大小权限认证、授权模块总是或多或少有功能需求的&#xff0c;这一块费时费力但是又存在于后台&#xff0c;使用最多的可能是运维人员所以处于出力不讨好的尴尬地位&#xff0c;每次有新的项目总是要耗费不少时…

不同路径 I

一个机器人位于一个 n * m 网格的左上角 &#xff08;起始点在下图中标记为“Start” &#xff09;。(n表示行&#xff0c;m表示列) 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为“Finish”&#xff09;。 问总共有多少条不同…

数据结构---前序和中序遍历的二叉树序列还原二叉树

数据结构—前序和中序遍历的二叉树序列还原二叉树 代码&#xff1a; #include<stdio.h> #include<stdlib.h> typedef struct bstTree {char data;struct bstTree* lchild, *rchild; }bstTree; bstTree * reStoreTree(char* pre, int preSt, int preEnd, char *mi…

c++ 位运算_C语言之运算符

运算符代表的是各种各样的运算(操作)已知的运算符&#xff1a; - * / (赋值)1.运算符的分类运算符的分类方法很多&#xff0c;通常用功能或者操作数个数进行分类功能&#xff1a;算数运算符 逻辑运算符 位运算符 地址运算符.......操作数个数&#xff1a;单目运算符 双目运算符…

微软 PowerBI 被评为商业智能领导者-13年的企业产品奋斗史解读

恭喜微软连续 13 年被Gartner评为BI平台领导者。您可以插上耳机&#xff0c;打开音乐来一起欣赏这个过程。原文地址&#xff1a;https://powerbi.microsoft.com/zh-cn/blog/microsoft-named-a-leader-in-gartners-2020-magic-quadrant-for-analytics-and-bi-platforms/被评为第…

word List20

word List20 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

[python交互]Excel催化剂与python交互原理剖析,py开发者按此规范可自行扩展功能...

只需简单地编写小段py脚本&#xff0c;就可以借助Excel催化剂的平台作用&#xff0c;将写出的py脚本&#xff0c;嫁接到Excel的环境上使用&#xff0c;在Excel的广阔用户群体上带来更多的产出价值。也大大增加了将自己的python技能输出到普通用户可享用的层面。按照本文的规范&…

background图片不显示_一种解决Retina屏幕1px边框显示问题的方案

一、背景介绍&#xff1a;Retina是一种新型高分辨率的显示标准&#xff0c;是把更多的像素点压缩至一块屏幕里&#xff0c;从而达到更高的分辨率并提高屏幕显示的细腻程度&#xff1b;同时CSS样式表中px单位是一个相对值&#xff0c;并不是绝对值&#xff0c;实际在Retina屏幕中…