集群、分布式和微服务

 


一、架构演变

  • 单机结构到集群结构,你的代码基本无需要作任何修改,你要做的仅仅是多部署几台服务器,每台服务器上运行相同的代码就行了
  • 但是,当你要从集群结构演进到微服务结构的时候,之前的那套代码就需要发生较大的改动了。
  • 所以对于新系统我们建议,系统设计之初就采用微服务架构,这样后期运维的成本更低。
  • 但如果一套老系统需要升级成微服务结构的话,那就得对代码大动干戈了。所以,对于老系统而言,究竟是继续保持集群模式,还是升级成微服务架构,这需要你们的架构师深思熟虑、权衡投入产出比。

二、集群

  程序单机处理达到瓶颈时,就将程序部署在多台服务器上,这样就构成了一个“集群”。集群中的每台服务器是这个集群的一个节点。每台机器都提供相同的服务,这样系统的处理能力就相同于提升了好几倍

  一)集群分为三种类型

  1、LB:Load Balancing:负载均衡,多个主机组成,每个主机只承担一部分的访问请求

  2、HA:High Availiablity:高可用,避免单点故障SPOF(single point of failure)

  • MTBF:mean time between failure 平均无故障时间,正常时间
  • MTTR:mean time to restoration(repair)平均恢复前时间,故障时间
  • A = MTBF / (MTBF+MTTR )  (0,1): 99%,99.5%,99.9%,99.99%,99.999%

  SLA:服务等级协议(全称:service level agreement) 是在一定开销下为保障服务的性能和可用性,服务提供商与用户定义的一种双方认可的协定。这个开销是驱动提供服务质量的主要因素。在常规的领域中,总是设定所谓的三个9,四个9进行表示,当没有达到这种水平的时候,就会有一些列的惩罚措施。而运维的目标就是达成这种服务水平。

  停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间。而运维主要关注计划外停机时间。

  3、HPC:high-performance computing 高性能 https://top500.org/

三、分布式

  一)分布式系统

  1、分布式结构概述

  分布式结构就是将一个完整的系统,按照业务功能,拆分成一个个独立的子系统,在分布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中,它们之间通过RPC方式通信。

  2、分布式常见应用

  • 分布式应用:服务按照功能拆分,使用微服务
  • 分布式静态资源:静态资源放在不同的存储集群上
  • 分布式数据和存储:使用key-value缓存系统
  • 分布式计算:对特殊业务使用分布式计算,比如Hadoop集群

  二)注意事项

  1、注意事项

  分布式不一定就是不同的组件,同一组件也可以,关键在于是否通过交换消息的方式进行协作;分布式系统也可以是一个集群

  例如:zookeeper的节点都是对等的,但它自己构成了一个分布式系统。

  2、举例说明

  举个例子,假设需要开发一个在线商城。按照微服务的思想,我们需要按照功能模块拆分成多个独立的服务,如:用户服务、产品服务、订单服务、后台管理服务、数据分析服务等等。这一个个服务都是一个个独立的项目,可以独立运行。如果服务之间有依赖关系,那么通过RPC方式调用。

  三)分布式的好处

  • 系统之间的耦合度大大降低,可以独立开发、独立部署、独立测试,系统与系统之间的边界非常明确,排错也变得相当容易,开发效率大大提升。
  • 系统之间的耦合度降低,从而系统更易于扩展。我们可以针对性地扩展某些服务。假设这个商城要搞一次大促,下单量可能会大大提升,因此我们可以针对性地提升订单系统、产品系统的节点数量,而对于后台管理系统、数据分析系统而言,节点数量维持原有水平即可。
  • 服务的复用性更高。比如,当我们将用户系统作为单独的服务后,该公司所有的产品都可以使用该系统作为用户系统,无需重复开发。

  四)分布式的实现

  分布式的核心就一个字:拆。只要是将一个项目拆分成了多个模块,并将这些模块分开部署,那就算是分布式。(分布式拆了就行)

  如何拆呢?有两种方式:水平拆分,垂直拆分(也称为“横向拆分”和“垂直拆分”)

  1、水平拆分

  根据“分层”的思想进行拆分。例如,可以将一个项目根据“三层架构”拆分成 表示层(jsp+servlet)、业务逻辑层(service)和数据访问层(dao),然后再分开部署

  2、垂直拆分

  根据业务进行拆分。例如,可以根据业务逻辑,将“电商项目”拆分成“订单项目”、“用户项目”和“秒杀项目”。显然这三个拆分后的项目,仍然可以作为独立的项目使用。像这种拆分的方法,就成为垂直拆分。

 

四、微服务

  微服务就是非常微小的服务。微服务可以理解为非常细粒度的垂直拆分。

  细粒度的垂直拆分

“订单项目”本来就是垂直拆分后的子项目,但实际上“订单项目”还能进一步拆分为“购物项目”、“结算项目”和“售后项目

 

五、简述集群、分布式和微服务的区别与关系

  一)集群

  集群的意义在于利用多个服务器实现统一业务来提高运行效率

  例如:一个任务需要消耗一台服务器一个小时,四个服务器一起运行运行,只需要一个小时

  二)分布式

  分布式的意义在于把不同的业务分配给不同的服务器来完成,实现多服务器共同工作的效果,提高运行效率

  例如:一个产品有A+B+C+D四个子业务,每个业务耗时一台服务器一个小时,一台服务器需要1*4=4个小时
  使用分布式,不考虑各个服务器之间的通信时间等消耗,只需要1个小时

  三)微服务

  微服务是一种架构风格

  分布式和微服务很像,把一个系统的业务拆分成多个独立的服务,系统中的各个微服务的各个微服务可以独立部署,各个服务之间松耦合的

  微服务的设计是为了不因为某个模块的bug影响现有的系统业务。

  微服务与分布式的细微差别是:微服务的应用不一定是分散在多个服务器上,他可以是同一服务器。

  严格来说:分布式是也是一种微服务,但是微服务不一定是分布式

  四)总结

  • 集群:多个服务器部署相同的模块,干相同的事
  • 分布式:多个服务器部署多个子模块,分别干不同的事
  • 微服务:不一定是多个服务器,可能在一个服务器上,部署多个子模块分别干不同的事
  • 好的设计应该是分布式和集群的结合,先分布式再集群
    • 具体实现就是业务拆分成多个子业务,然后针对每个子业务进行集群部署
    • 好处:每个子业务若出了问题,整个系统完全不会受影响
posted @   思维无界限  阅读(760)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示

目录导航