网友提问:
java微服务和分布式的区别有哪些?
优质回答:
你好我是从事多年的java软件开发工程师,对java微服务和分布式有比较深入的理解,下面我就给你介绍下他们的区别。
第一,你要知道什么是微服务?书本上的解释太抽象晦涩难懂,我个人认为微服务就是很小的服务,小到一个服务只对应一个单一的功能,只做一件事。这个服务可以单独部署运行,服务之间可以通过rpc来相互交互,每个微服务都是由独立的小团队开发,测试,部署,上线,负责它的整个生命周期。
第二,你要知道什么是分布式?分布式服务顾名思义服务是分散部署在不同的机器上的,一个服务可能负责几个功能,是一种面向SOA架构的,服务之间也是通过rpc来交互或者是webservice来交互的。
当你搞清楚上面两个概念后你就不难发现他们之间的区别了,微服务相比分布式服务来说,它的粒度更小,服务之间耦合度更低,由于每个微服务都由独立的小团队负责,因此它敏捷性更高,分布式服务最后都会向微服务架构演化,这是一种趋势, 不过服务微服务化后带来的挑战也是显而易见的,例如服务粒度小,数量大,后期运维将会很难,因此需要借助一些工具来自动化管理这些微服务,当然这不属于本问题的范畴,我就不详细说了,好了到这里我已经全面的给你阐述了微服务和分布式之间的区别了,希望对你有帮助,如果同行对此有不同看法,请在评论区留言讨论,谢谢
其他网友回答
微服务和分布式的概念:
微服务概念:
所谓概念,我们不引用百科以及书本上的复杂理念作为概念。简单说:微服务就是一个很小的服务,小到一个服务只是去对应一个单一的功能。也就是说,这个服务可以单独部署以及运行,服务和服务之间可以通过RPC相互交互。每一个微服务都是由一个小团队开发–>测试–>部署–>上线负责它一整套的生命周期。
分布式概念:
按照名字理解,就是服务是分布部署在不同的机器上,一个服务可能负责很多功能。生产的环境下的微服务是肯定要分布式部署的。分布式部署的应用不一定是微服务架构。比如:集群部署,它就是把相同的应用赋值到了不同的服务器上,但是逻辑功能还是单独个体应用。
微服务与分布式的区别:
分布式:不同模块部署在不同的服务器上,作用就是分布式解决网站高并发带来的问题。
集群:相同的服务,多平台服务器部署相同应用构成一个集群。作用在于通过负载均衡设备共同对外提供服务。
SOA(组装服务/ESB企业服务总线):业务系统分解成多个组件,并且其中每个组件都提供离散、自治以及可复用的服务能力。通过服务的组合和编排来实现上层的业务流程。作用在于简化维护,降低整体奉献,伸缩灵活。
微服务(找到读服务/微服务网关open API)架构设计概念,各个服务之间的隔离。以及分布式依赖整体组合,它的特性是单一的,是分布式概念严格执行。SOA到微服务构架的演讲过程。作用是各个服务可以独立的应用,组合服务也是可以系统的应用等。
其他网友回答
Java微服务和分布式之前一直说,但是对于其中的内在含义没有深究,就一般理解的基于 Dubbo + Zookeeper 的分布式架构和基于 Spring Boot + Spring Cloud 微服务架构,基于此,之前认为使用 Dubbo 的就是分布式架构,使用 Spring Cloud 的就是微服务架构,这在传统意义上可能说的通,但是 Dubbo 和 Spring Cloud 生态体系又能够完美的融合,国内技术人喜欢拿 Dubbo 和 Spring Cloud 进行对比,是因为两者都是服务治理非常优秀的开源框架。但它们两者的出发点是不一样的,Dubbo 关注于服务治理这块并且以后也会继续往这个方向去发展。Spring Cloud 关注的是微服务治理的生态。而在阅读了部分文章之后,发现微服务是架构设计方式,分布式是系统部署方式。
分布式对应的概念是单体部署。单体(传统web项目)比较适合小项目,其有一些优点,但它的缺点也非常明显。特别对于互联网公司来说:开发效率低,代码维护难,部署不灵活,稳定性不高,扩展性不够,无法满足高并发情况下的业务需求。通俗点说就是对于互联网项目,属于一直运营中有客户一直在使用。单体应用的缺陷就暴露出来了,比如可能会因为一个小问题,需要紧急上线,而导致整个网站需要停止,这样的情况对客户、业务都是影响很大的,重新部署、备份对于开发人员来说更是不好维护。分布式服务顾名思义服务是分散部署在不同的机器上的,一个服务可能负责几个功能,是一种面向SOA架构的,服务之间也是通过 rpc 来交互或者是 webservice 来交互的。再谈谈分布式架构的缺点:跨进程,跨网络的分布式系统对网络延迟和带宽的性能影响;高度依赖网络状态、任何一次远程调用都可能失败,随着调用栈的增多,其可靠性受到挑战;引入各种中间件,异步通信大大增加了功能实现的复杂度;分布式系统必然会有分布式事务的出现,这时对数据的一致性,需要在C(一致性)A(可用性)P(分区容错性)中做出选择;一个系统拆成了多个服务,每个服务都得配置,部署,监控,日志处理等运维成本。
而微服务是很小的服务,小到一个服务只对应一个单一的功能,只做一件事。这个服务可以单独部署运行,服务之间可以通过 RPC 来相互交互,每个微服务都是由独立的小团队开发,测试,部署,上线,负责它的整个生命周期。微服务的目的是有效的拆分应用,实现敏捷开发和部署。微服务相比分布式服务来说,它的粒度更小,服务之间耦合度更低,由于每个微服务都由独立的小团队负责,因此它敏捷性更高,分布式服务最后都会向微服务架构演化,这是一种趋势, 不过服务微服务化后带来的挑战也是显而易见的,例如服务粒度小,数量大,后期运维将会很难。
得到的同时也意味着失去,权衡与取舍,始终是架构的魅力。特定业务场景下的特定技术选型,特定发展阶段的服务架构演进,适合团队发展和业务支撑的架构选择需要资深的熟悉业务和技术的架构师来主导,没有最好,只有更好,只有在不断的发展演化中才能找到特定企业和团队的项目风格和基础架构。
作者:夕阳雨晴,欢迎关注我的头条号。偶尔美文,主流Java,为你讲述不一样的码农生活。
其他网友回答
概念:
集群是个物理形态,分布式是个工作方式。
分布式:一个业务分拆多个子业务,部署在不同的服务器上
集群:同一个业务,部署在多个服务器上
1:分布式是指将不同的业务分布在不同的地方。而集群指的是将几台服务器集中在一起,实现同一业务。
分布式中的每一个节点,都可以做集群。而集群并不一定就是分布式的。
举例:就比如新浪网,访问的人多了,他可以做一个群集,前面放一个响应服务器,后面几台服务器完成同一业务,如果有业务访问的时候,响应服务器看哪台服务器的负载不是很重,就将给哪一台去完成。
而分布式,从窄意上理解,也跟集群差不多,但是它的组织比较松散,不像集群,有一个组织性,一台服务器垮了,其它的服务器可以顶上来。
分布式的每一个节点,都完成不同的业务,一个节点垮了,那这个业务就不可访问了。
2:简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
例如:如果一个任务由 10 个子任务组成,每个子任务单独执行需 1 小时,则在一台服务器上执行该任务需 10 小时。
采用分布式方案,提供 10 台服务器,每台服务器只负责处理一个子任务,不考虑子任务间的依赖关系,执行完这个任务只需一个小时。(这种工作模式的一个典型代表就是 Hadoop 的 Map/Reduce 分布式计算模型)
而采用集群方案,同样提供 10 台服务器,每台服务器都能独立处理这个任务。假设有 10 个任务同时到达,10 个服务器将同时工作,1 小时后,10 个任务同时完成,这样,整身来看,还是 1 小时内完成一个任务!
好的设计应该是分布式和集群的结合,先分布式再集群,具体实现就是业务拆分成很多子业务,然后针对每个子业务进行集群部署,这样每个子业务如果出了问题,整个系统完全不会受影响。
另外,还有一个概念和分布式比较相似,那就是微服务。
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
区别:
1.分布式
将一个大的系统划分为多个业务模块,业务模块分别部署到不同的机器上,各个业务模块之间通过接口进行数据交互。区别分布式的方式是根据不同机器不同业务。
上面:service A、B、C、D 分别是业务组件,通过API Geteway进行业务访问。
注:分布式需要做好事务管理。
2.集群模式
集群模式是不同服务器部署同一套服务对外访问,实现服务的负载均衡。区别集群的方式是根据部署多台服务器业务是否相同。
注:集群模式需要做好session共享,确保在不同服务器切换的过程中不会因为没有获取到session而中止退出服务。
一般配置Nginx*的负载容器实现:静态资源缓存、Session共享可以附带实现,Nginx支持5000个并发量。
3.分布式是否属于微服务?
答案是肯定的。微服务的意思也就是将模块拆分成一个独立的服务单元通过接口来实现数据的交互。
4.微服务架构
微服务的设计是为了不因为某个模块的升级和BUG影响现有的系统业务。微服务与分布式的细微差别是,微服务的应用不一定是分散在多个服务器上,他也可以是同一个服务器。
分布式和微服的架构很相似,只是部署的方式不一样而已。
以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!
其他网友回答
Java微服务和分布式是近几年越来越热的词语,想要理解他们的区别,我们可以从二者的概念入手!
微服务
先说微服务,其实就是把一个大的服务进行拆分,拆分成多个小服务。举个例子,比如我们都去过火车站买票。那么火车站最开始的时候可能就是—个很小的地方,里面提供—个对外服务的窗口,这个时候 火车站就相当于一个己完成的大的服务,对外提供咨询、买票、退票、改签等服务。
那么随着不断的发展. 通过火车出行的人越来越多,这个时候如果这个窗口的服务员生病了请假了,那么所有的人都无法使用火 车服务,有的人没法买票、有的人没法退票、有的人没法改签。这个时候就需要进行服务的拆分,我们把 这一个窗口拆分成咨询服务窗口、买票服务窗口、退票服务窗口、改签服务窗口,这样拆分过后就好很多, 现在就算退票服务窗口出现了问题没法退票,但是不会影响买票、咨询的服务使用。可以极大的提升我们服务的“健壮性”。
分布式
另外再说分布式,还用火车站的例子来说,原来我的服务都在一个地方(比如说同一个机器上),现 在我进行拆分后有咨询、买票、退票、改签四个服务,最少4个人,在同一个窗口实在太拥挤了,我就需要分开部署,分成4个窗口。其实火车站也早就是这么做的,也是分布式微服务的思想。
集群
最后再说一个集群的概念。集群是什么?就是相同的程序服务做同样的事情。你看现在买票的服务箱 求量特别大,一个窗口要排起长队应对不了,那我们就做买票服务集群,开多个窗口,都是提供买票的服务。改签就1个窗口,那它就不是集群,买票有多个服务窗口,这个买票的服务窗a放在一起就是集群。
以上就是关于微服务和分布式概念上的一些理解,希望对你有所帮助!