【关于微服务的深入理解】

1.什么是微服务?

微服务就是把一个大型的单体应用,按照业务功能拆分成多个独立的小服务,每个小服务独立开发、独立部署、独立运行。微服务与高并发的区别?

微服务解决的是:组织复杂度和系统脆弱性的问题

高并发:靠缓存,CDN,消息队列,数据库优化。

2.为什么微服务会有网络损耗,网络延迟?

单体模式:两个模块在同一个进程里面,内存共享,A想调用B,直接用指针去找就行,没有网络参与

0.01毫秒

微服务:

  1. 要先将需求写下来(进行序列化)CPU耗时 --------->尽量用二进制协议,比JSON协议更加轻量

  2. 通过网络传输(TCP/HTTP)可能会有物理延时,网线连接,网络不稳定

  3. 通过网关/负载均衡

  4. 找到合适的服务器,反序列化

    操作系统内核开销:

耗时至少10~50毫秒

3.既然在高并发性能上单体模式这么强,为什么大厂会选择分布式/微服务呢?

当系统规模小的时候,单体模式无疑是最好的选择

当系统规模 到一定的临界点时:人的组织效率 、系统的可用性远比单次请求的极速更重要

人的问题:

如果你选择单体模式的话,如果100个开发人员在同一个系统里面进行改代码,那么就会经常发生代码冲突,而且他们要全部改完之后一起去提交,并且如果有一个程序员改错的话,整个系统就会全部崩溃。

但是如果选择微服务模式,他们就会将100个人拆分成10个小团队,每个团队去独立开发,独立部署新的功能,这样子的话,每个功能的隔离性会很好,生产效率会大幅提高

故障隔离:

选择单体模式就会所有代码都会跑在同一个进程中。如果单独一个模块挂掉,整个网站就会全部瘫痪(包括登录系统、浏览商品的功能)

如果选择微服务模式,比如说支付服务挂掉了,只影响下单支付这一个模块,用户依然可以登录网站浏览商品,加入购物车,这些功能还在继续服务,它就会大幅提高整体的可用性。

资源投放的弹性伸缩:

单体模式的话。比如说在双11这种订单量非常大的情况下,如果需要大规模地去扩张资源,那么就要把就要把整个单体应用全部复制部署到多台机器上,哪怕你只需要增加订单计算的CPU,但是你还是要将登录商品还有库存的代码全部复制一份,这样就会导致浪费了大量的内存和CPU

如果你选择微服务模式,订单服务压力非常大,我就只扩展订单服务的10台小机器,其他登录服务只保留一台。微服务就会把资源精准地投放到高需求的服务上。

对比维度 单体模式 微服务模式
性能 (RT) (进程内调用,极快) 差(网络调用,有损耗)
内存占用 (只加载一份框架) 差(多个进程加载多份框架)
开发效率 差(代码冲突严重,上线排队) (团队解耦,独立迭代)
故障恢复 差(一挂全挂) (隔离故障,降级处理)
资源利用 差(扩缩容不灵活) (按需伸缩,精准花钱)
相关推荐
有颜有货4 小时前
一文搞懂企业五大架构
架构·数据架构·业务架构·技术架构·代码架构
cellurw7 小时前
从虚拟化音频架构到板端故障定位:车载 Audio 阶段性工程实践整理
架构·音视频
爱学习的小白柏7 小时前
【AI问数技术】多Agent协同架构:查询规划/SQL生成/洞察分析/报告生成
java·网络·人工智能·windows·sql·架构·llama
Larcher8 小时前
SDD 项目开发步骤与提示词
人工智能·设计模式·架构
林浅不想努力8 小时前
k8s集群部署的方法原理
云原生·容器·kubernetes
輝太くん9 小时前
k8s中的pod管理
云原生·容器·kubernetes
大大大大晴天9 小时前
大数据平台为什么必须走向云原生:从资源孤岛到弹性数据基础设施
大数据·云原生
ZGIAI9 小时前
ZGI 父子分块:连接检索片段与完整上下文
人工智能·架构
ZGIAI9 小时前
ZGI 文件解析:知识入库前的质量门
人工智能·架构
潘正翔10 小时前
k8s高级_调度器Deployment
linux·运维·云原生·容器·kubernetes·jenkins·devops