关于微服务的思考

目录

什么是微服务

定义

特点

利弊

引入时机

需要哪些治理环节

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

单体架构

集群和垂直化

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 等。 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch学习笔记(狂神说)

ElasticSearch学习笔记(狂神说) 视频地址:https://www.bilibili.com/video/BV17a4y1x7zq 在学习ElasticSearch之前,先简单了解一下Lucene: Doug Cutting开发是apache软件基金会 jakarta项目组的一个子项目是一个开放…

4面试题--数据库(补充)

隔离性问题 若不考虑隔离性则会出现以下问题 1. 脏读:指⼀个事务在处理数据的过程中,读取到另⼀个 未提交 事务的数据 2. 不可重复读:指对于数据库中的某个数据(同⼀个数据项),⼀个事务内的多次查询却…

ICPC合肥退役小记

退役了。 现在我坐在合肥回济南的高铁上,外面天都黑了,刚刚刷小红书刷到一句话,“后来啊,一个清晨,大雾散尽,不止清晨,不止大雾”。 遗憾必然是有的。从大一开始每天熬夜刷题打cf…

电子学会C/C++编程等级考试2021年09月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:余数相同问题 已知三个正整数 a,b,c。 现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同。 请问满足上述条件的x的最小值是多少? 数据保证x有解。输入: 一行,三个不大于1000000的正整数a,b,c,两个整数…

Linux系统---僵尸进程、孤儿进程

顾得泉:个人主页 个人专栏:《Linux操作系统》 《C/C》 键盘敲烂,年薪百万! 有了上一篇博客的学习,我们已经简单了解了进程的基础知识,今天我们再来学习两个特殊的进程,僵尸进程和孤儿进程。 …

【虚拟机】在VM中安装 CentOS 7

1.2.创建虚拟机 Centos7是比较常用的一个Linux发行版本,在国内的使用比例还是比较高的。 大家首先要下载一个Centos7的iso文件,我在资料中给大家准备了一个mini的版本,体积不到1G,推荐大家使用: 我们在VMware《主页》…

【docker系列】docker高阶篇

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

主机怎么通过命令行方式向虚拟机传输文件

这是几个月前遇到的问题了,那时候想着要记录下来,但后来忙忘了,这次想起来了,于是记录一下。 之前打靶场的时候需要将netcat-win32-1.12放入虚拟机的/var/www/html下,但是我虚拟机无法上网,也就是说无法直…

【算法】装备合成(二分)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 牛牛有x件材料a和y件材料b,用2件材料a和3件材料b可以合成一件装备,用4件材料a和1件材料b也可以合成一件装备。牛牛想要最大化合成的装备的数量,于是…

TPLink-Wr702N 通过OpenWrt系统打造打印服务器实现无线打印

最近淘到了一个TPLink-Wr702N路由器,而且里面已经刷机为OpenWrt系统了,刚好家里有一台老的USB打印机,就想这通过路由器将打印机改为无线打印机,一番折腾后,居然成功了,这里记录下实现过程,为后面…

【第二部分:结构】ARM Realm Management Monitor specification

目录 概念Realm概述Realm执行环境Realm寄存器Realm内存Realm处理器功能IMPDEF系统寄存器 Realm属性Realm活性Realm生命周期状态状态转换 Realm参数Realm描述符 颗粒Granule颗粒属性颗粒所有权颗粒生命周期状态状态转换颗粒抹除 Realm执行上下文概述REC属性REC指数和MPIDR值REC生…

8.前端--CSS-文本属性【2023.11.26】

CSS Text(文本)属性可定义文本的外观,比如文本的颜色、对齐文本、修饰文本、文本缩进、行间距等 1.文本颜色 color 属性用于定义文本的颜色。 语法: div { color: red; }属性: 2.文本对齐 text-align 属性用于设置元…

阿里云MQTT: 子设备上线流程

0. 背景 阿里云网关子设备上平台的资料很少。有些厂家直接配置每个子设备的DeviceSecret到网关里,显然太麻烦了!我经过阅读阿里文档,发现有些简化的方法,更便于客户使用,因此分享给大家。 1. 主要信息片段 子设备 $…

Spring RabbitMQ那些事(2-两种方式实现延时消息订阅)

目录 一、序言二、死信交换机和消息TTL实现延迟消息1、死信队列介绍2、代码示例(1) 死信交换机配置(2) 消息生产者(3) 消息消费者 3、测试用例 三、延迟消息交换机实现延迟消息1、安装延时消息插件2、代码示例(1) 延时消息交换机配置(2) 消息生产者(3) 消息消费者 3、测试用例 …

C语言:有一篇文章,共三行文字,每行有80个字符。要求分别统计出单词个数、空格数。

分析&#xff1a; #include<stdio.h>&#xff1a;这是一个预处理指令&#xff0c;将stdio.h头文件包含到程序中&#xff0c;以便使用输入输出函数。 int main()&#xff1a;这是程序的主函数&#xff0c;是程序执行的入口点。 char a[3][80];&#xff1a;定义了一个二维…

Java之API(上):Boolean

一、前言&#xff1a; 上次我们将到了 java.lang.* 下的包装类&#xff1a;Integer。这次我讲一下基本数据类型中的&#xff1a;布尔型&#xff08;boolean&#xff09;对应的包装类&#xff08;Boolean&#xff09;。注意&#xff1a;还有对包装类&#xff1a;Integer进行一些…

PCIE链路训练-状态机描述4

Recovery Recovery.RcvrLock &#xff08;1&#xff09;如果link是在8.0GT/s或以上的速率工作&#xff0c;那么rx只会认为当前lane获得Block alignment之后收到的TS0&#xff0c;TS1&#xff0c;TS2是有效的。如果进入当前状态是从L1或recovery.speed或L0s&#xff0c;获取Blo…

redis报错3

INFO: Initializing SpringDispatcherServletdispatcherServlet

Echarts title标题配置项的使用 更改颜色 副标题

title配置项主要是对图表的标题进行配置 title配置项所有属性文档 title&#xff1a; { ...... }设置标题 副标题 text: 简单创建柱形图,//图表标题 subtext: 副标题,如果想对副标题设置 超链接 边框 颜色 宽度…等 比如&#xff1a;设置超链接 sublink:‘…’, 设置标题位置…

nodejs+vue+python+PHP+微信小程序-婚纱摄影预约系统的设计与实现-安卓-计算机毕业设计

本婚纱摄影预约系统主要包括个人中心、套系风格管理、用户管理、摄影师管理、婚纱套系管理、婚纱套系订单管理、客片欣赏管理、客户样片管理、摄影咨询管理、客户选片管理、系统管理等多个模块。它帮助婚纱摄影预约实现了信息化、网络化&#xff0c;通过测试&#xff0c;实现了…