[MQ] 消息队列

消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件 一、消息队列MQ概述 消息队列(Message Queue),指保存消息的一个容器,本质是个队列,传送的消息可以是文本字符串,也可以是复杂的嵌入对象 基本模型 应用场景 1.异步处理 消息队列的主要特点是异步处理,主要目的是减少请求响应的时间,实现非核心流程异步化,提高系统响应性能 了解同步与异步同步与异步的区别(一看则懂)_同步和异步的区别-CSDN博客 异步的经典场景就是将比较耗时而且不需要即时(同步)返回结果的操作,通过消息队列来实现****异步化 2.应用解耦 解耦:保证消息格式不变,消息的发送方和接收方之间并不需要彼此联系,也不受对方的影响 只通过消息队列MQ来联系(?) 3.流量削锋 一般在秒杀或团抢活动中使用广泛 这种场景中系统的峰值流量往往集中于一小段时间内,所以为了防止系统在短时间内的峰值流量冲垮,往往采用消息队列来削弱峰值流量,相当于消息队列做了一次缓冲 4.日志处理 日志处理是指将消息队列用在日志处理中,以解决大量日志传输的问题(比如Kafka) 暂时无法在飞书文档外展示此内容 二、消息队列MQ设计 1.整体框架 暂时无法在飞书文档外展示此内容 Producer 消息生产者:负责产生和发生消息到Broker; Broker 消息处理中心:负责消息存储、确认、重试等,一般会有多个queue; Consumer 消息消费者:负责从Broker中获取消息,并进行相应处理; 2.详细设计 Producer生产者 产生消息 –> Broker消息处理中心 存储消息 –> Consumer 消费者对消费消息,返回 消息确认 –> Broker 进行消息备份/删除 RPC通信 Producer产生消息,Consumer消费消息都会涉及到通信的问题,消息队列使用了RPC将数据流串起来 Broker存储 消息到达服务端后需要存储到Broker 流量削峰、最终一致性等需求都是需要Broker先存储下来,等待合适的时机投递 存储可以有很多方式,存储在内存,分布式KV,磁盘,数据库等,存储的选项需要考虑综合性能/高可用和开发维护成本 消费模型 消息到达Broker后,最终需要Consumer去消费消息,这里涉及到消费模型 目前主要有两种:单播和广播 单播:点到点 广播:一点对多点 高级特性 Consumer端把消息消费了,除了需要消息确认,还会涉及到比如:重复消息、顺序消息、消息延迟、事务消息等需要考虑的高级特性 消息队列MQ模型 主要有两种模型:点对点 与 发布订阅 两种模型 消息队列是什么_mq是什么_MQ消息队列服务-AWS云服务 深入消息队列MQ,看这篇就够了!

September 28, 2024 · 1 min · Chen-Hang

docker-基础

https://yeasy.gitbook.io/docker_practice/ 一、基本概念 镜像(Image) 容器(Container) 仓库(Repository) 理解以上三个概念,就能理解docker的生命周期 1.镜像 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件,以及一些运行时所需的配置参数。镜像不包含任何动态数据,其内容在插件之后也不会被改变 分层存储,镜像采用了分层存储的架构,由一组文件系统组成的(多层文件系统联合组成)。在构建镜像时,会一层一层构建,后一层依赖于上一层,后一层上的任何改变都只会发生在本层,不会干涉到上一层。因此构建镜像的时候,需要对每层需要添加的东西尽量加最少最有必要的东西,减少额外的东西 分层存储的特征还使得镜像的复用,定制更为容易 2.容器 容器是镜像运行时的实体,可以被创建、启动、停止、删除暂停等 镜像(Image)和容器(container)的关系,就像是面向对象程序设计中的类 和实例 一样 容器的实质是进程,运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统,网络配置、进程空间等,运行在一个隔离的环境。这样的隔离特性,使得容器封装的应用比直接在宿主运行更加安全 容器也是分层存储,是以镜像为基础层,在其上创建一个当前容器的存储层,这个层是为容器运行时进行读写而准备的,称为容器存储层 容器存储层的生命周期跟容器一样,当容器消亡时,容器存储层也随之消亡,因此任何保存于容器存储层的信息都会随着容器的删除而丢失 Dokcer最佳实践的要求,容器不应该向其存储层写入任何数据,容器存储层保存无状态化,所有的文件写入操作,都应该使用数据卷、或者绑定宿主目录 数据卷独立于容器,使用容器卷,容器的删除或者重写运行之后,数据都不会丢失 3.仓库 Docker Register:提供一个集中的存储、分发镜像的服务 一个Docker Register可以包含多个**仓库(Repository);每个仓库可以包含多个标签(Tag),**每个标签对应一个镜像 可以通过<Repository Name>:<Tag Name> 的格式来指定具体的软件是那个版本的镜像 仓库名以两段路径形式出现,比如jwilder/nginx-proxy 前者是Docker Registry多用户环境下的用户名,后者是对应的软件名 Docker Registry 公开服务 Docker Registry公开服务是开放给用户使用、允许用户管理镜像的Registry服务。 最常见的是Docker Registry公开服务是官方的hub.docker.com,也是默认的Registry 也可以使用国内的镜像网站 私有Docker Registry 用户可以在本地搭建私有的Docker Registry。Docker提供了Docker Registry镜像,可以直接使用搭建私有Registry服务 二、镜像 1.获取镜像 从Docker镜像仓库获取镜像的命令是 docker pull docker pull [选项] [Docker Registry 地址[:端口号]/] 仓库名[:标签] 具体选项可以从docker pull --help 命令查看, Docker镜像仓库地址:地址格式一般为 <域名/IP>[:端口号]。默认地址是 Docker Hub 仓库名:仓库名是两段式,即<用户名>/<软件名>.对于Docker Hub,如果不给出用户名,默认为 library,也就是官方镜像 $ docker pull ubuntu:18.04 上面命令没有给出Docker镜像仓库地址,默认从Docker Hub获取镜像。而镜像名称是ubuntun:18.04,因此会获取官方镜像 library/ubuntun仓库中标签为18.04的镜像 ...

September 28, 2024 · 2 min · Chen-Hang

docker-部署

使用Docker 以及Docker Compose部署Go程序 为什么需要docker 使用docker的主要目标是其容器化。可以为应用程序提供一致的环境,而不依赖它运行的主机 部署示例 1.准备代码 package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", hello) server := &http.Server{ Addr: ":8888", } fmt.Println("server startup...") if err := server.ListenAndServe(); err != nil { fmt.Printf("server startup failed, err:%v\n", err) } } func hello(w http.ResponseWriter, _ *http.Request) { w.Write([]byte("hello liwenzhou.com!")) } 这里是简单代码 2.创建Docker镜像 镜像(image)包含运行应用程序所需的所有东西——代码/二进制文件、运行时、依赖项以及所需的任何其它人间系统对象 简单讲,镜像是定义应用程序以及运行所需的一切 3.编写Dockerfile 要创建Docker镜像(image)必须在配置文件中的指定步骤,这个文件默认称为Dockerfile ...

September 28, 2024 · 3 min · Chen-Hang

dockerfile-学习

学习自 一篇文章带你吃透 Dockerfile - 掘金 (juejin.cn) Dockerfile reference 全网最详细的Docker-Compose详细教程 - 掘金 (juejin.cn) docker compose 配置文件 .yml 全面指南 - 知乎 (zhihu.com) compose-spec/spec.md at master · compose-spec/compose-spec · GitHub 前言 学习Dockers前期,通过Docker的官方镜像仓库拉取里面的镜像,根据这些镜像创建出容器并运行 实际上,Docker官方镜像也是通过一定的方式构建出来的,只要弄清其中的逻辑,我们也可以仿照官方镜像的构建过程,构建出自己的镜像 Dockerfile就是这样一个用于描述Docker镜像构建过程的文本文件,dockerfile可以包含多条构建指令,以及相关的描述 1.什么是容器 容器是计算机上的沙盒进程,与主机上的其它进程隔离,这种隔离利用了内核命名空间和cgroups。简而言之容器是: 是image的可运行实例 可以在本地计算机、虚拟机上运行或部署到云中 是可移植的 与其它容器隔离,并运行自己的软件,二进制文件和配置 2.什么是容器映射 当容器运行时,它使用了隔离的文件系统。这个自定义的文件系统由容器映像container image提供。因为image包含了容器的问价系统,使用image必须包含所有的运行应用程序所必须的所有东西——依赖项、配置、脚本、二进制文件等等。 沙盒进程是指在计算机系统中,为了保障安全和隔离性而采用的一种技术,将应用程序运行在一个受限制的环境中,限制它们能访问的资源和操作范围,从而避免恶意程序和授权程序对系统的破坏 3.容器是怎么运行的 当一个容器运行时,它为其文件系统使用来image的各个层。每个容器都有自己的命名空间来创建/更新/删除文件。在另一个容器中不会看到任何更改,即使它们使用相同的image 4.容器卷[container volumes] 每个容器启动时都是从容器的定义开始的。在容器中可以创建、更新和删除文件,但当容器被删除时,这些改变将回丢失,所有更变都被隔离在各个容器中 卷:提供了将容器的特定文件系统路径链路到主机的能力。如果在主机上的某个文件被挂载,那么当容器中该文件路径下的文件发送更改时,我们在主机上同样也可以看到更改。同样的,启动另一个挂载了同一个文件目录的容器,它也可以访问到相同的文件 镜像构建原理 1.Docker架构模式 docker使用了client/server的架构模式。构建镜像时,用户在dockers client输入构建命令。docker引擎以 REST API的形式,像 docker daemon发送构建请求,如何dockers daemon就根据构建请求的内容,开始镜像构建的工作,并向Client持续放回构建过程的信息。 2.镜像分层模型 docker镜像是用于创建容器的只读模板,是通过 Dockerfile中定义的指令构建而成的,构建结束后,会在原有的镜像层上生成一个新的镜像层,如下所示 在 tomcat 镜像创建一个容器后,会在tomcat镜像之上新创建一个可写的容器层,在容器中写文件时,会保存到这个容器层中 3.基础镜像与父级镜像 用于构建基础镜像的 Dockerfile 不指定父级镜像,Docker约定使用如下形式基础镜像 FROM scratch 这里的 scratch是一个空镜像,可以从零开始构建镜像,常用来构建最小镜像,如busybox,debian,alpine等镜像,省去很多linux命令,因此很小。一般,不需要自己去构建基础镜像。 ...

September 28, 2024 · 4 min · Chen-Hang

vscode 快捷键

常用 General 按 Press 功能 Function Ctrl + Shift + P,F1 显示命令面板 Show Command Palette Ctrl + P 快速打开 Quick Open Ctrl + Shift + N 新窗口/实例 New window/instance Ctrl + Shift + W 关闭窗口/实例 Close window/instance Ctrl + , 用户设置 User Settings Ctrl + K Ctrl + S 设置键盘快捷方式 Keyboard Shortcuts 基础编辑 Basic editing 按 Press 功能 Function Ctrl + X 剪切行(空选定) Cut line (empty selection) Ctrl + C 复制行(空选定)Copy line (empty selection) Alt + ↑ / ↓ 向上/向下移动行 Move line up/down Shift + Alt + ↓ / ↑ 向上/向下复制行 Copy line up/down Ctrl + Shift + K 删除行 Delete line Ctrl + Enter 在下面插入行 Insert line below Ctrl + Shift + Enter 在上面插入行 Insert line above Ctrl + Shift + | 跳到匹配的括号 Jump to matching bracket Ctrl + ] / [ 缩进/缩进行 Indent/outdent line Home 转到行首 Go to beginning of line End 转到行尾 Go to end of line Ctrl + Home 转到文件开头 Go to beginning of file Ctrl + End 转到文件末尾 Go to end of file Ctrl + ↑ / ↓ 向上/向下滚动行 Scroll line up/down Alt + PgUp / PgDown 向上/向下滚动页面 Scroll page up/down Ctrl + Shift + [ 折叠(折叠)区域 Fold (collapse) region Ctrl + Shift + ] 展开(未折叠)区域 Unfold (uncollapse) region Ctrl + K Ctrl + [ 折叠(未折叠)所有子区域 Fold (collapse) all subregions Ctrl + K Ctrl + ] 展开(未折叠)所有子区域 Unfold (uncollapse) all subregions Ctrl + K Ctrl + 0 折叠(折叠)所有区域 Fold (collapse) all regions Ctrl + K Ctrl + J 展开(未折叠)所有区域 Unfold (uncollapse) all regions Ctrl + K Ctrl + C 添加行注释 Add line comment Ctrl + K Ctrl + U 删除行注释 Remove line comment Ctrl + / 切换行注释 Toggle line comment Shift + Alt + A 切换块注释 Toggle block comment Alt + Z 切换换行 Toggle word wrap 导航 Navigation 按 Press 功能 Function Ctrl + T 显示所有符号 Show all Symbols Ctrl + G 转到行… Go to Line… Ctrl + P 转到文件… Go to File… Ctrl + Shift + O 转到符号… Go to Symbol… Ctrl + Shift + M 显示问题面板 Show Problems panel F8 转到下一个错误或警告 Go to next error or warning Shift + F8 转到上一个错误或警告 Go to previous error or warning Ctrl + Shift + Tab 导航编辑器组历史记录 Navigate editor group history Alt + ← / → 返回/前进 Go back / forward Ctrl + M 切换选项卡移动焦点 Toggle Tab moves focus 搜索和替换 Search and replace 按 Press 功能 Function Ctrl + F 查找 Find Ctrl + H 替换 Replace F3 / Shift + F3 查找下一个/上一个 Find next/previous Alt + Enter 选择查找匹配的所有出现 Select all occurences of Find match Ctrl + D 将选择添加到下一个查找匹配 Add selection to next Find match Ctrl + K Ctrl + D 将最后一个选择移至下一个查找匹配项 Move last selection to next Find match Alt + C / R / W 切换区分大小写/正则表达式/整个词 Toggle case-sensitive / regex / whole word 多光标和选择 Multi-cursor and selection 按 Press 功能 Function Alt +单击 插入光标 Insert cursor Ctrl + Alt +↑/↓ 在上/下插入光标 Insert cursor above / below Ctrl + U 撤消上一个光标操作 Undo last cursor operation Shift + Alt + I 在选定的每一行的末尾插入光标 Insert cursor at end of each line selected Ctrl + L 选择当前行 Select current line Ctrl + Shift + L 选择当前选择的所有出现 Select all occurrences of current selection Ctrl + F2 选择当前字的所有出现 Select all occurrences of current word Shift + Alt + → 展开选择 Expand selection Shift + Alt + ← 缩小选择 Shrink selection Shift + Alt + (拖动鼠标) 列(框)选择 Column (box) selection Ctrl + Shift + Alt +(箭头键) 列(框)选择 Column (box) selection Ctrl + Shift + Alt + PgUp / PgDown 列(框)选择页上/下 Column (box) selection page up/down 丰富的语言编辑 Rich languages editing 按 Press 功能 Function Ctrl + 空格 触发建议 Trigger suggestion Ctrl + Shift + Space 触发器参数提示 Trigger parameter hints Shift + Alt + F 格式化文档 Format document Ctrl + K Ctrl + F 格式选定区域 Format selection F12 转到定义 Go to Definition Alt + F12 Peek定义 Peek Definition Ctrl + K F12 打开定义到边 Open Definition to the side Ctrl + . 快速解决 Quick Fix Shift + F12 显示引用 Show References F2 重命名符号 Rename Symbol Ctrl + K Ctrl + X 修剪尾随空格 Trim trailing whitespace Ctrl + K M 更改文件语言 Change file language 编辑器管理 Editor management 按 Press 功能 Function Ctrl + F4, Ctrl + W 关闭编辑器 Close editor Ctrl + K F 关闭文件夹 Close folder Ctrl + | 拆分编辑器 Split editor Ctrl + 1 / 2 / 3 聚焦到第 1,第 2 或第 3 编辑器组 Focus into 1st, 2nd or 3rd editor group Ctrl + K Ctrl + ← / → 聚焦到上一个/下一个编辑器组 Focus into previous/next editor group Ctrl + Shift + PgUp / PgDown 向左/向右移动编辑器 Move editor left/right Ctrl + K ← / → 移动活动编辑器组 Move active editor group 文件管理 File management 按 Press 功能 Function Ctrl + N 新文件 New File Ctrl + O 打开文件… Open File… Ctrl + S 保存 Save Ctrl + Shift + S 另存为… Save As… Ctrl + K S 全部保存 Save All Ctrl + F4 关闭 Close Ctrl + K Ctrl + W 关闭所有 Close All Ctrl + Shift + T 重新打开关闭的编辑器 Reopen closed editor Ctrl + K Enter 输入保持打开 Enter Keep Open Ctrl + Tab 打开下一个 Open next Ctrl + Shift + Tab 打开上一个 Open previous Ctrl + K P 复制活动文件的路径 Copy path of active file Ctrl + K R 显示资源管理器中的活动文件 Reveal active file in Explorer Ctrl + K O 显示新窗口/实例中的活动文件 Show active file in new window/instance 显示 Display 按 Press 功能 Function F11 切换全屏 Toggle full screen Shift + Alt + 0 切换编辑器布局 Toggle editor layout Ctrl + = / - 放大/缩小 Zoom in/out Ctrl + B 切换侧栏可见性 Toggle Sidebar visibility Ctrl + Shift + E 显示浏览器/切换焦点 Show Explorer / Toggle focus Ctrl + Shift + F 显示搜索 Show Search Ctrl + Shift + G 显示 Git Show Git Ctrl + Shift + D 显示调试 Show Debug Ctrl + Shift + X 显示扩展 Show Extensions Ctrl + Shift + H 替换文件 Replace in files Ctrl + Shift + J 切换搜索详细信息 Toggle Search details Ctrl + Shift + C 打开新命令提示符/终端 Open new command prompt/terminal Ctrl + Shift +U 显示输出面板 Show Output panel Ctrl + Shift + V 切换 Markdown 预览 Toggle Markdown preview Ctrl + K V 从旁边打开 Markdown 预览 Open Markdown preview to the side Ctrl + K Z 打开禅模式( Esc 键退出) Zen Mode (Esc Esc to ecit) 调试 Debug 按 Press 功能 Function F9 切换断点 Toggle breakpoint F5 开始/继续 Start/Continue Shift + F5 停止 Stop F11 / Shift + F11 下一步/上一步 Step into/out F10 跳过 Step over Ctrl + K Ctrl + I 显示悬停 Show hover 集成终端 Integrated terminal 按 Press 功能 Function Ctrl + ` 显示集成终端 Show integrated terminal Ctrl + Shift + ` 创建新终端 Create new terminal Ctrl + C 复制选定 Copy selection Ctrl + V 粘贴到活动端子 Paste into active terminal Ctrl + ↑ / ↓ 向上/向下滚动 Scroll up/down Shift + PgUp / PgDown 向上/向下滚动页面 Scroll page up/down Ctrl + Home / End 滚动到顶部/底部 Scroll to top/bottom

September 6, 2024 · 6 min · Chen-Hang