5分钟带你快速了解微服务框架的前世今生

2023-11-01

目录

原始时代

青铜时代

黄金时代

铂金时代

钻石时代

星耀时代

王者时代

总结


图片

原始时代

1969年11月,为了便于高校间共享资源,美国国防部高级研究计划管理局建立一个名为阿帕网络ARPAnet,起初只有四个节点。

图片
阿帕网起源

一年后阿帕网的节点数量增至15个,此后平均每隔二十天就有一台大型计算机接入。

随着网络在世界范围不断扩大,不同国家不同地区各自形成了一个网络,操着不同方言彼此间互不相通,诸侯割据格局已经形成。

隔离的阿帕网

这个时候机器与机器之间通信是靠彼此约定的方式进行。

计算机靠方言通信

机器需要自行处理网络通信过程中遇到的丢包、乱序、重试等问题。

青铜时代

为了解决各国家各地区网络不能互通的问题,1973年两位年轻的小伙子开始发力了,致力于研究一种通讯方法,能够解决不同机器型号的计算机互相通信,简单说就是用普通话替代方言,这就是大家熟知的“TCP/IP”协议。

图片
鲍勃·卡恩(左)与温顿·瑟夫(右)

随着 TCP/IP 协议逐渐普及后,一张大的 Internet 网络由此形成。

图片
Internet

这个时候机器与机器之间通信的问题已经解决,TCP/IP 可以保证信息可靠性传输,我们只用关系业务逻辑即可。

图片
依赖 TCP/IP协议实现机器间传输

黄金时代

在 TCP/IP 协议刚兴起时,计算机上的应用还很贫乏,机器与机器之间通信一般用来简单的数据传输。

随着 WEB 互联网技术兴起,基于 TCP/IP 协议出现了很多应用层协议,国内出现了一批优秀的互联网公司如腾讯、新浪、搜狐、淘宝等。

当时访问量并不大,采用单体架构基本就可以满足。

图片
单体应用之间调用

服务的数量不多,每个服务都有一个唯一的IP 地址,服务与服务之间交互通过 IP寻址。

铂金时代

网民数量越来越多,单个实例扛不住日益增长的访问量。通常会在一个机器上部署多个实例组成集群,服务1访问服务2不再是之前的点到点了,现在变成了点到多点,中间会加一个负载均衡解决流量均衡问题。

图片
单体应用集群之间调用

钻石时代

随着互联网业务访问量井喷,通过横向扩展服务实例的方法也开始遇到瓶颈了,单个服务越来越大,代码模块耦合严重,修改一行代码可能影响整个系统。

问题来了,解决方案也随着而来,“微服务”横空出世了。将一个业务服务按功能模块切分为多个微服务,比如将 Service1 切分为 Micro Service1,Micro Service2,Micro Service3。

在单体服务中Micro Service1调用Micro Service2可能就是一个模块调用另外一个模块,调用一个公开的函数就能搞定,拆为微服务之后就变成了两个微服务直接的调用,这种调用是要通过网络通信实现。

微服务间调用

星耀时代

随着业务扩张,对系统的高可用要求越来越高,一些重点微服务如订单、账单等可能会部署成百上千个实例,运维人员的负担也在逐渐加大,如果机器挂了要手动删除,如果遇到重大活动如双十一可能要扩展几千个实例,运维人员需要手工添加,人工干预越多出错的概率越大。

第一代微服务技术应运而生。

代理内嵌

每个微服务内嵌一个代理用来处理服务注册和发现的逻辑,国内以阿里的 Dubbo,微博的 Motan 为代表。这类框架不足的地方很明显:微服务与代理耦合、不支持多语言。

王者时代

针对第一代微服务框架的不足,大家在纷纷探索下一代微服务框架。

在每一个主机上单独部署一个代理进程,多个微服务共用一个代理进程,实现服务发现和负载均衡。

代理进程

这种模式通常被大家称为“sideCar”,也就是“边车模式”。

什么叫“边车”,在早期有一种摩托车,驾驶位置旁边挂着一个拖斗,对比微服务旁边挂一个代理进程,所以形象地称为“边车模式”。

图片
摩托车拖斗

在新一代的 ServiceMesh 架构中,服务消费者和服务提供者都会部署SideCar。

图片
SideCar 模式

服务与服务之间是靠 sideCar 连接起来,sideCar 用来处理与业务无关的注册、发现、熔断、限流等治理能力。

略去业务服务和其他无关的东西,将所有的 sideCar 连接起来可以得到下面这张图:

图片
服务网格

是不是长得像网格,服务网格(service mesh)由此得名。

维基百科是这样定义服务网格

服务网格是一个基础设施层,用于处理服务间通信。云原生应用有着复杂的服务拓扑,服务网格保证请求在这些拓扑中可靠地穿梭。在实际应用当中,服务网格通常是由一系列轻量级的网络代理组成的,它们与应用程序部署在一起,但对应用程序透明。

总结

ServiceMesh(服务网格)的特点:

  • 场景:用于微服务间的服务通信和服务治理

  • 方案:边车模式

  • 定位:基础设施层

服务网格是一种比较新的架构风格,大家在技术选型时不要盲目追新,适合当前业务发展的技术才是最好的技术。

大家学会了吗?没学会也没关系,你可以找一些大佬的书看一看,我这里有一些书单推荐给你, PDF 电子书都整理好了,点这里查看下载

 

- END -

一个人学习很孤独,不如抱团吧。

 

作者:雷小帅

Github 开源项目『Java八股文』的作者。

开源项目主要内容有:Java面试套路,Java进阶学习,打破内卷拿大厂Offer,升职加薪!

https://github.com/CoderLeixiaoshuai/java-eight-part

作者简介:

☕读过几年书:华中科技大学硕士毕业;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5分钟带你快速了解微服务框架的前世今生 的相关文章

随机推荐

  • 手把手教你ubuntu下移植MJPG-streamer

    一 嵌入式视频图像开源库 在嵌入式系统中 常用的视频图像处理开源系统有 luvcview cheese motion mjpg streamer或者ffmpeg 其中 luvcview 基于V4L2 SDL的程序 支持拍照录像 参数调节 代
  • Linux centos 卸载 ceph

    在CentOS上卸载Ceph的操作步骤 1 停止Ceph集群 首先 你需要停止Ceph集群中的所有服务 在每个节点上运行以下命令来停止所有服务 systemctl stop ceph target 2 卸载Ceph软件包 在每个节点上 使用
  • 在1-100中随机生成10个数字并进行排序

    1 生成10以内的数字 可以参考rand 10 2 生成1 10之间的数字 可以参考rand 10 1 3 特定的 要生成a b之间的数字 可以参考rand b a 1 a include
  • CSharp: QuestPDF create pdf file in donet core 6

  • UE4 分屏显示

    比较简单 直接附上蓝图 注意 启动模式选择独立游戏进程启动这样能够在两个屏幕上满屏显示 在UE4 版本上可以实现 不清楚在UE5上实现不了在两个屏幕上满屏显示 有疑惑或者想法这欢迎沟通交流 还要注意设置项目里面的屏幕设置 下面附上简单的分屏
  • js如何实现数组去重的常用方法

    聚沙成塔 每天进步一点点 专栏简介 使用 Set ES6 使用 filter 和 indexOf 使用 reduce 使用对象属性 使用 includes 方法 ES6 写在最后 专栏简介 前端入门之旅 探索Web开发的奇妙世界 记得点击上
  • 有人知道乐高机器人和乐高少儿编程区别吗

    乐高机器人和乐高少儿编程区别 现在很多的家长对于孩子的学习可以说是非常的用心 就拿现在很多的家长在给孩子选择少儿编程的学习课程的时候 可以说是非常的用心 就想要给孩子选择一个对于孩子有好处的课程 但是很多的家长对于乐高机器人和少儿编程的了解
  • 老猿学5G:融合计费的Nchf和Nchf‘服务化接口消息Nchf_ConvergedCharging_Create、Update、Release和Notify

    老猿Python博文目录 一 引言 在 老猿学5G扫盲贴 中国移动的5G计费架构解读 介绍了5G融合计费的服务化接口包括 CHF提供给CTF使用的Nchf接口 OCF提供给CHF使用的Nchf 接口 这两个接口消息的内容都相同 只是服务端和
  • 安卓端自行实现工信部要求的隐私合规检测一(教你手写Xposed模块代码)

    前言 原文地址 安卓端自行实现工信部要求的隐私合规检测一 教你手写Xposed模块代码 转载者言 只是简单监控隐私权限可以使用Android 11的新特性AppOpsManager OnOpNotedCallback 参考下面文章 隐私合规
  • Maven中GeoTools的引入 - Maven 的 repository 与 mirror

    Maven中GeoTools的引入 Maven 的 repository 与 mirror 在Maven中引入GeoTools时找不到jar包 搜索了蛮久才明白是自己maven没有学明白 于是重学了一次maven 解决了这个问题 关键在于理
  • python-共现矩阵(共词矩阵)计算

    共现矩阵 共词矩阵 统计文本中两两词组之间共同出现的次数 以此来描述词组间的亲密度 code 我这里求的对角线元素为该字段在文本中出现的总次数 import pandas as pd def gx matrix vol li 整合一下 输入
  • knife4j介绍及使用

    Knife4jInsight是一款致力于基于OpenAPI2及OpenAPI3规范进行聚合的独立中间件 在Knife4j 4 0版本发布之际 作者也对该组件进行了了架构重新设计 代码重构 并也发布了该独立中间件的2 0版本 基于Spring
  • windows使用makefile的三种方法

    windows使用makefile的三种方法 想再在windows上尝试makefile的可以试一试 注意需要下载好mingw 配置好gcc路径 才能成功使用make 第1种方法只需要命令行 2 3种方法需要借助vscode实现 当用户编译
  • Rokoko for Maya

    Rokoko for Maya 动捕应用 一 什么是Rokoko 二 使用 Rokoko Stufio 暂时没打算记录如何操作 Maya插件 rokoko studio live 下载安装 如何使用 三 其他 一 什么是Rokoko Rok
  • Raspberry Pi 与Arduino SPI通信

    本教程介绍了使用SPI 串行外围设备接口总线 进行Raspberry Pi与Arduino通讯和控制的基本框架 SPI代表了一种非常完善的芯片间通信方法 该方法在两种设备的硬件中均实现 在这里 我们将详细探讨SPI 讨论硬件和软件注意事项
  • 波次

    播种式分拣是以汇总了多份订单的一个批次为单位进行分拣作业的 业内通常将这个作业的批次称为 波次 为了达到较高的工作效率 播种式分拣一般希望每个波次汇总较多的订单 但由于以下原因 每个波次汇总的订单绝不是越多越好 1完成订单的时间限制 通常情
  • JavaMail邮件发送不成功的那些坑人情况及分析说明

    前言 JavaMail的使用本身并不难 网上有不少案例 简单易懂 而且有详细的中文注解 但是由于JavaMail的机制设置不够完善 特别是异常出错时的参考信息太少 给初学者造成了不少麻烦 而我就是其中之一 在此 把我遇到过得那些坑总结出来
  • 图解人工智能知识架构(从知识角度告诉你人工智能到底学些啥)

    很多人都想学习人工智能 但是却不知道该学些啥 从宏观的视角搞清楚人工智能到底需要学习哪些领域的知识是至关重要的 这就好比要去逛一座大的商场 非常需要一份商场的楼层导览图 它能够告诉你各个楼层商户的分布 又好比去一个风景区游玩 非常需要一份景
  • VS2022安装easyx图形库教程

    下载easyx图形库 下载地址 EasyX Graphics Library for C 下载好后安装 点击安装 安装 前两项 easyx会自动识别VS版本 我们点击安装 安装好以后重启VS 测试一下 安装easyx推行库成功 问题 那么e
  • 5分钟带你快速了解微服务框架的前世今生

    目录 原始时代 青铜时代 黄金时代 铂金时代 钻石时代 星耀时代 王者时代 总结 原始时代 1969年11月 为了便于高校间共享资源 美国国防部高级研究计划管理局建立一个名为阿帕网络ARPAnet 起初只有四个节点 阿帕网起源 一年后阿帕网