系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构

本心、输入输出、结果

文章目录

  • 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构
    • 前言
      • 典型的微服务架构是什么样的
        • 微服务的优势
      • 微服务最佳实践
        • 在开发微服务时,我们需要遵循以下最佳实践:
      • 微服务通常使用什么技术堆栈
        • ▶️预生产
        • ▶️生产
      • 为什么卡夫卡(Kafka)很快
        • 步骤说明
      • 弘扬爱国精神

系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构


编辑:简简单单 Online zuozuo
地址:https://blog.csdn.net/qq_15071263

在这里插入图片描述


如果觉得本文对你有帮助,欢迎点赞、收藏、评论

前言

我们使用视觉效果和简单术语来解释复杂的系统是如何运转的,帮助我们理解技术细节

我们使用视觉效果和简单术语来解释复杂的系统是如何运转的,帮助我们理解技术细节

在这里插入图片描述

典型的微服务架构是什么样的

下图显示了典型的微服务体系结构。

  1. 负载均衡器:这会在多个后端服务之间分配传入流量。
  2. CDN(内容交付网络):CDN 是一组地理位置分散的服务器,用于保存静态内容以加快交付速度。客户端首先在 CDN 中查找内容,然后进行到后端服务。
  3. API 网关:处理传入请求并将其路由到相关服务。它与标识提供者和服务发现通信。
  4. 身份提供程序:用于处理用户的身份验证和授权。
  5. 服务注册和发现:微服务注册和发现发生在此组件中,API 网关在此组件中查找要与之通信的相关服务。
  6. 管理:此组件负责监视服务。
  7. 微服务:微服务在不同的域中设计和部署。每个域都有自己的数据库。API 网关通过 REST API 或其他协议与微服务通信,同一域中的微服务使用 RPC(远程过程调用)相互通信。

在这里插入图片描述

微服务的优势
  • 它们可以快速设计、部署和水平扩展。
  • 每个域都可以由专门的团队独立维护。
  • 因此,可以在每个域中自定义业务需求并得到更好的支持。

在这里插入图片描述

微服务最佳实践

开发微服务的 9 个最佳实践

在这里插入图片描述

在开发微服务时,我们需要遵循以下最佳实践:
  1. 为每个微服务使用单独的数据存储
  2. 将代码保持在类似的成熟度级别
  3. 为每个微服务单独生成
  4. 为每个微服务分配一个职责
  5. 部署到容器中
  6. 设计无状态服务
  7. 采用领域驱动设计
  8. 设计微前端
  9. 编排微服务

在这里插入图片描述

微服务通常使用什么技术堆栈

下面将显示一个图表,显示开发阶段和生产的微服务技术堆栈

在这里插入图片描述

▶️预生产
  • 定义 API - 这将在前端和后端之间建立协定。为此,我们可以使用 Postman 或 OpenAPI。
  • 开发 - Node.js 或 react 在前端开发中很受欢迎,java/python/go 在后端开发中很受欢迎。此外,我们需要根据 API 定义更改 API 网关中的配置。
  • 持续集成 - 用于自动化测试的 JUnit 和 Jenkins。代码打包到 Docker 映像中,并部署为微服务。
▶️生产
  • Nginx 是负载均衡器的常见选择。Cloudflare提供CDN(内容交付网络)。
  • API 网关 - 我们可以对网关使用 Spring boot,并使用 Eureka/Zookeeper 进行服务发现。
  • 微服务部署在云上。我们有AWS,Microsoft Azure或Google GCP之间的选择。 缓存和全文搜索 - Redis 是缓存键值对的常见选择。ElasticSearch 用于全文搜索。
  • 通信 - 为了使服务相互通信,我们可以使用消息传递下 Kafka 或 RPC。
  • 持久性 - 我们可以将 MySQL 或 PostgreSQL 用于关系数据库,将 Amazon S3 用于对象存储。如有必要,我们还可以将Cassandra用于宽柱存储。
  • 管理和监控 - 为了管理如此多的微服务,常见的Ops工具包括Prometheus,Elastic Stack和Kubernetes

在这里插入图片描述

为什么卡夫卡(Kafka)很快

有许多设计决策对Kafka的性能做出了贡献。在这篇文章中,我们将重点介绍两个。我们认为这两个人最有分量

在这里插入图片描述

  1. 第一个是 Kafka 对顺序 I/O 的依赖。
  2. 使 Kafka 具有性能优势的第二个设计选择是它对效率的关注:零拷贝原则。
步骤说明
该图说明了数据如何在生产者和消费者之间传输,以及零拷贝的含义。步骤 1.1 - 1.3:创建者将数据写入磁盘
步骤 2:使用者在没有零拷贝的情况下读取数据2.1 数据从磁盘加载到操作系统缓存2.2 数据从操作系统缓存复制到Kafka应用程序2.3 Kafka 应用程序将数据复制到套接字缓冲区2.4 数据从套接字缓冲区复制到网卡2.5 网卡向消费者发送数据
步骤 3:使用者使用零拷贝读取数据3.1:数据从磁盘加载到操作系统缓存 3.2 操作系统缓存通过 sendfile() 命令直接将数据复制到网卡 3.3 网卡向消费者发送数据零拷贝是在应用程序上下文和内核上下文之间保存多个数据副本的快捷方式

弘扬爱国精神

在这里插入图片描述

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

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

相关文章

笔记:绘图进阶

主要功能: 双坐标轴多子图共用一个横坐标横坐标时间刻度设置(简便方法)自定义时间坐标轴起止时间 # -*- coding: utf-8 -*-import numpy as np import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdatesif …

小程序跨页面传递参数的几种方式

当我们在开发小程序时,经常会遇到需要在不同页面之间传递数据的情况。为了实现页面间的数据传递,小程序提供了多种方法。下面将介绍几种常用的传递数据的方法。 URL参数传递:这是一种简单直接的传递数据的方式。在跳转页面时,可以…

为什么每个跳表结点的层高都是1至32之间的随机数?

跳表节点的层高通常是一个随机数或者根据概率分布得到的值,这是为了提高跳表的性能和均衡性。以下是关于为什么这么设计的一些解释: 均衡性: 使用随机层高可以使跳表中的节点分布更加均匀,减少了极端情况下跳表的高度。如果每个节…

网站技术查看

当打开一个网页感觉很好奇,他使用了什么框架和什么技术? 常用的网页技术分析网站。 1. w3techs Check web technologies used by a website - Site InfoW3Techs identifies which web technologies such as CMS, programming language, web server an…

​CUDA学习笔记(四)device管理

本篇博文转载于https://www.cnblogs.com/1024incn/tag/CUDA/,仅用于学习。 device管理 NVIDIA提供了集中凡是来查询和管理GPU device,掌握GPU信息查询很重要,因为这可以帮助你设置kernel的执行配置。 本博文将主要介绍下面两方面内容&…

Linux的shell(极其粗糙版)

Shell脚本: 脚本主要是为了业务,辅助人工,实现自动化运维 Shell:介于用户和内核之间,充当翻译官的作用,当用户执行相关的命令,shell会把指令二进制传给内核,内核处理完毕以后通过shell把内核的…

算法学习之 背包01问题 , 备战leecode

来看题目 我们分析一下题目&#xff0c;首先我们要排序&#xff0c;这有助于我们得到最大的值&#xff0c;我们要得到一个递推公式 代码如下: class Solution { public:int maxSatisfaction(vector<int>& satisfaction) {int n satisfaction.size();vector<v…

2023-10-19 node.js-将异步处理修改为同步-使用Promise和async-记录

摘要: 2023-10-19 node.js-将异步处理修改为同步-使用Promise和async-记录 使用promise和async将异步修改为同步: const fs require(fs);f1 function() {return new Promise(resolve > {fs.readFile(f1.txt, utf8, (err, data) > {if (err) reject(err);else resolve(…

flutter开发实战-安卓apk安装、卸载、启动实现

flutter开发实战-安卓apk安装、卸载、启动实现 在之前的文章中&#xff0c;实现了应用更新apk下载等操作&#xff0c;具体文档看下 这里记录一下使用shell来操作apk的安装、卸载、启动的操作。用到了库shell&#xff0c;Shell用于在Dart中或在代表其他用户执行系统管理任务的…

计算几何相关笔记

距离 欧拉距离 就是我们最熟悉的两点之间距离公式&#xff1a; d ( x 1 − x 2 ) 2 ( y 1 − y 2 ) 2 d\sqrt{(x_1-x_2)^2(y_1-y_2)^2} d(x1​−x2​)2(y1​−y2​)2 ​ 曼哈顿距离 相对于欧拉距离&#xff0c;曼哈顿距离的计算更加简单&#xff0c;并且没有开方过程&…

微软官方推出的四款工具,太实用了,值得收藏

目录 一、Officeplus——丰富的办公资源库 二、微软数学求解器 三、微软内置edge浏览器 四、Microsoft To-Do 办公待办神器 所以今天小编给大家分享4个微软官方推出的实用工具&#xff0c;每一个都非常好用&#xff0c;对于大家日常办公&#xff0c;非常有必要&#xff0c;感兴…

maven-plugin-shade 详解

一、介绍 [1] This plugin provides the capability to package the artifact in an uber-jar, including its dependencies and to shade - i.e. rename - the packages of some of the dependencies. maven-plugin-shade 插件提供了两个能力&#xff1a; 把整个项目&#xf…

C语言--冒泡排序和简答选择排序

冒泡排序 一种典型的交换排序 类似水冒泡&#xff0c;大元素经不断的交换由水底慢慢的浮出 从头到尾&#xff0c;循环比较两相邻的元素 大的元素移到后面&#xff0c;小的放前面-每次循环&#xff0c;大的元素会排到最后 代码如下&#xff1a; #include<stdio.h> …

js 删除树状图无用数据,如果子级没有数据则删除

有一个需求&#xff0c;当你从后端拿到一个树状图的时候&#xff0c;有些子级没数据&#xff0c;这时就需要我们处理一下数据&#xff0c;当然了&#xff0c;如果第一层底下的第二层没数据&#xff0c;第二层底下的所有都没数据&#xff0c;那这一层都不需要。 我的写法&#x…

常用消息中间件

RocketMQ 阿里开源&#xff0c;阿里参照kafka设计的&#xff0c;Java实现 能够保证严格的消息顺序 提供针对消息的过滤功能 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆积能力 RabbitMQ Erlang实现&#xff0c;非常重量级&#xff0c;更适…

竞赛 深度学习交通车辆流量分析 - 目标检测与跟踪 - python opencv

文章目录 0 前言1 课题背景2 实现效果3 DeepSORT车辆跟踪3.1 Deep SORT多目标跟踪算法3.2 算法流程 4 YOLOV5算法4.1 网络架构图4.2 输入端4.3 基准网络4.4 Neck网络4.5 Head输出层 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; *…

程序连接oracle查询数据的环境配置

连接oracle 数据库真麻烦&#xff0c;还是MySQL方便 Oracle Instant Client 这个东西的版本跟oracle的版本是有讲究的&#xff0c;引用文档的说明 Oracle 标准的客户端-服务器网络互操作性允许不同版本的 Oracle 客户端和 Oracle 数据库之间的连接。有关经过认证的配置&#…

R语言的计量经济学技术

量经济学通常使用较小样本&#xff0c;但这种区别日渐模糊&#xff0c;机器学习在经济学领域、特别是经济学与其它学科的交叉领域表现日益突出&#xff0c;R语言是用于统计建模的主流计算机语言&#xff0c;在本次培训中&#xff0c;我们将从实际应用出发&#xff0c;重点从数据…

ArmSoM-RK3588编解码之mpp解码demo解析:mpi_dec_test

1. 简介 [RK3588从入门到精通] 专栏总目录 mpi_dec_test 是rockchip官方解码 demo 本篇文章进行mpi_dec_test 的代码解析&#xff0c;解码流程解析 2. 环境介绍 硬件环境&#xff1a; ArmSoM-W3 RK3588开发板 软件版本&#xff1a; OS&#xff1a;ArmSoM-W3 Debian11 3.…

失配树学习笔记

失配树&#xff0c;是一种奇妙的数据结构&#xff0c;它利用 KMP、LCA 解决求两前缀的最长公共 Border 的问题。 首先介绍一下什么是 Border&#xff0c;我们知道 nxt 数组是前后缀相同的最大长度&#xff0c;Border 相当于是 nxt 数组的弱化版&#xff0c;只是去掉了“最大”…