当前位置: 首页 > news >正文

从运维角度看微服务 k8s部署微服务【偏理论】【AL】

从运维角度看微服务 & 部署微服务【偏理论】

1、微服务的特点

服务组件化:
每个服务独立开发、部署,有效避免一个服务的修改引起整个系统重新部署。
技术栈灵活:
约定通信方式,使得服务本身功能实现对技术要求不再那么敏感。独立部署:
每个微服务独立部署,加快部署速度,方便扩展。
扩展性强:
每个微服务可以部署多个,并且有负载均衡能力。
独立数据:
每个微服务有独立的基本组件,例如数据库、缓存等。

2 、另一个项目的微服务架构图及解释

① discovery-service  8761   
② zipkin-service     9411
③ notebook-service   1111
④ gateway-service    8765

在这里插入图片描述

3、单体应用 vs 微服务

在这里插入图片描述
微服务架构图

注册中心 eureka-service
网关 api gateway / gateway-service前端服务 portal-service
商品服务 product-service
订单服务 order-service
库存服务 stock-service配置中心 Apollo

在这里插入图片描述

4 微服务架构的理解

1、微服务间如何通信?REST API,RPC,MQ
2、微服务如何发现彼此?
3、组件之间怎么个调用关系?
4、哪个服务作为整个网站入口?
5、哪些微服务需郪对外访问?
6、微服务怎么部署?更新?扩容?
7、区分有状态应用与无状态应用
----------回答1----------------1、微服务间如何通信?REST API,RPC,MQ
2、微服务如何发现彼此?通过服务发现机制,如使用consul、etcd等服务发现技术,可以让微服务之间相互发现。
3、组件之间怎么个调用关系?组件之间通过API调用机制进行通信,如RESTful API,RPC,MQ等。
4、哪个服务作为整个网站入口?最终用户访问的入口服务,一般是一个负责处理外部请求的API网关服务。5、哪些微服务需要对外访问?对外提供服务的服务需要对外访问,如:API网关服务,Auth服务,支付服务等。
6、微服务怎么部署?更新?扩容?微服务可以采用容器化部署,通过容器编排工具如Kubernetes来实现部署,更新,扩容等。
7、区分有状态应用与无状态应用?有状态应用是指应用程序的状态会被保存,比如服务器的内存状态,会话状态等,而无状态应用是指应用程序的状态不会被保存,比如HTTP服务器,每次请求都会从头开始处理,没有记录之前的状态。
----------回答2--------
1、微服务间可以通过REST API、RPC或者消息队列(MQ)来进行通信。REST API是一种轻量级的通信方式,通过HTTP请求和响应来实现;RPC是远程过程调用的缩写,是一种简单的、高效的、基于二进制的远程通信方式;消息队列是一种分布式系统中,应用程序间通信的方式。
2、微服务可以通过服务发现来发现彼此。服务发现是一种动态获取服务地址和可用性的机制,常用的服务发现机制有DNS、Eureka、Consul等。
3、组件之间的调用关系取决于各组件的设计,通常通过调用API、RPC、消息队列等来实现组件间的通信。4、整个网站的入口通常是一个API网关,它是整个系统的入口,负责请求的路由和组合,对外暴露统一的接口。
5、对外访问的微服务可以通过API网关进行对外访问。具体哪些微服务需要对外访问,取决于业务需求。
6、微服务的部署、更新、扩容等操作可以通过自动化工具,如Docker、Kubernetes等进行实现。7、有状态应用:
需要记录它在每次请求间的状态,例如购物车、订单状态等。
可以使用关系型数据库或 NoSQL 数据库来存储应用状态。
需要处理复杂的状态同步,以确保在分布式环境中的数据一致性。无状态应用:
不需要记录任何状态,因此不需要存储任何状态。
每个请求都是独立的,因此不需要关心数据的同步。
可以使用负载均衡器直接将请求分派到任意可用实例上,这使得它们可以轻松扩展。

5 为什么要用注册中心

微服务架构是一种分布式架构,其中一个微服务可以独立地部署、开发、运行和维护。当微服务数量增加时,通信和发现成为了一个重要的问题。
注册中心是微服务架构中一个关键的组件,它的作用是管理微服务的注册和发现。
每个微服务启动时,都会在注册中心注册自己的服务信息,包括自己的地址、端口号等。其他微服务可以通过注册中心获取到需要调用的微服务的地址和端口。注册中心还提供了容错机制,当一个微服务故障时,它可以从注册中心删除该服务的注册信息,避免请求该服务时产生错误。
总的来说,注册中心是微服务架构中的一个核心组件,对于简化微服务的通信和发现,保证微服务的高可用性起着重要的作用。

在这里插入图片描述

6 项目迁移到K8S平台是怎样的流程

1制作镜像 --> 2控制器管理Pod --> 3暴露应用 --> 4对外发布应用 --> 5日志/监控
在这里插入图片描述

1、制作镜像

在这里插入图片描述

2、控制器管理Pod / deployment

在这里插入图片描述

3、暴露应用 service

在这里插入图片描述

4、对外发布应用 ingress (域名)

在这里插入图片描述

5、Pod数据持久化

在这里插入图片描述

6、日志与监控

Filebeat+ELK
Prometheus+Grafana

7 传统部署与K8S部署区别

传统部署 - 整体架构
在这里插入图片描述
K8S部署–整体框架
在这里插入图片描述

(在K8S中部署SpringCloud微服务项目 53:22)
END

相关文章:

从运维角度看微服务 k8s部署微服务【偏理论】【AL】

从运维角度看微服务 & 部署微服务【偏理论】 1、微服务的特点 服务组件化: 每个服务独立开发、部署,有效避免一个服务的修改引起整个系统重新部署。 技术栈灵活: 约定通信方式,使得服务本身功能实现对技术要求不再那么敏感。…...

专题 | 防抖和节流

一 防抖:单位时间内,频繁触发事件,只执行最后一次 场景:搜索框搜索输入(利用定时器,每次触发先清掉以前的定时器,从新开始) 节流:单位时间内,频繁触发事件&…...

C++入门:重载运算符和重载函数

C 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。当您调用一个重载函…...

conda 新建虚拟环境 等等

1:conda create -n env_name package_name #创建名为env_name的新环境,并在该环境下安装名为package_name 的包,例如:conda create -n Arg python3.8 # 创建名字为Arg python为3.8版本的虚拟环境2: conda activate env…...

【C++:STL之栈和队列 | 模拟实现 | 优先级队列 】

目录 1. stack的介绍和使用 1.1 stack的介绍 1.2 stack的使用 2 栈的模拟实现 3 queue的介绍和使用 3.1 queue的介绍 3.2 queue的使用 4 queue的模拟实现 5 deque的介绍 5.1deque的原理介绍 5.2 deque的缺陷 5.3 为什么选择deque作为stack和queue的底层默认容器 6 p…...

基于SpringBoot+Vue的疫苗预约管理系统(Java项目)

【辰兮要努力】:hello你好我是辰兮,很高兴你能来阅读,昵称是希望自己能不断精进,向着优秀程序员前行! 博客来源于项目以及编程中遇到的问题总结,偶尔会有读书分享,我会陆续更新Java前端、后台、…...

华为OD机试 - 计算网络信号(Python),真题含思路

计算网络信号 题目 网络信号经过传递会逐层衰减,且遇到阻隔物无法直接穿透,在此情况下需要计算某个位置的网络信号值。 注意:网络信号可以绕过阻隔物 array[m][n] 的二维数组代表网格地图,array[i][j] = 0 代表 i 行 j 列是空旷位置;array[i][j] = x ( x 为正整数)代表 i …...

【Spring】注解实现IOC操作,你理解了吗?

作者:狮子也疯狂 专栏:《spring开发》 坚持做好每一步,幸运之神自然会驾凌在你的身上 专栏推荐:写文章刚刚起步,各个专栏的知识点后续会补充完善,不断更新好文,希望大 家支持一下。 专栏名字El…...

微搭低代码从入门到精通01-总体介绍

在过去我们开发小程序,要学习各类知识。比如前端知识、后端知识、服务器知识及各种中间件及数据库的知识。 要想学会这些知识,既需要投入大量的学习时间,而且要经过相当的实践才可以掌握。 如果立志从事开发行业,投入精力去学习…...

类的继承

类的继承:一个类继承另一个类,自动拥有这个类的属性和方法,类似于包含与被包含的关系。被继承的类称为父类--子类则是继承父类的类。一个父类可以有多个子类;一个子类可以有多个父类(多继承)问题创建子类时…...

应用场景一:西门子PLC通过桥接器连接MQTT服务器

应用场景描述: 云平台、MES等数据采集、设备管理系统,需要通过MQTT的方式,上传和下发数据,MQTT服务器可以获取PLC的实时状态数据,也可以下发控制指令。桥接器提供4G、WIFI和有线三种连接方式。 网络拓扑:…...

计算机组成原理(四)

1.理解存储器的分类方法;理解存储器的层次结构;熟悉存储器的几个技术指标(主要是存储容量、存取时间、存取周期、存储器带宽等); 存储器分类方法:   按与CPU的连接和功能分类:     主存储…...

状态机设计举例

⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合Verilog HDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。 🔥文章和代码已归档至【Github仓库&#xf…...

Kubernetes1.25中Redis单机和集群部署实例二

1、概述我们知道在 Kubernetes 容器编排平台中, 我们可以非常方便的进行应用的扩容缩, 同时也能非常方便的进行业务的迭代,本章主要讲解在Kubernetes1.25搭建Redis单实例和Redis集群主从同步的环境流程步骤, 如果是高频访问重要的线上业务我们最好是部署在物理机器上…...

【STM32】【HAL库】遥控关灯0 概述

相关连接 【STM32】【HAL库】遥控关灯0 概述 【STM32】【HAL库】遥控关灯1主机 【STM32】【HAL库】遥控关灯2 分机 【STM32】【HAL库】遥控关灯3 遥控器 需求 家里有几个房间,开关距离床都挺远的 睡觉想要关灯的时候需要下床 因此设计了本次项目 需要满足以下要求: 可以控…...

C语言学习笔记(三): 选择结构程序设计

if语句 if(){} if (a1){printf("hehe");} //单独一个ifif(){}else{} int a 1, b 2;if (a b) {printf("haha"); //if else}else{printf("hehe");}if(){}else if(){} int a 1, b 2;if (a b) {printf("haha");}else if (a …...

图----无向图

1.定义 图的定义:图是由一组顶点和一组能够将两个顶点相连的边组成 边:edge 顶点:vertex 连通图:如果从任意一个顶点都存在一条路径到达另外一个任意顶点,我们称这幅图是连通图。 非连通图:由若干连通的…...

【C++1】函数重载,类和对象,引用,/string类,vector容器,类继承和多态,/socket,进程信号

文章目录1.函数重载:writetofile(),Ctrue和false,C0和非02.类和对象:vprintf构造函数:对成员变量初始化析构函数:一个类只有一个,不允许被重载3.引用:C中&取地址,C中…...

JetpackCompose从入门到实战学习笔记8—ConstraintLayout的简单使用

JetpackCompose从入门到实战学习笔记8—ConstraintLayout的简单使用 1.简介: Compose 中的 ConstraintLayout ConstraintLayout 是一种布局,让您可以相对于屏幕上的其他可组合项来放置可组合项。它是一种实用的替代方案,可代替使用多个已嵌…...

Spring Boot 快速入门(绝对经典)

目录 1、理论概述 1.1、什么是Spring Boot? 1.2、Spring Boot的特点 1.3、开发环境 2、实战——创建和配置项目 2.1、Spring Boot项目创建的两种方式 2.1.1、方法一:通过网站构建项目 2.1.2、使用Spring Initializr创建(推荐) 2.2、…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

scikit-learn机器学习

# 同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可: # Also add the following code, # so that every time the environment (kernel) starts, # just run the following code: import sys sys.path.append(/home/aistudio/external-libraries)机…...

深入理解Optional:处理空指针异常

1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...