java微服务和分布式的区别有哪些

这个问题已经收藏了一个多月了,一直在考虑如何回答这个问题,总结了很长时间终于有了一些感悟(之前一直都是只可意会不可言传的感觉),和大家分享一下,如果有不同的建议,欢迎大家留言指正。分布式和微服务首先 ,我认为微服务就是分布式框架的一种。分布式的思想就是把一个系统的不同模块,部署在不同的服务器上,以应对高并发的问题。

SOA是一种分布式架构,把业务系统分成多个子系统,提供不同的服务,再通过服务组合、编排实现业务流程;通常在SOA架构中,ESB企业服务总线扮演了重要的角色。微服务是SOA的升华,如果非要说点儿不同的,那么微服务更加强调服务的细分和专业,去ESB总线、去中心化,部署粒度更细,服务扩展更灵活。微服务不只是技术架构很多同学一说微服务,就说这是一种技术架构,有的推荐使用Dubbo,有的推荐使用Spring Cloud。

我认为,微服务不单单是一种技术架构,也涉及到了管理、组织架构。大多数的公司,需求、开发、测试、运维都是独立的团队,这实际上是有悖于微服务快速迭代的思想;在微服务的架构下,一个服务应该是由一个团队全权负责的。不过组织架构方面的事情,真的不是我们能说了算的。必须要用微服务?我觉得没有必要为了微服务,而微服务;有的公司把服务拆分,但是数据库依然是同一个库,依然是一个项目直接掉另外一个项目的接口,然后对外就宣称完成了微服务的改造...架构设计还是要根据需求背景、团队开发能力、软硬件实力综合来考虑。

在微服务架构中,我们还需要ESB吗?

微服务架构可以理解为一种架构风格,将一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。对于微服务架构来说,他们更专注于对于系统应用和业务的解耦,可以达到快速开发,快速迭代的目的,而ESB则是专注将各个系统之间服务集成和转换,强调的是系统间的强强关联,看上去和微服务的理念是相冲突的,在同一环境下只能存在一个。

但实际情况并不是这样的。1. 微服务架构虽然优势很多,但是还处在一个发展过程,虽然目前很多的产品都在慢慢转型,但是还是需要时间,对于相对复杂的业务,并不能完全实现,而ESB能够做的,更多的是协助业务系统进行服务的转换,服务的开发,弥补业务系统当前环境下的不足,满足业务场景的快速对接和实现,相比理想化的结果,利用现有资源,更能进行快速的反应和实现。

2. 虽然微服务架构能够实现快速的开发和迭代,但是随着业务的复杂,系统的增多,对接难度也会变大,小改动可能变动一方改动,大改动双方都要改动,成本和周期都是需要衡量的,而ESB虽然前期投入很高,但是从长远来看,成本和开发周期都是最低的,对于客户来说,也是更容易接受的。3. 让一个企业所有的业务系统都能支持微服务的开发是不可能的,相对于版本较低的产品,可能都不支持开发,有可能服务都没有,这种情况下,更多的是做好IT资产的复用和兼容,微服务和ESB相结合的方式,只有这样,才能获取更多的市场,满足更多业务场景的快速实现。

五年的老程序员没有分布式微服务的开发经验是不是意味着即将被淘汰?

如果是Web开发,五年的老程序员没有分布式、微服务的开发经验,我认为情有可原,毕竟工作经验都是跟着项目走,不是所有项目都用到分布式;但是如果业余时间一点儿没接触过,那就有点儿说不过去了;淘汰不淘汰的说不好,至少对发展前景是有影响的。没有分布式、微服务的开发经验,正常又不正常我的观点是:脱离业务实际的架构和技术都是耍流氓,对分布式相关技术不熟悉,那么可能是公司的业务没有达到需要分布式的程度,很多公司的项目都是面对公司内部的业务,其数据量、并发量远不能和互联网公司相比,这时候没有微服务化的必要(服务化会带来更多的问题),很多时候,公司的架构都是被业务逼出来的。

但是如果对分布式一无所知,那说明除了做好本职工作之外,没有花额外的时间和精力去学习,这对程序员来说,是个致命的问题。没有分布式、微服务的开发经验,会不会被淘汰?首先软件开发也是有很多细分行业的,有些行业对于分布式经验的要求并不高,比如嵌入式开发;有些行业可能是需要掌握分布式的思想即可;而有些行业,分布式已经是行业趋势,建议要掌握,比如Web项目开发;如果你身处这些行业中不了解这些知识,被行业淘汰可能说的有些严重,不过肯定会对你的职业发展有着一定的影响。

着重说一些Web项目开发,因为我在这个领域工作了十余年,有着一定的经验的感悟。在互联网公司,很多公司都做到了微服务化的程度,因为如果不走分布式这条道路,很难对如此大的业务量做支撑;而在传统行业,越来越多的公司也开始意识到了这一点,如果还像原来一样,做开发一个又一个系统,三五年之后推到重建,这个成本是很高的,也很难快速响应客户的需求,所以目前很多传统行业的IT,也都还是转型,采用分布式、服务化的架构。

所以大势所趋,如果作为一名Web开发程序员,不懂分布式和微服务的架构和技术,那么职业发展一定会受到限制的。既然现状就是这样,那何不顺势而为,就学习一下嘛:分布式、微服务更多的是一种架构设计的思想;架构设计离不开对业务的充分理解,分布式和微服务需要对现有的服务进行梳理、分类、拆分、合并;分布式、微服务还是需要一些技术做支撑的,分布式系统应用技术,CDN、负载均衡、缓存、开发框架如Spring Cloud、Dubbo;分布式数据库;分布式文件存储;虚拟化技术、DevOps等等;有一些我们在传统架构中就有接触,有一些是“老瓶装新酒”,所以看起来很多,实际上也没那么恐怖。


文章TAG:分布式  服务  弄懂  一分钟  
下一篇