首页 > 其他分享 >浅谈微服务--理解入门级

浅谈微服务--理解入门级

时间:2023-02-18 16:00:32浏览次数:44  
标签:异步 调用 服务 浅谈 -- 入门级 拆分 内聚 耦合

概念

微服务是将单一的应用程序拆分成多个微小的服务,各个小服务之间松耦合,高内聚,每个小的服务可以单独进行开发,可以使用不同的数据存储技术,可以独立部署,拥有各自的进程,相互之间通过轻量化的机制进行通信,所有服务共同实现具体的业务功能。

通讯方式

同步
  1. 耦合性
  2. 性能下降
  3. 资源浪费
  4. 级联失败
异步

异步调用的实现方式,最常用的就是事件驱动

  1. 服务解耦
  2. 性能提升,吞吐量提高
  3. 没有强依赖关系,没有级联问题
具体方法
HTTP通信

两个服务之间进行同步和异步的http调用通信

消息通信

服务不直接相互通信,服务将消息推送到其他服务订阅的消息代理,其他服务可以在订阅代理中自己关心的消息

事件驱动通信

事件驱动方法不需要服务必须知道公共消息结构,服务之间的通信通过各个服务产生的事件进行。但是它也需要消息代理,因为各个服务会将其事件写入其中。它们对事件的发生做出反应,而不是产生能会或可能不会传递的信息--只反应不产生信息传递。

微服务生命周期合理规划---避免循环调用

微服务规划
  • 按照业务能力来规划或拆分微服务
  • 按照领域驱动设计来规划或拆分微服务
    ○ 基本过程:抽象业务、分析流程、识别边界、建立模型、映射到服务和代码
    ○ 避免过度耦合
    ○ 划分界限上下文、理清上下文之间的映射关系。
    ○ 细化上下文对象,区分实体、值对象、聚合根、领域服务、领域事件
微服务设计
  • 设计应该遵循单一职责的原则
    ○ 单一职责:就是对一个服务来说,它的功能要单一,只做与之相关的事情。所以设计过程要按职责进行设计,保证互不干涉
  • 遵循高内聚原则
    如果单只追求单一职责原则,会过度拆分导致调用性能变差、数据一致性难以保障、系统可用性降低等问题----因此还需要遵循高内聚
    ○ 完全独立:微服务粒度的下界是它至少应满足独立,能独立发布、独立部署、独立运行与独立测试
    ○ 足够内聚:强相关的功能与数据在同一个服务中处理
    ○ 足够完备:一个服务包含至少一项业务实体与对应的完整操作
  • 遵循低耦合原则
    ○ 避免数据过度暴露
    ○ 避免数据库共享
    ○ 最小化同步调用,如有必要引入事件驱动进行异步调用
微服务实现
  • 服务无状态
    ○ 状态是指:一个数据需要被多个服务共享,才能完成一个任务,那么这个数据被称为状态,而依赖这个数据的服务被称为有状态服务
    ○ 只有服务无状态,才能实现快速弹性扩容性,应多流量峰谷
  • 服务高可用
    ○ 实现限流、熔断、降级、增强的可用性
  • 服务可观测
    ○ 业务指标监控
  • 服务配置可管理
    ○ 微服务相关配置需要统一接入配置中心进行管理、控制
微服务调用
  • 避免 分布式大单体
    ○ 只做单向调用,避免循环调用
    ○ 多个服务循环依赖调用形成集中式“分布式大单体”,违背了微服务的原则
  • 异步解耦
    ○ 串行同步调用异步化,提高响应能力和响应速度
    ○ 应对突发流量,实现流量削峰与流量控制
    ○ 解耦核心业务逻辑不必要的依赖
    ○ 业务设计中的最终一致性
  • 引入BFF层,降低客户端与后端微服务之间的耦合
    ○ 可以理解BFF是一个后端微服务的代理服务,它主要做聚合和裁剪的逻辑,方便客户端接入和访问,目前应用较多的为网关加BFF的模式
微服务发布
  • 服务发布遵循安全发布三原则
    ○ 可灰度
    ○ 可监控
    ○ 可回滚
微服务治理
  • 正视架构腐化,遵循持续演进原则
    ○ 多人维护一个微服务时,出现频繁代码冲突,影响快速迭代,该微服务就应考虑拆分了
    ○ 当多任务并行开发时,某微服务依赖的其他模块未开发完成,出现大量的耦合则可以考虑拆分
    ○ 某微服务中的聚合功能变成了海量高频业务,避免造成资源浪费和面对性能瓶颈时可以考虑将聚合功能拆分为单独微服务
微服务下线
  • 清理无效代码、环境,减少维护成本。同时释放资源,节约成本

标签:异步,调用,服务,浅谈,--,入门级,拆分,内聚,耦合
From: https://www.cnblogs.com/leisunny/p/17132840.html

相关文章

  • SSH 免密登录
    本文介绍A利用ssh免密登录B1.A操作ssh-keygen该操作为创建公钥2.B操作#复制公钥到本地#root为A的用户名#node1为ssh别名可以换为ip地址详情请看https:......
  • 传值
    传值、传址procedureTform1.myproc1(i:string);//传值begini:='A';end;procedureTForm1.Button1Click(Sender:TObject);varx:string;beginx:=ed......
  • c++ 待自我实现的基础组件
    内存池ringbuffer定时器rbtree原子操作共享内存slab文件操作elf文件解析死锁检测内存泄漏网络框架,epoll异步请求,redis,sql连接池线程池,日志相关协议......
  • PDF的分割与合并
    1.进行PDF切割python代码如下:#20220521#1.选择要分割的文件#2.选择要保存的位置,分割为多个文件时,可自动用页码命名#3.输入要分割的页码,可以是一个范围1-23(将第1......
  • 【Android逆向】frida hook so 函数
    1.apk来自52pojie链接:https://pan.baidu.com/s/1vKC1SevvHfeI7f0d2c6IqQ密码:u1an2.apktool反编译apk,拿到so文件java-jar../apktool_2.2.4.jardapp-debug.apk3.......
  • 高CPU Java应用分析
    模拟CPU40%左右importjava.util.concurrent.CountDownLatch;publicclassMainextendsThread{privateCountDownLatchc;publicMain(Stringname,Cou......
  • SSH 设置别名
    1.介绍一般访问ssh,需要输入sshxxx.xxx.xxx.xxx  设置别名可简短命令,方便快捷vim~/.ssh/config一般是没有config这个文件的,vim会自动创建2.设置添加内容Host......
  • WPF 布局控件
    <!--Horizontal水平竖直排放元素默认Vertical竖直排放加属性Orientation--><StackPanelOrientation="Horizontal"><ButtonWidth="100"Height......
  • linux015之软件包的管理
    linux中软件安装包的管理:RPM:简介:RPM是linux中一种软件安装工具,安装linux之初就已经安装好了的,直接使用它的命令即可。这个工具相当于手动安装软件,需要自行......
  • Android 初代 K-V 存储框架 SharedPreferences,旧时代的余晖?
    本文已收录到 AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。前言大家好,我是小彭。SharedPreferences是Android平台上轻量级的K-V存储框架,亦是初代......