设计服务要考虑的7个维度

news2024/12/28 3:38:35

我在《软件设计的核心方法及实例解析》里提到软件设计的核心方法是分解和组合。分解粒度上,不同的架构师想法不一样,但是却有一点共性:设计一定要把不稳定的部分做封装,对外暴露稳定的部分,这也是有接口隔离这一原则的本质原因。

分解的最小单位是服务,所有的服务设计要考虑以下7个维度。

伸缩性

服务实例化有N多种方法,包含事前调用。这就允许大量客户端不需要考虑后端的资源情况,因为调用的时候,你需要多少服务实例后端可以成比例的扩容。

8b32146d09c720898ee3568ca1fd8380.png

安全性

所有面向服务的平台都会把安全做为一等公民。它们对所有的调用都要求授权。不仅针对于客户端对服务端发起的请求,服务之间的调用也需要鉴权。可以使用鉴权传播机制来支撑信任链模式。

c007cd8eaacc4b3a8c2790fde235e3c7.png

吞吐量和可用性

服务可以接受队列形式的调用,这样可以通过简单的队列化来处理大量消息。队列化可以增加可用性,因为可以通过多种实例来处理相同的入队数据。

0d9027fd87eade50518e9153c1144122.png

响应性

服务可以通过掐死调用或者放入缓冲池来避免过载。

cc4c0d906af5472514fec3ee4df743d2.png

可靠性

客户端和服务端可以通过使用可靠的消息协议来确保传递,处理网络连接,甚至对调用进行重排。

2e9e084fb7d1ab318616cd0f6d6a38a5.png

一致性

服务需要支持事务,事务是需要最终一致的。不管是什么类型的服务,事务中处理链条上任何错误都要求整个事件终止。

e8dae0103504ba4895e45719da9a1245.png

同步性

就算客户端是多线程的,整个服务也需要自动同步。

b0132c75f9e92a5276fbd6190929e2cf.png

昨天带小鲜肉去味多美,因为出门的时候,邻居奶奶跟小鲜肉说话,他不怎么回话,我就批评教育了他。他不舒服,把口罩撕碎了。我们没说话进了味多美选完了明天的早餐,小鲜肉去排队结账。有个脸盘特别大的女生插队到了小鲜肉前面。我以为她没看清楚队尾,我就过去告诉她队尾在哪里。

她说:“你们什么时候来的呀”

我没弄清楚她的意思,很自然的说:“我们一直就在这里呀”

然后大脸女生就开始了吵架的口气,说:“我早就来了,刚才过去放面包了。我看你们那时候还在选面包呢。”然后另外一个女生过来排到了队尾。大脸女生说:“我是排在她前面的。”

刚跟小鲜肉闹完别扭,加上天气热本身火大。碰上这火上浇油的,我也不lady了,顶她:“那人家也没到我们前面呀。”

大脸女生一听回到了队尾,也一边吵架模式说着什么,我忘了。但其中有一句引起了我的注意:“你这是给孩子做了什么榜样呀!”

我一听她把小鲜肉扯进来,彻底引燃了我的引线。我说:“你说这些想让自己好过,我不会让你得逞,你做的不对!”

大脸女生又开始反驳,她说什么,我都是那句:“你做的不对!”旁边人劝大脸女生少说两句,最终她闭了嘴。

吵架按比分来算,我是吵赢了的。但是好容易吵一次架,吵的不漂亮,我耿耿于怀啊。因为我没有说服她。我要是整体整理好思路,摆出问题的根本点:

1、你如果之前排在前面,排在谁前面,就去那里,人家认,别人也不说什么。随便找一个地方,你这就是插队。

2、你还专门插到小孩前面,欺负孩子,无耻!

3、本身做的不对了,吵架时还把孩子扯进来,利用道德绑架,企图对孩子造成不良影响,坏蛋!

这样说她就算嘴里不饶,心里也会理亏了。吵架没有发挥好,着实遗憾呀。

17年前,有个成都的朋友说他们那边的人都会为很小一件事吵架,本质上是生活节奏慢,大家都闲的没事干。当然那是很久之前的成都了。想想没有大事操心其实是很幸福的。

设计服务要考虑的7个维度,大家其实可能都知道,但是总结的不多。总结的不多,用的时候就会出现“吵架没有发挥好”的遗憾,所以还是要多总结。

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

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

相关文章

VS code 可以做什么?

编写 markdown VS code 真的是非常好用的Markdown编写工具,我用他来编写Markdown的时间甚至比写代码还要多。比如,我每周写的公众号文章。 相关插件: MarkdownMarkdown Preview EnhancedMarkdown All in One 编写python 大多数同学写pyth…

LLM - 基于 ChatGLM-6B 的工程配置搭建私有 ChatGPT 中文在线聊天

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131104546 Paper:GLM: General Language Model Pretraining with Autoregressive Blank Infilling 一篇于2022年发表在ACL会…

脑机接口科普0021——黑门01

本文禁止转载!!!! 我会在接下来的一段时间内,花一些章节,专门科普介绍一下《黑门》这部国产动漫。 科普《黑门》,源自网友看了我的脑机接口科普文章后,介绍我看黑门这个脑机接口科…

盘点那些 IT 技术面试官常用的 10 个挂人套路

最近几个朋友找我聊天,给我讲述了面试过程中遇到的一些不太理解的事情。作为一个技术面试官,今天来分享 10 个面试相关的套路。 1.自我介绍 自我介绍是一个重要的开始,好的开始是成功的一半。不需要太多花里胡哨的东西,简单、清…

86墙插双联明装新款:蓝奥声智能用电设备安全防护有多强

物理绝缘和智能数据分析安全技术重塑了墙壁插座的安全标准,极大可能规避日常生活中的意外,只有做到意外情况下也不会触电,这样的墙壁插座才能真正叫安全墙壁插座,“不触电且足够安全”应该成为墙壁插座的安全标配标准。 智能物理…

检测 ARP 欺骗

地址解析协议 (ARP) 是网络通信的基本推动因素。作为网络互联网层和网络链路层之间的桥梁,此网络协议将网络地址 (IP) 转换为物理层地址(MAC 地址)。ARP协议支持的地址转换在促进同一LAN中不同网…

给数据库构建一个展示界面

给mySQL构建一个展示界面 这是“构建个人小型医学数据库”系列文章的最后一部分。通过之前的工作我们确定了所要收集的各类变量并将其录入到mySQL数据库中。 为了展示MySQL中存储的数据,通过摸索我们最终使用appML、PHP和JavaScript开发一个展示页面。这些技术可以…

组合式API - provide和inject、Vue3小案例【Vue3】

组合式API - provide和inject 作用和场景:顶层组件向任意的底层组件传递数据和方法,实现跨层组件通信 跨层传递普通数据 顶层组件通过provide函数提供数据 provide(key, 顶层组件中的数据)底层组件通过inject函数获取数据 const message inject(key) …

每日学术速递6.14

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Realistic Saliency Guided Image Enhancement 标题:现实显着性引导图像增强 作者:S. Mahdi H. Miangoleh, Zoya Bylinskii, Eric Kee, Eli Shechtman, Ya…

js创建对象三种方式

创建对象三种方式 1、利用对象字面量创建对象2、利用 new Object 创建对象3、利用构造函数创建对象3.1 构造函数 1、利用对象字面量创建对象 const obj {name: 张三,age: 20 } console.log(obj)结果如下: 2、利用 new Object 创建对象 const obj new Object({…

Jmeter使用||接口测试实战

标题 Jmeter与postman一样,都可以用来进行接口测试。 前面的文章( 测试工具介绍||Jmeter的简单使用),介绍了jmeter的下载、安装及简单使用。基于此背景,通过实例的形式,来介绍下如何利用jmeter进行接口测试…

Rancher集群containerd导出镜像

奇墨科技是国内领先的全域IT质量管理平台及服务商,创始团队为在ITSM、公有云,私有云,超融合及安全业务方向服务多年的业界精英团队,尤其具备领先的运维服务和业务理解能力,已服务了大量的世界及中国500强客户&#xff…

【深度学习】3-4 神经网络的学习- 学习算法的实现

神经网络的学习步骤如下所示: 步骤1(mini-batch) 从训练数据中随机选出一部分数据,目标是减小mini-batch的损失函数的值 步骤2(计算梯度) 为了减小mini-batch的损失函数的值,需要求出各个权重参数的梯度 步骤3(更新参数) 将权重参数沿梯度…

redhat 6.4安装oracle11g RAC (四)

创建集群数据库 在节点rac1上用oracle用户执行dbca创建RAC数据库 [rootrac1 ~]# su - oracle [oraclerac1 ~]$ dbca选择创建数据库 自定义数据库(也可以是通用) 配置类型选择Admin-Managed,输入全局数据库名orcl,每个节点实例SI…

java线上问题排查基本命令

1、jvm基本命令 1.1、java命令 1.1.1、简介 java命令启动java应用程序。它通过启动Java运行时环境(JRE)、加载指定的类并调用该类的main()方法来实现这一点。 1.1.2、命令链接 https://docs.oracle.com/javase/8/docs/techno…

electron 连接打印机打印pdf文件

electron 打印内容 区分系统 类似unix系统的使用 npm包:unix-printwindow系统使用: pdf-to-printer 运行线程 视图线程 函数参数 两个包都提供了print函数来打印文件,配置基本一致,只是参数形式有所不同,pdf-to-pr…

ESP32开发环境搭建Windows VSCode集成Espressif IDF插件ESP32_IDF_V5.0开发编译环境搭建

一、安装ESP32-IDF库 下载网址:https://dl.espressif.com/dl/esp-idf/ 打开上面的网页,选择单击页面中 ESP32-IDF v5.0.2 - Offine Installer,5.0.2是当前最新版本,如果没有ESP32-IDF v5.0.2 - Offine Installer,说明…

JS获取省市区/县,layui获取省市区,layui实现省市区联动,jquery实现省市区联动

前言 通过JS方式获取省市区数据,可自己手动更改JS文件数据 非常简单 效果 实现 百度网盘链接: https://pan.baidu.com/s/1RktJgXY0NP7Eq0ohvBPOEA 提取码: 477z gitee下载链接:https://gitee.com/yuanyongqiang/common-files/blob/master/area.js 下…

超高压系列IXBX50N360HV、IXBT14N300HV、IXBH32N300高压反向导通 (BiMOSFET™) IGBT器件

器件介绍: 超高压系列3000V - 3600V反向导通 (BiMOSFET™) IGBT将MOSFET和IGBT的优势相结合。这些高压器件的饱和电压和内置二极管的正向电压降均具有正电压温度系数,因此非常适合用于并联运行。“自由”内置体二极管用作保护二极管,为器件关…

LibOS Gramine安装

文章目录 参考资料Gramine安装运行helloworld升级kernel到5.15 参考资料 Gramine Quick start Gramine安装 Gramine安装要求: Linux 内核版本至少为 5.11(启用 SGX 驱动程序) 如果是5.4.0-150-generic版本,则可以参考《Install …