系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构
本心、输入输出、结果
文章目录
- 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构
- 前言
- 典型的微服务架构是什么样的
- 微服务的优势
- 微服务最佳实践
- 在开发微服务时,我们需要遵循以下最佳实践:
- 微服务通常使用什么技术堆栈
- ▶️预生产
- ▶️生产
- 为什么卡夫卡(Kafka)很快
- 步骤说明
- 弘扬爱国精神
系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构
编辑:简简单单 Online zuozuo
地址:https://blog.csdn.net/qq_15071263

如果觉得本文对你有帮助,欢迎点赞、收藏、评论
前言
我们使用视觉效果和简单术语来解释复杂的系统是如何运转的,帮助我们理解技术细节
我们使用视觉效果和简单术语来解释复杂的系统是如何运转的,帮助我们理解技术细节

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

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

微服务最佳实践
开发微服务的 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的性能做出了贡献。在这篇文章中,我们将重点介绍两个。我们认为这两个人最有分量

- 第一个是 Kafka 对顺序 I/O 的依赖。
- 使 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 网卡向消费者发送数据零拷贝是在应用程序上下文和内核上下文之间保存多个数据副本的快捷方式
弘扬爱国精神

相关文章:
系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构
本心、输入输出、结果 文章目录 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第四部分:微服务架构前言典型的微服务架构是什么样的微服务的优势 微服务最佳实践在开发微服务时,我们需要遵循以下最佳实践: 微服务通常使用什么技术堆栈…...
顺序表ArrayList
作者简介: zoro-1,目前大二,正在学习Java,数据结构等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 顺序表 概念Arraylist构造方法相关方法遍历操作 自…...
python软件安装技巧
安装软件时候加上源地址去安装,快速稳 pip install openni -ihttps://pypi.tuna.tsinghua.edu.cn/simple...
解析Apache Kafka中的事务机制
这篇博客文章并不是关于使用事务细节的教程,我们也不会深入讨论设计细节。相反,我们将在适当的地方链接到JavaDocs或设计文档,以供希望深入研究的读者使用。 为什么交易? 我们在Kafka中设计的事务主要用于那些显示“读-进程-写”模式的应用…...
Vue虚拟节点和渲染函数
1.虚拟节点 虚拟节点(dom)本质上就是一个普通的JS对象,用于描述视图的界面结构 2.渲染函数render():接收一个 createElement()函数创建的VNode Vue.component("board", {render: function(createElement) {return cr…...
后台交互-首页->与后台数据进行交互,wsx的使用
与后台数据进行交互wsx的使用 1.与后台数据进行交互 // index.js // 获取应用实例 const app getApp() const apirequire("../../config/app.js") const utilrequire("../../utils/util.js") Page({data: {imgSrcs:[{"img": "https://cd…...
【微服务保护】Sentinel 流控规则 —— 深入探索 Sentinel 的流控模式、流控效果以及对热点参数进行限流
文章目录 前言一、快速掌握 Sentinel 的使用1.1 什么是簇点链路1.2 Sentinel 的简单使用示例 二、Sentinel 流控模式2.1 直接模式2.2 关联模式2.3 链路模式 三、流控效果3.1 快速失败3.2 预热模式3.3 排队等待 四、对热点参数的流控4.1 热点规则4.2 热点规则演示 前言 微服务架…...
ZXing.Net 的Core平台生成二维码
一、引用 二、代码 帮助类 /// <summary>/// ZXing.NET 二维码帮助类/// </summary>public class ZXingHelper{/// <summary>/// 站点二维码的目录/// </summary>private static string QRCodeDirectory "QRCode";/// <summary>/// 使…...
【C++】假设给类分配的是栈的空间,那么计算机是如何访问栈中不同位置的对象的数据的呢?
2023年10月22日,周日上午 当在栈上创建一个对象时,计算机会为该对象分配一块连续的内存空间。该内存空间的位置在栈帧中,栈帧是用来存储函数调用信息和局部变量的一块内存区域。 栈帧中包含一个指针,称为栈指针(stack…...
iOS使用CoreML运用小型深度神经网络架构对图像进行解析
查找一个图片选择器 我用的是ImagePicker 项目有点老了,需要做一些改造,下面是新的仓库 platform :ios, 16.0use_frameworks!target learnings dosource https://github.com/CocoaPods/Specs.gitpod ImagePicker, :git > https://github.com/KevinS…...
使用Python打造微信高效自动化操作教程
引言 在如今数字化时代,人们对于效率的追求越来越强烈,尤其是在工作和学习中。自动化操作成为了提高生产力的有效途径之一,而PyAutoGUI和Pyperclip作为Python中的两个强大库,为我们实现自动化操作提供了便利。本文将向大家介绍如…...
怎么在爬虫中使用ip代理服务器,爬虫代理IP的好处有哪些?
随着互联网的快速发展,网络爬虫已经成为数据采集、分析和整理的重要工具。然而,随着网络技术的不断发展,许多网站都会采取反爬虫措施,以避免数据被恶意获取。在这种情况下,代理IP服务器就成为了爬虫们的必本备文工将具…...
Typora的相关配置(Typora主题、字体、快捷键、习惯)
Typora的相关配置(Typora主题、字体、快捷键、习惯) 文章目录 Typora的相关配置(Typora主题、字体、快捷键、习惯)[toc]一、主题配置二、字体配置查看字体名称是否可以被识别:如果未能正确识别: 三、习惯配置四、快捷键配置更改提供的功能的快捷键&#…...
守护进程深度分析
思考 代码中创建的会话,如何关联控制终端? 新会话关联控制终端的方法 会话首进程成功打开终端设备 (设备打开前处于空闲状态) 1、关闭标准输入输出和标准错误输出2、将 stdin 关联到终端设备:STDIN_FILENO > 03、将 stdout 关联到终端设…...
SpringAMQP
SpringAMQT RabbitMQ安装与部署RabbitMQ结构简单队列模型 SpringAMQP依赖引入配置RabbitMQ连接信息基本模型简单队列模型WorkQueue模型 发布订阅模型FanoutExchangeDirectExchangeTopicExchange 消息转换器 消息队列是实现异步通讯的一种方式,我们将从RabbitMQ为例开…...
深入探索Sharding JDBC:分库分表的利器
随着互联网应用的不断发展和用户量的不断增加,传统的数据库在应对高并发和大数据量的场景下面临着巨大的挑战。为了解决这一问题,分库分表成为了一个非常流行的方案。分库分表主流的技术包括MyCat和Sharding JDBC。我们来通过一张图来了解这两者有什么区…...
Java后端模拟面试 题集④
1.你先作个自我介绍吧 面试官您好,我叫张睿超,来自湖南长沙,大学毕业于湖南农业大学,是一名智能科学与技术专业的统招一本本科生。今天主要过来面试贵公司的Java后端开发工程师岗位。 大学里面主修的课程是Java、Python、数字图…...
中国5G产业全景图谱报告2022_挚物AIoT产业研究院
中国5G产业全景图谱报告2022_挚物AIoT产业研究院 产业结构 5G 产业结构主要包括接入网、传输网、核心网、电信运营商、网络配套服务商、5G 应用生态及产业服务 7 个主要板块。根据各版块中主要市场参与者提供的产品和服务,又下分子版块。 (1ÿ…...
设计链表复习
设计链表 class ListNode {int val;ListNode next;public ListNode() {}public ListNode(int val) {this.val val;}public ListNode(int val, ListNode next) {this.val val;this.next next;}}class MyLinkedList {//size存储链表元素的个数int size;//虚拟头节点ListNode…...
在 Visual Studio Code (VS Code) 中设置
在 Visual Studio Code (VS Code) 中设置代理服务器的详细教程如下: 打开 Visual Studio Code。 在顶部菜单栏中,点击 "File"(文件) > "Preferences"(首选项) > "Settings…...
从“按钮变色”到“文本互动”:用Tkinter StringVar改造你的第一个GUI小游戏
从“按钮变色”到“文本互动”:用Tkinter StringVar改造你的第一个GUI小游戏 当你第一次用Tkinter做出那个点击按钮会变色的程序时,那种成就感可能还记忆犹新。但很快你会发现,真正的GUI应用远不止于此——用户输入、动态反馈、状态更新才是交…...
用舞蹈链(DLX)算法搞定数独和八皇后:从理论到C++实战避坑
舞蹈链算法实战:用DLX高效解决数独与八皇后问题 第一次接触精确覆盖问题时,我正被一道"魔鬼级"数独题折磨得焦头烂额。传统回溯算法在9x9的网格中显得力不从心,直到发现了Donald Knuth提出的舞蹈链(Dancing Links&#…...
告别命令行恐惧:Mac/Linux下用ADT图形界面玩转AutoDock分子对接
告别命令行恐惧:Mac/Linux下用ADT图形界面玩转AutoDock分子对接 第一次接触AutoDock时,我被它强大的分子对接能力吸引,但随即被满屏的命令行操作劝退。如果你也和我一样,对终端窗口里闪烁的光标感到不安,那么ADT&…...
3个超实用技巧:Snap.Hutao让你告别原神数据管理烦恼
3个超实用技巧:Snap.Hutao让你告别原神数据管理烦恼 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn/Snap.Hutao…...
人工智能入门项目:从零构建一个文本相似度比对Web应用
人工智能入门项目:从零构建一个文本相似度比对Web应用 想入门人工智能,但总觉得那些复杂的模型和算法离自己太远?今天,我们就来动手做一个看得见、摸得着的AI小项目。不需要你懂高深的数学,也不用配置繁琐的环境&…...
WechatRealFriends技术指南:微信好友关系检测原理与系统化操作流程
WechatRealFriends技术指南:微信好友关系检测原理与系统化操作流程 【免费下载链接】WechatRealFriends 微信好友关系一键检测,基于微信ipad协议,看看有没有朋友偷偷删掉或者拉黑你 项目地址: https://gitcode.com/gh_mirrors/we/WechatRea…...
汇川AM600 Modbus广播功能实战:如何一次操作控制车间所有变频器?
汇川AM600 Modbus广播功能实战:如何一次操作控制车间所有变频器? 在工业自动化领域,设备群控一直是提升生产效率的关键技术。想象一下,一个拥有多条产线的智能制造车间,每当需要调整生产节奏时,工程师不得不…...
从VBA到Python:一个老工程师的HFSS脚本自动化升级之路(踩坑与收获)
从VBA到Python:一位资深工程师的HFSS自动化改造实战 十年前,当我第一次在HFSS中录制VBA脚本时,那种解放双手的兴奋感至今记忆犹新。但随着项目复杂度呈指数级增长——从简单的参数扫描到需要集成机器学习优化算法,从单一模型处理到…...
如何用Obsidian微信读书插件3步构建个人知识库
如何用Obsidian微信读书插件3步构建个人知识库 【免费下载链接】obsidian-weread-plugin Obsidian Weread Plugin is a plugin to sync Weread(微信读书) hightlights and annotations into your Obsidian Vault. 项目地址: https://gitcode.com/gh_mirrors/ob/obsidian-were…...
Google I/O Pinball物理引擎实现:Flame与Forge2D的完美结合
Google I/O Pinball物理引擎实现:Flame与Forge2D的完美结合 【免费下载链接】pinball Google I/O 2022 Pinball game built with Flutter and Firebase 项目地址: https://gitcode.com/gh_mirrors/pi/pinball Google I/O 2022 Pinball游戏是一个使用Flutter和…...
