【SpringCloud】设计原则之围绕业务构建与并发流量控制

一、设计原则之围绕业务构建

正所谓,“不围绕业务构建的架构就是耍流氓”

微服务应当聚焦于某一特定的业务功能,并确保完成它 

其实这给需求管理也带来了挑战,需求需要切分将更加精细,以满足系统业务的不断变化 

在传统的方式中,一般是产品人员进行需求调研,然后经过整理后提交给开发团队,这种方式在微服务的环境下需要重新定义,即产品核实需求后,需要提交给开发团队之前进行评审,评审需要开发团队的人员参与,确认无误后在提交给开发团队 

从技术上说,微服务不应该局限于某个技术栈或后端存储,可以非常灵活,以便于解决业务问题 

这一点在非微服务系统设计时,可能导致我们做一些妥协 

而微服务可以让你用你认为最合适的方式解决问题 

这和上面的统一框架并不冲突,统一是指构建团队的过程中,尽量保持统一的架构,从而降低交互和沟通所带来的额外成本 

系统可以根据业务切分为不同的子系统,子系统又可以根据重要程序切分为核心和非核心子系统 

切分的目的就是当出现问题时,保证核心业务模块正常运行,不影响业务的正常操作 

同时解决各个模块子系统间的耦合、维护和扩展性 

方便单独部署,确保当一个系统出现问题时,不会出现连锁反应而导致整个系统瘫痪 

各个系统间合理地使用消息队列,解决系统或模块间的异步通信,实现高可用、高性能的通信系统

 

二、设计原则之并发流量控制 

大流量一般的衡量指标就是系统的 TPS(每秒事务量)和 QPS(每秒请求量) 

其实这个没有一个绝对的标准,一般都是根据机器的配置情况而定的,如果当前配置不能应对请求量,那么就视为大流量了 

 

一般的应对方案包括:

  • 缓存

预先准备好数据,减少对数据库的请求 

  • 降级 

如果不是核心链路,那么就把这个服务降级,保证主干通畅 

  • 限流 

在一定时间内把请求限制在一定范围内,保证系统不被冲垮,同时尽可能提升系统的吞吐量 

限流的方式有几种,最简单的就是使用计数器,在一段时间内,进行计数,与阈值进行比较,到了时间临界点,将计数器清零 

 

应对并发,很重要的一点就是区分 CPU 密集型和 I / O 密集型 

  • CPU 密集型(CPU-bound) 

CPU 密集型也叫计算密集型,指的是系统的硬盘、内存性能相对 CPU 要好很多 

此时,系统运作大部分的状况是 CPU Loading 100%,CPU 要读 / 写 I / O(硬盘 / 内存),I / O 在很短的时间就可以完成,而 CPU 还有许多运算要处理,CPU Loading 很高

CPU bound 的程序一般而言 CPU 占用率很高 

这可能是因为任务本身不太需要访问 I / O 设备,也可能是因为程序是多线程实现,因此屏蔽掉了等待 I / O 的时间 

  • I / O 密集型(I / O bound)

I / O 密集型指的是系统的 CPU 性能相对硬盘、内存要好很多

此时,系统运作大部分的状况是 CPU 在等 I / O(硬盘 / 内存)的读 / 写操作,此时 CPU Loading 并不高 

I / O bound 的程序一般在达到性能极限时,CPU 占用率仍然较低 

这可能是因为任务本身需要大量 I / O 操作,而 pipeline 做得不是很好,没有充分利用处理器能力 

在微服务架构下,如果涉及不同类型的业务,需要根据资源的使用情况选用合适的处理资源 

 

参考资料:《微服务架构实战》—— 张锋 

 

一  叶  知  秋,奥  妙  玄  心 

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

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

相关文章

Centos7安装

想学Vmware安装可以看下下面链接,不想就算了 https://blog.csdn.net/weixin_43895362/article/details/134723073 选择第一项,安装直接CentOS 7,回车 稍等后出现进入下图,选择中文,这个只是安装时的语言 首先设置时间,时区选择上海,查看时…

用 LangChain 搭建基于 Notion 文档的 RAG 应用

如何通过语言模型查询 Notion 文档?LangChain 和 Milvus 缺一不可。 在整个过程中,我们会将 LangChain 作为框架,Milvus 作为相似性搜索引擎,用二者搭建一个基本的检索增强生成(RAG)应用。在之前的文章中&a…

图解「差分」入门(“前缀和“ 到 “差分“ 丝滑过渡)

题目描述 这是 LeetCode 上的 「1094. 拼车」 ,难度为 「中等」。 Tag : 「差分」、「前缀和」 车上最初有 capacity 个空座位,车只能向一个方向行驶(不允许掉头或改变方向)。 给定整数 capacity 和一个数组 trips, 表示第 i 次旅…

YOLOv7改进:CotNet Transformer

1.1 简介 京东AI研究院提出的一种新的注意力结构。将CoT Block代替了ResNet结构中的3x3卷积,在分类检测分割等任务效果都出类拔萃。 1.2 摘要 有自注意力的Transformer引发了自然语言处理领域的革命,最近还激发了Transformer式架构设计的出现,并在众多计算机视觉任务中取得了…

A++ 敏捷开发-1 如何改善

1 如何改善 敏捷开发过程改进案例 5月 A公司一直专门为某电信公司提供针对客服、线上播放等服务服务。 张工是公司的中层管理者,管理好几个开发团队,有5位项目经理向他汇报。 他听说老同学的团队都开始用敏捷开发,很感兴趣,便参…

25. K 个一组翻转链表 --力扣 --JAVA

题目 给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的…

【前端】利用正则生成目录,附加解决a链接锚点偏移

前言 从html字符串中提取出来目录。 目标和源内容都很明确,源内容是html字符串,提取目标是html字符串中h1~h6元素和其闭合标签中间的内容。 思路 分析 获取html字符串 第一步要获取html字符串内容。 观察html字符串 第二步, 观察html字…

breadpad安装

https://github.com/google/breakpad这里的方法,但是有几个问题, 第一,要自己看第一行,fetch你没找到,是因为要安装的 git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH/pa…

Opencv制作电子签名(涉及知识点:像素过滤,图片通用resize函数,像素大于某个阈值则赋值为其它的像素值)

import cv2def resize_by_ratio(image, widthNone, heightNone, intercv2.INTER_AREA):img_new_size None(h, w) image.shape[:2] # 获得高度和宽度if width is None and height is None: # 如果输入的宽度和高度都为空return image # 直接返回原图if width is None:h_ratio …

flutter 自定义TabBar 【top 0 级别】

flutter 自定义TabBar 【top 0 级别】 前言一、基础widget二、tab 标签三、barView总结 前言 在日常开发中,tab 标签选项,是一个我们特别常用的一个组件了,往往我们在一个项目中,有很多地方会使用到它,每次单独去写&am…

Kibana使用指南

使用介绍主要特点应用场景数据可视化还有哪些类型安装步骤安装配置参数Elasticsearch配置参数注意事项 使用介绍 Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。可以用Kibana搜索、查看、交互存放在Elasticsearch索引里的数据&#…

基于binlog实现一些业务(Binlog4j)

前言 今天要跟大家分享的是监控数据变化,实现自己的业务的另一个思路,基于数据库的binglog。我这里是用的Binlog4j实现,希望看总结的,直接看最后。 一、Binlog4j是什么? Binlog4j是轻量级 Mysql Binlog 客户端, 提供宕…

2022年03月22日 Go生态洞察:泛型介绍

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

HT71778 实时音频信号跟踪同步升压转换器的特性

HT71778是一款高功率、全集成升压转换器,集成16mΩ功率开关管和18mΩ同步整流管,为便携式系统提供G效的小尺寸处理方案。 HT71778 实时音频信号跟踪同步升压转换器的特性: ・实时音频信号跟踪的电源供电 SN 短接地, VIN 2.7~4.5V, VOUT 5…

Hdoop学习笔记(HDP)-Part.02 核心组件原理

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

Redis - 多数据源切换

问题描述 最近遇到一个 Redis 多数据源切换问题,不过我这个没有那么动态切换需求,所以就写了一种比较硬编码的方式来做『切换』 其实大概的场景是这样的:不同的开发环境调用 db0、生产环境调用 db1,但是因为业务原因&#xff0c…

python绘制皮卡丘

1.源代码 import turtle as t import time # 皮卡丘 # 基础设置 t.screensize(800, 600) t.pensize(2) # 设置画笔的大小 t.speed(10) # 设置画笔速度为10 # 画左偏曲线函数 def radian_left(ang, dis, step, n):for i in range(n):dis step # dis增大stept.lt(ang) # 向左…

二、ZooKeeper集群搭建

目录 1、概述 2、安装 2.1 第一步:下载zookeeeper压缩包 2.2 第二步:解压 ​​​​​​​2.3 第三步:修改配置文件 ​​​​​​​2.4 第四步:添加myid配置 ​​​​​​​2.5 第五步:安装包分发并修改myid的值…

《微信小程序开发从入门到实战》学习三十八

4.2 云开发JSON数据库 4.2.9 条件查询与查询指令 在查询数据时,有时需要对查找的数据添加一些限定条件,只获取满足给定条件的数据,这样的查询称为条件查询。 可以在集合引用上使用where方法指定查询条件,再用get方法&#xff0…

IBL环境贴图原理及着色器实现【基于图像的照明】

IBL - Image Based Lighting - 也就是基于图像的照明,是一组照亮物体的技术,不是像上一章那样通过直接分析光,而是将周围环境视为一个大光源。 这通常是通过操作立方体贴图环境贴图(取自现实世界或从 3D 场景生成)来完…