【微服务】概述

微服务架构技术栈梳理

【注】本文旨在对微服务架构从整体上有一个简单的认识和了解,每一块都可能涉及较多的解决方案与实现框架,这里不做更深入的介绍。

1.背景(Why)

相关背景,也是推动单体服务走向微服务架构的原因

  1. 复杂性管理: 传统的单体应用程序在不断增长的复杂性下难以维护。随着业务逻辑的增加,代码库变得庞大且难以理解,导致开发和维护的困难。

  2. 灵活性和敏捷性: 企业需要更快速地响应市场需求和变化。传统的单体架构在修改或扩展功能时可能需要整个应用的重新构建和部署,这限制了敏捷开发和快速迭代。

  3. 可伸缩性: 随着用户和数据量的增加,单体应用的扩展性变得有限。需要一种更灵活、可伸缩且易于部署的架构。

  4. 技术异构性: 不同的团队可能使用不同的技术栈,而单体应用往往要求一致的技术栈,这可能阻碍开发人员选择最适合其任务的技术。

2.设计理念(What,Degisn Philosophy):

怎样解决传统架构存在的不足和问题

2.1. 服务拆分:

微服务架构通过将应用程序拆分成小的、自治的服务来解决复杂性问题。每个服务专注于执行特定的业务功能,有自己的数据库和通信接口。

2.2. 松耦合:

微服务之间是松耦合的,它们通过明确定义的 API 进行通信。这种松耦合性使得一个服务的更改不会对其他服务产生不必要的影响,提高了系统的灵活性和可维护性。

2.3 独立部署:

微服务可以独立部署,这意味着一个服务的更新或改变不会影响到其他服务。这有助于实现持续交付和快速部署,支持敏捷开发和快速迭代。

2.4. 分布式数据管理:

每个微服务通常有自己的数据库,这使得每个服务能够使用最适合其需求的数据存储技术。分布式数据管理带来了一些挑战,但也提供了更大的灵活性。

2.5. 自动化:

微服务架构鼓励自动化部署、测试和监控。自动化可以降低部署错误的风险,提高系统的可靠性和稳定性。

2.6. 服务发现和注册:

微服务架构使用服务发现和注册机制,确保服务能够在动态环境中找到和通信。这通常包括使用服务注册表和反向代理等机制。

2.7. 弹性设计:

微服务架构鼓励设计弹性系统,能够容忍部分的故障并快速恢复。这包括使用断路器、负载均衡和自适应性的设计

3.微服务架构下面临的技术挑战(How)

微服务面临哪些问题以及相应的解决方案

3.1. 服务发现和注册:

问题: 微服务架构中的服务数量可能很大,服务的位置和状态可能会频繁变化。因此,需要一种机制来发现和注册服务,以便它们可以相互通信。
解决方案: 使用服务发现工具(如Consul、Etcd、Zookeeper)或服务网格(如Istio)来管理服务的发现和注册。

3.2. 负载均衡:

问题: 微服务通常需要处理大量的请求,需要有效地分配负载以确保各个服务的性能和可用性。
解决方案: 使用负载均衡器(如NGINX、HAProxy)或集成到服务网格中的负载均衡功能。

3.3.分布式数据管理:

问题: 微服务的独立部署可能导致分布式数据管理的复杂性,包括数据一致性、事务管理和跨服务的数据通信。
解决方案: 选择适当的数据库技术,实现分布式事务、事件驱动等机制,并使用异步通信来解决数据一致性问题。

3.4.服务间通信:

问题: 微服务之间需要进行有效的通信,需要解决同步和异步通信、协议选择等问题。
解决方案: 使用RESTful API、gRPC等协议,实现消息队列和事件驱动的通信模式。

3.5.分布式跟踪、监控和日志管理:

问题: 在微服务架构中,定位和解决问题可能会更加困难,需要有效的监控和跟踪机制。
解决方案: 集成监控工具(如Prometheus、Grafana)和分布式跟踪系统(如Zipkin、Jaeger、skywalking)以监控微服务的性能和健康状况。ELK Stack用于收集、存储和分析微服务的日志。

3.6.容错和弹性设计:

问题: 微服务架构中的一个服务的故障不应该影响整个系统,需要实现容错和弹性设计。
解决方案: 使用断路器模式、重试机制、故障注入等手段,确保系统在部分故障时仍能正常运行;
健康检查:Consul,Spring Boot Actuator(监控微服务状态,自动删除不健康pod)
弹性:(容量自适应)
弹性部署:K8s根据负载情况自动扩缩容;按需使用(cpu)
弹性存储:按需分配,按需存储,自动扩缩容

3.7.安全性:

问题: 微服务需要有效的身份验证和授权机制,确保只有合法的服务能够访问和通信。
解决方案: 使用OAuth、JWT等标准协议,实现安全的服务间通信。

3.8.持续集成和持续部署(CI/CD):

问题: 微服务的快速迭代和独立部署要求有效的CI/CD流程。
解决方案: 配置自动化的构建、测试和部署流程,确保服务能够快速而安全地发布。

——Docker(容器化/环境隔离/快速部署)
——K8S(容器编排)
——Jenkins
——服务发布、更新与回滚:
滚动发布:
蓝绿部署:
灰度发布:

3.9.服务配置管理:

问题: 微服务的配置可能分散在多个服务中,需要有效的配置管理机制。
解决方案: 使用配置中心(如Spring Cloud Config、Consul)集中管理和分发微服务的配置信息。

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

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

相关文章

seata 分布式

一、下载安装seata 已经下载好的朋友可以跳过这个步骤。这里下载的是seata1.6.1这个版本。 1、进入seata官网 地址: https://seata.io/zh-cn/index.html 2、进入下载 3、点击下载地址 下载地址: https://github.com/seata/seata 二、配置seata 进入c…

git仓库批量备份

git的mirror参数 在git中&#xff0c;--mirror是一个用于克隆和推送操作的参数。它用于创建一个镜像仓库&#xff0c;包含了源仓库的所有分支、标签和提交历史记录。 当使用git clone --mirror <source-repo>命令时&#xff0c;会创建一个完全相同的镜像仓库&#xff0…

虚拟机设置静态ip

有时候搭环境需要局域网&#xff0c;设置一下虚拟机静态ip&#xff0c;这里做个记录&#xff1a; 这里我用的是ubuntu18.04的虚拟机&#xff0c;安装完成之后&#xff0c;点击进入设置 这里设置一下桥接模式 这个时候输入ifconfig&#xff0c;就是和主机一个网段了&#xff…

Android 8.1 相关修改

一些常用修改&#xff0c;做个记录&#xff0c;为了节约时间和防止踩坑。 一、修改默认中文 修改位置&#xff1a; build\make\target\product\full_base.mk 修改内容&#xff1a; # Put en_US first in the list, so make it default. PRODUCT_LOCALES : zh_…

跟着cherno手搓游戏引擎【14】封装opengl

本节先把代码粘上&#xff0c;后续会慢慢把注释都给加上&#xff0c;先看代码了解个大概&#xff08;待更新&#xff09; 前置&#xff1a; RendererAPI.h: #pragma once namespace YOTO {enum class RendererAPI {None 0,OpenGL1};class Renderer {public:inline static R…

JavaWeb后端登录校验功能(JWT令牌技术,Cookie技术,Session,拦截技术,过滤器)

目录 一.登录校验功能&#xff08;解决直接通过路径访问&#xff09; 1.实现思路 二.会话技术 ​编辑 1.Cookie技术 2.Session 3.令牌技术 1.简介 2.如何生成和解析 3.令牌的使用 三.Filter过滤器 1.什么是过滤器 2.实现步骤&#xff1a; 3.过滤器执行流程 4.拦截路径 5.过…

[C++历练之路]C++中的继承小学问

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; &#x1f354;前言&#xff1a; C中&#xff0c;继承是一种面向对象编程的重要概念&#xff0c;它允许一个类&#xff08;子类/派生类&#xff09;从另一个类&#xff08;父类/基类&#xff09;继承属性和方法。继承是…

免费MySQL数据库客户端推荐

1. Navicat Lite Navicat Lite是一款功能强大的数据库管理工具&#xff0c;提供了免费版本供个人开发者使用。它支持MySQL等多种数据库系统&#xff0c;具有直观的用户界面和丰富的功能&#xff0c;包括数据编辑、导入导出、备份恢复等。 2. Toad Edge Toad Edge是一款针对开…

Hadoop-MapReduce-YarnChild启动篇

一、源码下载 下面是hadoop官方源码下载地址&#xff0c;我下载的是hadoop-3.2.4&#xff0c;那就一起来看下吧 Index of /dist/hadoop/core 二、上下文 在上一篇<Hadoop-MapReduce-MRAppMaster启动篇>中已经将到&#xff1a;MRAppMaster的启动&#xff0c;那么运行M…

(刷题记录)移除元素

我的代码&#xff1a; class Solution {public int removeElement(int[] nums, int val) {int j0;for(int i0;i<nums.length;i){if(nums[i]!val){nums[j]nums[i];j;}}return j;} }思路&#xff1a;双指针&#xff0c;右指针指向当前要处理的元素&#xff0c;有不等的数就赋…

Docker私有仓库搭建

registry私有仓库 步骤一&#xff1a;先拉取registry的镜像 [rootlocalhost ~]#docker pull registry 步骤二&#xff1a;修改docker的配置文件重启 [rootlocalhost ~]#vim /etc/docker/daemon.json {"insecure-registries": ["192.168.66.66:5000"] }[r…

第二十天| 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

Leetcode 654.最大二叉树 题目链接&#xff1a;654 最大二叉树 题干&#xff1a;给定一个不重复的整数数组nums。最大二叉树可以用下面的算法从nums递归地构建: 创建一个根节点&#xff0c;其值为nums中的最大值。递归地在最大值左边的子数组前缀上构建左子树。递归地在最大…

浅谈隔离放大器

浅谈隔离放大器 定义&#xff1a;隔离放大器是将输入的电量信号或物理量信号通过一种技术手段处理后,隔离输出一组模拟量信号,这组模拟量信号是以标准的4-20mA/0-20mA/0-10mA/0-10V/0-5V/1-5V/2-10V/0-2.5V/0-20mA/0-10mA/0-10V/0-100mV/0-5V等信号,以便控制系统及仪器仪表设备…

PGsql 解析json及json数组

创建测试数据 drop table if exists json_test; create table json_test as select 111 as id, {"nodes":{"1692328028076":{"nodeId":"1692328028076","nodeName":"测试表1","nodeType":"DATACO…

单片机学习笔记---定时器计数器(含寄存器)工作原理介绍(详解篇2)

目录 T1工作在方式2时 T0工作在方式3时 四种工作方式的总结 定时计数器对输入信号的要求 定时计数器对的编程的一个要求 关于初值计算的问题 4种工作方式的最大定时时间的大小 关于编程方式的问题 实例分析 实例1 实例2 T1工作在方式2时 51单片机&#xff0c;有两个…

vue实践:构建高效的电子签名功能

前言 在现代数字化时代&#xff0c;电子签名成为了一种方便、高效且安全的签署文件的方式。本文将介绍电子签名的原理和实现方法&#xff0c;帮助你快速掌握这一重要的工具。 电子签名是什么&#xff1f; 电子签名是一种数字化的签名方式&#xff0c;用于验证和确认电子文档、…

matlab appdesigner系列-app程序打包成可执行exe程序

提供了3种打包方式&#xff1a; 1&#xff09;Matlab App &#xff0c;这种方式是生成Matlab内部使用的小程序&#xff0c;可添加到matlab app菜单栏中的常用程序中&#xff0c;也就是应用该程序之前&#xff0c;你必须安装了matlab&#xff1b; 2&#xff09;Web app 3&…

vs 撤销本地 commit 并保留更改

没想到特别好的办法&#xff0c;我想的是用 vs 打开 git 命令行工具 然后通过 git 命令来撤销提交&#xff0c;尝试之前建议先建个分支实验&#xff0c;以免丢失代码&#xff0c; git 操作见 git 合并多个 commit / 修改上一次 commit

GDB调试技巧实战--自动化画出类关系图

1. 前言 上节我们在帖子《Modern C++利用工具快速理解std::tuple的实现原理》根据GDB的ptype命令快速的理解了std::tuple数据结构的实现,但是手动一个个打印,然后手动画出的UML图,这个过程明显可以自动化。 本文旨在写一个GDB python脚本把这个过程自动化。 本脚本也可以用…

2024年Java高阶面试题

2024年Java实战面试题&#xff08;北京&#xff09;_java 5 年 面试-CSDN博客 一、在面对千万条并发请求的情况下&#xff0c;如果数据库频繁查询导致崩溃&#xff0c;可以采取以下措施来解决问题: 1.缓存数据:可以使用缓存技术来减少对数据库的查询次数。将经常查询的数据存储…