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

news/2024/7/4 8:10:57 标签: 架构, 微服务, 云原生

本心、输入输出、结果

文章目录

  • 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构
    • 前言
      • 典型的微服务架构是什么样的
      • 微服务最佳实践
        • 在开发微服务时,我们需要遵循以下最佳实践:
      • 微服务通常使用什么技术堆栈
        • ▶️预生产
        • ▶️生产
      • 为什么卡夫卡(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.niftyadmin.cn/n/5111733.html

相关文章

Java-API简析_java.util.PropertyPermission类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/133970108 出自【进步*于辰的博客】 因为我发现目前,我对Java-API的学习意识比较薄弱…

Kotlin中的Map集合

在Kotlin中,Map集合用于存储键值对(Key-Value Pair),其中键(Key)是唯一的,而值(Value)可以重复。Map集合分为可变集合(MutableMap)和不可变集合&a…

播放svga动画的时候 第一次加载资源,然后切换动画 会动画会重影

如果在切换 SVGA 动画的过程中,第一次加载时出现重影,但第二次及以后的切换没有重影,这可能是由于第一次加载时资源缓存不完整导致的。为了解决这个问题,你可以尝试以下方法: 1.在每次切换动画之前,预先加…

蓝桥杯 (猜生日、棋盘放麦子、MP3储存 C++)

思路&#xff1a; 1、用循环。 2、满足条件&#xff0c;能整除2012、3、12且month等于6、day<30 #include<iostream> using namespace std; int main() {for (int i 19000101; i < 20120312; i){int month i / 100 % 100;int day i % 100;if (i % 2012 0 &…

react封装一个简单的upload组件(待完善)

目录 react封装一个简单的upload组件component / uploadImg / uploadImg.jsx使用效果 react封装一个简单的upload组件 component / uploadImg / uploadImg.jsx import React, { useState } from react; import { LoadingOutlined, PlusOutlined } from ant-design/icons; imp…

蓝桥杯 (饮料换购,C++)

思路&#xff1a; 1、先加上初始的饮料数n。 2、再加上n可以兑换的饮料数n/3&#xff0c;求多余的瓶盖n%3。循环直至瓶盖数无法兑换新的一瓶饮料。 #include<iostream> using namespace std; int main() {int n,a0,sum0;cin >> n;sum n;while (n){n n a;//加上上…

【Unity程序技巧】公共Update管理器

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

10个最流行的土木工程BIM软件

建筑信息模型 (BIM) 是一种数字化流程&#xff0c;最近在土木工程领域受到广泛关注。 它是一种设计、构建和管理项目的协作方法。 它涉及创建和使用建筑物的详细数字表示&#xff0c;包括 3D 模型、数据和有关项目的信息。 BIM 在参与项目的不同利益相关者之间提供实时协作&…