当前位置: 首页 > news >正文

【架构设计】单体软件向微服务化演变

单体软件

假设单体软件的各模块如下,其中服务包含许多功能模块,如用户管理模块、商品模块、订单模块、仓库模块;

请求
转发
客户端
代理层
服务
数据库

服务化

服务化是指对单体服务进行拆分,将一个服务软件拆分为多个相互关联的服务,他们之间相互协作,能正常完成原单体服务的所有业务。

服务化后,有如下优点:

  • 服务化后的各服务能独立提供服务,某个服务损毁后,不影响其他业务的使用,软件整体的可用性提高了。
  • 服务化后的软件代码依据各子服务管理,相对来说代码量少了,开发复杂性会成指数型减弱
  • 服务化后的软件,各子服务独立维护,因此各服务更新维护也比较简单
  • 服务化后的软件,由于各服务在不同节点独立运行,计算与网络资源成倍数形式增长。理论上来说,这使得软件的服务能力成倍提高

以下是对单体服务中的服务进行服务拆分的示意图。

微服务化
商品服务
网关
用户服务
订单服务
仓库服务
客户端
数据库

部分服务分集群化

服务集群化

软件服务化后,使得软件的可用性、服务能力大大提高,然而其更多的价值在于使得软件的开发、维护更为简单。

在软件服务化后,随着软件使用的需求持续增长,依然会面临服务能力不足的问题。为了解决该问题,大家都会想到服务扩容,那么如何扩容呢?假定软件被拆分了10多个子服务,甚至更多。将所有服务都扩容一套嘛?

答案是否定的,扩容不是说说那么简单。众多子服务同时扩容,首先要面临成本问题。

一般情况下,服务扩容是根据各子服务的使用情况来指定灵活的扩容方案。对软件中服务压力大,硬件资源不足的节点进行灵活扩容。

如下是商品服务服务扩容的示意图,下图表示软件将商品服务扩增到了三个节点,这个三个节点通过负载均衡与软件中的其他服务相关协同。

商品服务以多个节点共同提供服务。这个服务群形成一个集群,即商品服务集群。

商品服务集群
微服务化
商品服务01
商品服务02
商品服务n
商品服务
负载均衡
网关
用户服务
订单服务
仓库服务
数据库
客户端

数据库集群化

随着服务的增长,对数据库的读写需求也会持续增长。其增长趋势与服务的使用趋势成正比。

当数据库服务能力遇到瓶颈时,也可以对其进行服务扩容。

因为数据层的服务扩容首先要保证扩容后所有数据服务之间的数据一致性问题 ,因此服务的集群化和数据层的集群化通常不一样。

  • 服务集群化后,通常各个子服务之间的关系是均等的,它们可无差别的提供服务,任何一个服务损毁,都不影响整体软件的运行,除非所有集群中的所有服务都损毁。
  • 数据层的服务集群化后,通常对服务进行主从节点划分。主节点主要负责数据写入,从节点主要负责数据读取。注意,除了主从这种模式外,还有去中心式服务模式。去中心式服务模式理论上每个服务都能进行数据读写。
数据库集群
微服务化





数据库从节点01
数据库从节点02
数据库从节点n
商品服务
网关
用户服务
订单服务
仓库服务
客户端
http://www.lryc.cn/news/281694.html

相关文章:

  • 部署ATS(Apache Traffic Server)和Nginx正向代理服务性能对比
  • kafka入门(六):日志分段(LogSegment)
  • Python 与 PySpark数据分析实战指南:解锁数据洞见
  • docker使用nginx部署vue刷新页面404
  • openGauss学习笔记-198 openGauss 数据库运维-常见故障定位案例-分析查询效率异常降低的问题
  • 使用Map.clear()、List.clear()方法,清空时注意!
  • 如何配置Pycharm服务器并结合内网穿透工具实现远程开发
  • c++中的以及链表的基础使用
  • vue v-for循环拖拽排序,实现数组选中的数据拖拽后对应的子数据也进行重新排序
  • google cloud storage批量文件下载
  • easyexcel 3.0.x 版本实现指定列 锁定以及指定列隐藏
  • whistle代理+mock轻松解决“页面端“测试接口没数据难题
  • HNU-计算机网络-实验5(自选)-安全相关编程实验
  • Ubuntu搭建OpenCV环境(C++)
  • R语言【paleobioDB】——pbdb_orig_ext():绘制随着时间变化而出现的新类群
  • Vue模板的理解和使用
  • mysql group_concat函数使用
  • 并发编程之三大特性及JMM内存模型
  • centos系统设置runlevel为5
  • 关于群晖ARPL界面能出现ip但是使用Synology Assistant搜索不到ip问题 及解决方法
  • mysql Linux系统云服务器配置远程访问
  • 使用WAF防御网络上的隐蔽威胁之SQL注入攻击
  • 【书生·浦语】大模型实战营——第五次课程作业
  • Unity | 渡鸦避难所-7 | 攻击碰撞检测
  • Linux Mii management/mdio子系统分析之一 总体概述
  • C语言:自定义类型——联合和枚举
  • uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -用户投票实现
  • 如何实现一个两栏布局,右侧自适应?三栏布局中间自适应?
  • 004 Golang-channel-practice 左右括号匹配
  • MS2351M/MS2351D:RF 检测器/控制器