集群,分布式,微服务概念和区别理解
概念:
微服务是啥?
- 灵活性:由于这些较小的应用程序无需使用相同的编程语言,因此,开发人员可以使用他们最熟悉的语言,这是灵活性.
- 低成本:由于他们都用自己擅长的语言去开发,所以效率会高,相应的开发成本会降低.
微服务架构又是啥?
那么分布式又是啥?
原文链接:https://blog.csdn.net/zhonglunsheng/article/details/83153451
集群是个物理形态,分布式是个工作方式。
- 分布式:一个业务分拆多个子业务,部署在不同的服务器上
- 集群:同一个业务,部署在多个服务器上
1:分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。
分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。
举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。
而分布式,从窄意上理解,也跟集群差不多,但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。
分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。
好的设计应该是分布式和集群的结合,先分布式再集群,具体实现就是业务拆分成很多子业务,然后针对每个子业务进行集群部署,这样每个子业务如果出了问题,整个系统完全不会受影响。
另外,还有一个概念和分布式比较相似,那就是微服务。
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
区别:
1.分布式
将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。区别分布式的方式是根据不同机器不同业务。
上面:service A、B、C、D 分别是业务组件,通过API Geteway进行业务访问。
注:分布式需要做好事务管理。
分布式事务可参考:微服务架构的分布式事务解决方案
2.集群模式
集群模式是不同服务器部署同一套服务对外访问,实现服务的负载均衡。区别集群的方式是根据部署多台服务器业务是否相同。
注:集群模式需要做好session共享,确保在不同服务器切换的过程中不会因为没有获取到session而中止退出服务。
一般配置Nginx*的负载容器实现:静态资源缓存、Session共享可以附带实现,Nginx支持5000个并发量。
3.分布式是否属于微服务?
答案是肯定的。微服务的意思也就是将模块拆分成一个独立的服务单元通过接口来实现数据的交互。
微服务相比分布式服务来说,它的粒度更小,服务之间耦合度更低,由于每个微服务都由独立的小团队负责,因此它敏捷性更高,分布式服务最后都会向微服务架构演化,这是一种趋势, 不过服务微服务化后带来的挑战也是显而易见的,例如服务粒度小,数量大,后期运维将会很难
4.微服务架构
微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务。微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。
分布式和微服务的架构很相似,只是部署的方式不一样而已。
去饭店吃饭就是一个完整的业务,饭店的厨师、配菜师、传菜员、服务员就是分布式;厨师、配菜师、传菜员和服务员都不止一个人,这就是集群;分布式就是微服务的一种表现形式,分布式是部署层面,微服务是设计层面。
https://blog.csdn.net/qq_37788067/article/details/79250623
为什么要用分布式架构?
单体架构:
——优点:- 易于开发:开发的方式简单,方便运行也容易调试。
- 易于测试。
- 易于部署。
- 项目过于臃肿,维护成本大,出现bug难定位。
- 资源无法隔离:共享一个数据库,或者一块内存。
- 如果一个功能模块突然访问量过大,可能影响整个系统的性能。
- 无法灵活扩展:单体系统也可以集群部署,但是不够灵活,我明明只是订单系统遇到了瓶颈,只需要将订单模块水平扩展就行,但现在要将整个系统水平扩展。不灵活!
-
交付周期长:所有功能得一起上线,一起构建,一起部署。任何一个环节出错,都可能影响交付。
分布式架构:
再谈谈分布式架构的缺点:
- 性能,分布式系统是跨进程,跨网络的,性能很收网络延迟和带宽的影响。
- 可靠性:由于高度依赖网络状况,任何一次远程调用都可以失败。随着服务的增多,还会出现更多的潜在故障点。
- 异步:引入各种中间件,异步通信大大增加了功能实现的复杂度。
- 数据一致性:分布式系统必然会有分布式事务的出现,这时对数据的一致性,
- 需要在C(一致性)A(可用性)P(分区容错性)中做出选择。
- 运维成本:一个系统拆成了多个服务,每个服务都得配置,部署,监控,日志处理。