关于微服务的思考

news2024/11/29 2:52:08

目录

什么是微服务

定义

特点

利弊

引入时机

需要哪些治理环节

从单体架构到微服务架构的演进

单体架构

集群和垂直化

SOA

微服务架构

如何实现微服务架构

服务拆分

主流微服务解决方案

基础设施

下一代微服务架构Service Mesh

什么是Service Mesh?

Service Mesh的实现原理


什么是微服务

定义

微服务的概念最早是在2014年由Martin Fowler和James Lewis共同提出(原文链接:https://martinfowler.com/articles/microservices.html),他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用HTTP API通讯。同时,服务会使用最小规模的集中管理 (例如Docker)技术,服务可以用不同的编程语言与数据库等。

特点

从微服务的定义当中,我们可以提炼出如下几个微服务的核心特点:

  • 一组小的服务(涉及到服务拆分的粒度问题,后面会涉及)
  • 独立进程
  • 轻量级通信(Rest和RPC)
  • 独立部署

利弊

微服务带来的好处:

  • 清晰的模块边界
  • 各自独立部署,互不影响
  • 各个服务可选择不同的技术实现

微服务带来的弊端:

  • 分布式复杂性(从单体到微服务,系统内部复杂度降低,同时外部复杂度增加)
  • 数据一致性问题
  • 运维复杂度更高
  • 测试复杂度更高

引入时机

前期业务不复杂的情况下,不建议引入微服务。对于一个业务,一开始就应该是怎么快怎么来,快速迭代,快速验证产品。随着业务不断发展越来越复杂,整个生产力开始下降的时候,就可以开始考虑引入微服务了。

在引入微服务的时候,整体的一个思路是:选择一个非核心模块开始微服务化,将微服务整套核心基础设施落地(核心基础设施后面会涉及),然后渐进式地去微服务化其他模块,稳步前进。

需要哪些治理环节

服务注册中心

服务通信

服务配置中心

统一网关

自动化部署

可观测性(日志Logs、监控Metrics、链路追踪Trace)

从单体架构到微服务架构的演进

单体架构

早期开发的时候,一个war包或者jar包,里面包含了一个应用的所有功能,这样的架构我们叫作单体架构。单体架构足够简单,可以快速开发和上线,适用于项目初期业务简单、用户量不大的情况。

集群和垂直化

集群:横向增加服务器,将单台机器变成由多台机器组成的集群。

垂直化:按照业务的垂直领域进行划分,降低业务的耦合度,同时提高应用的可伸缩性。

SOA

面向服务架构,核心目标是把一些通用的、会被多个上层服务调用的共享业务提取成独立的基础服务,这些被提取出来的共享服务相对来说比较独立,并且可以重用。所以在SOA中,服务是最核心的抽象手段,业务被划分为一些粗粒度的业务服务和业务流程。

SOA解决的问题:信息孤岛;共享业务重用。

微服务架构

我们可以简单地理解,多个微服务可以组成一个SOA服务。

由于SOA和微服务它们的关注点不同,就导致了它们之间有非常大的区别:

  • SOA关注的是服务的重用性和信息孤岛问题;
  • 微服务关注的是业务解耦。

解耦是降低业务之间的耦合度,重用性关注的是服务的复用。

微服务架构使得服务粒度细化之后,开发运维也变得更加重要,和容器技术也结合得更加紧密。

如何实现微服务架构

服务拆分

更多的时候,大家可能都是按照业务流程来进行服务的拆分的。除此之外,我们还可以按照性能、业务重要程度、可用性、稳定性这些维度来进行微服务的拆分,具体采取什么方式可以视具体情况而定。

那关于服务的粒度,我们应该如何把握呢?粒度太细或太粗都不太合适,粒度太细会导致开发、测试、运维更加复杂,整体性能会降低等;粒度太粗又会导致达不到我们的预期,服务之间依赖太大。这里有一个技巧:三个火枪手原则。拆分微服务的数量=服务端开发人数/3。

什么是三个火枪手原则?平均3个开发人员负责一个微服务。

为什么不是1个人?没有备份人员,一个人思维有局限。

为什么不是2个人?异常情况下一个人压力会比较大,另外两个人维护的服务复杂度可能偏低。

为什么不是4个或者更多?开发人员多了之后,每个人不一定能掌握单个服务的所有细节。

主流微服务解决方案

  • Spring Cloud Alibaba(目前用得比较多的方案)
  • Spring Cloud Netflix
  • SpringBoot + K8s
  • Dubbo

基础设施

微服务整个基础设施会包括下面这些内容,我们一起来看看。

  • 服务接入层:服务网关;服务流控;服务降级;服务安全。
  • 服务运行层:服务注册;服务发现;服务路由;服务容错。
  • 技术支撑层:接口框架;分布式事务;自动化测试;容器编排;自动化部署;灰度发布;服务监控;服务跟踪。
  • 基础设施层:配置中心;日志中心;分布式锁;消息队列。

上面说了这么多,那么它们的优先级是怎么样的呢?服务运行层 > 服务接入层 > 基础设施层 > 技术支撑层。其中微服务框架的核心是:服务注册、服务发现和服务路由。

下一代微服务架构Service Mesh

什么是Service Mesh?

Service Mesh是一种新型的用于处理服务与服务之间通信的技术,尤其适用以云原生应用形式部署的服务,能够保证服务与服务之间调用的可靠性。在实际部署时,Service Mesh 通常以轻量级的网络代理的方式跟应用的代码部署在一起,从而以应用无感知的方式实现服务治理。

Service Mesh 以轻量级的网络代理的方式与应用的代码部署在一起,用于保证服务与服务之间调用的可靠性,这与传统的微服务架构有着本质的区别,这么做主要是出于两个原因:

  • 跨语言服务调用的需要
  • 云原生应用服务治理的需要

Service Mesh的实现原理

Service Mesh 实现的关键就在于两点:一个是上面提到的轻量级的网络代理也叫 SideCar,它的作用就是转发服务之间的调用;一个是基于 SideCar 的服务治理也被叫作 Control Plane,它的作用是向 SideCar 发送各种指令,以完成各种服务治理功能。

1.SideCar

 2.Control Plane

既然 SideCar 能实现服务之间的调用拦截功能,那么服务之间的所有流量都可以通过 SideCar 来转发,这样的话所有的 SideCar 就组成了一个服务网格,再通过一个统一的地方与各个 SideCar 交互,就能控制网格中流量的运转了,这个统一的地方就在 Sevice Mesh 中就被称为 Control Plane。

Service Mesh 在诞生不到两年的时间里取得令人瞩目的发展,Google、IBM 领导的 Istio是 Service Mesh 技术的代表之作。除吃之外还有微博的 Weibo Mesh、华为公有云 Service Mesh 以及蚂蚁金服的 SOFA Mesh 等。 

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

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

相关文章

模拟电子技术Ⅲ-场效应管的分析

场效应管的定义 场效应管是单极性管:参与导电的是多数载流子,要么是自由电子,要么是空穴, 场效应管有三个极:源极(s)、栅极(g)、漏极(d)&#xf…

如何在gitlab上使用hooks

参考链接:gitlab git hooks 1. Git Hook 介绍 与许多其他版本控制系统一样,Git 有一种方法可以在发生某些重要操作时,触发自定义脚本,即 Git Hook(Git 钩子)。 当我们初始化一个项目之后,.git…

机器学习库:numpy

☁️主页 Nowl 🔥专栏《机器学习实战》 《机器学习》 📑君子坐而论道,少年起而行之 文章目录 写在开头 基本数据格式 array 数据定位 argmax 数据生成 random.rand random.randn random.randint 维度拓展 expand_dim 结语 写在…

MutationObserver 监视 DOM 树改变的api

1、介绍 MutationObserver是一个构造函数,可以用来监听某个节点的变化,当节点发生变化时,可以执行一些回调函数。 它不会立即执行,需要调用MutationObserver的observe方法,传入你想要监听的节点,以及一些配…

Proteus仿真--基于ADC0832的可调频率波形输出

本文介绍基于ADC0832的可调频率波形输出(完整仿真源文件及代码见文末链接) 仿真图如下 本设计中80C51单片机作为主控,用数码管作为显示模块,频率采集选用ADC0832芯片 仿真运行视频 Proteus仿真--基于ADC0832的可调频率波形输出…

专业级音乐制作软件Studio One 6.5详细功能介绍

Studio One 6.5是一款专业级音乐制作软件,由PreSonus公司开发。它提供了强大的音频录制、编辑、混音和制作工具,被广泛应用于音乐制作、录音棚和现场演出等领域。 Studio One-6.5 下载地址:https://souurl.cn/fMjY4Q 下面是关于Studio One 6…

【刷题笔记】接雨水||暴力通过||符合思维方式

接雨水 文章目录 接雨水1 题目描述2 分析2.1 左到右2.2 右到左2.3 计算面积 3 代码3.1 Java3.2 Python 附录1 1 题目描述 https://leetcode.cn/problems/trapping-rain-water/ 面试的时候关键不是你的手法多么精妙,首先要做出来。 给定 n 个非负整数表示每个宽度为…

Redis之C语言底层数据结构笔记

目录 动态字符串SDS Dict ZipList QuickList ​ SkipList 动态字符串SDS Dict ZipList QuickList SkipList

汇编实验2-2 查找匹配字符串笔记

一、数据段 1.字符串结尾:13,10,$ 2.设置格式控制字符串(这样就不用再写clrf函数了) 3.设置存关键字和句子的地址标签,以关键字为例 二、代码段 1.输入字符串 2.字符串比较 2.1 每次的比较长度,KLEN->CL 2.2 设置目标串起始…

代码随想录算法训练营第五十九天|503. 下一个更大元素 II、42. 接雨水

第十章 单调栈part02 503. 下一个更大元素 II 给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之…

应用程序安装异常(-113)

应用程序安装异常(-113) 报错如下:    应用未安装:应用与您的手机不兼容。    应用程序安装异常(-113)    这种情况是说我们的是x86架构,但是你运行的项目支持的是arm架构,所以你需要让自己的项目也支持arm的架构。 方案一 在项目的…

【Seata源码学习 】篇五 注册分支事务

【Seata源码学习 】篇五 分支事务注册 1.远程服务调用绑定XID 回到事务模版方法类TransactionalTemplate中 beginTransaction(txInfo, tx);Object rs;try {// Do Your Business// 执行执行拦截器链路rs business.execute();} catch (Throwable ex) {// 3. The needed busine…

人力资源管理后台 === 上传+权限数据

目录 1.员工详情-封装员工头像组件 2.员工详情-上传图片-创建腾讯云存储桶 3.员工详情-使用cos-sdk完成上传 4. 权限管理-搭建权限页面 5.权限管理-获取数据转化树形 6.权限管理-作业 7.权限应用-权限概念 8.权限应用-员工分配角色-弹出层 9.权限应用-员工分配角色-回…

运维 | 浅谈云计算的相关概念和分类

关注:CodingTechWork 云计算 云计算的出现 云计算是采用的按需付费的方式,通过互联网访问云服务器上的服务器、数据库等服务。云计算为何会出现?  如果现在一个企业想要进行软件管理部署,首先需要服务器主机和网络规划&#…

自建CA实战之 《0x01 Nginx 配置 https单向认证》

自建私有化证书颁发机构(Certificate Authority,CA)实战之 《0x01 Nginx 配置 https单向认证》 上一篇文章我们介绍了如何自建私有化证书颁发机构(Certificate Authority,CA),本篇文章我们将介…

OSG粒子系统与阴影 - ​​​​​​​粒子系统的读取与保存(6)

粒子系统的读取与保存 在前面的章节中,已经讲到了所有的粒子系统的基本使用方法和自定义粒子系统的方法。有时需要把一个好的粒子系统保存起来,方便以后使用。保存粒子系统可以通过简单地调用 osgDB::writeNodeFile()来完成,如果直接读取并加…

高性能Mysql第三版(一)

学习目标: 高性能Mysql第3版 学习内容: MySQL架构与历史Mysql基座测试服务器性能Schema与数据类型优化创建高性能的索引查询性能优化Mysql高级特性Explain 文章目录 学习目标:高性能Mysql第3版 学习内容:1 Mysql逻辑架构1.1 My…

【STM32单片机】贪吃蛇游戏设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用STM32F103C8T6单片机控制器,使用8*8LED点阵模块、矩阵按键、蜂鸣器模块等。 主要功能: 系统运行后,贪吃蛇游戏开始运行,默认蛇身为2节&#xff…

057-第三代软件开发-文件监视器

第三代软件开发-文件监视器 文章目录 第三代软件开发-文件监视器项目介绍文件监视器实现原理关于 QFileSystemWatcher实现代码 关键字: Qt、 Qml、 关键字3、 关键字4、 关键字5 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML&…

【数据结构初阶】树,二叉树

树,二叉树 1.树概念及结构1.1树的概念1.2 树的相关概念1.3 树的表示1.4 树在实际中的运用(表示文件系统的目录树结构) 2.二叉树概念及结构2.1概念2.2现实中的二叉树2.3 特殊的二叉树2.4 二叉树的性质2.5 二叉树的存储结构 1.树概念及结构 1.…