对于一个刚接触技术的菜鸟来说,各种各样的技术总是让人充满了新鲜感,从刚刚学习接触到的SSM到分布式到微服务,我总是充满了憧憬。
对于我来说,SSM就是技术生涯中的初恋,回想起来她总是那样美好,但是不免缺少了新鲜感。对于代码中到处都是bug的我来说,抛去热部署,每次修改都要重启Tomcat简直是无法忍受,但是无可避免:
- 随着项目的不断扩展,正确的修复BUG和开发新功能变的越来越困难SSM时代的单体化应用从小小的Demo变成了单体地狱。项目想要引入新的技术将变得极为困难。
- 从另一方面来说,持续部署变的极为困难,以公司的Sass业务为代表,极为频繁的更新无法及时部署到生产环境。
- 各种不同的业务需求的机器性能总是不同的,单一机器难以合理的满足单体应用,也难以满足高可用的需求,一个吃饱全家不饿变成了一个挂掉,全家GG。
为了满足互联网时代的发展,SOA出现了,关于SOA与微服务其实存在着很多的讨论,这里我们要说一下SOA准确的来说具有两重含义,
- SOA即面向服务架构,服务间松散耦合,支持服务的封装,服务注册和自动发现,以服务契约方式定义服务交互方式。
- 说的是Enterprise Service Bus(ESB)、WebSphere Process Server(WPS)、WebSphere Integration Developer(WID)、WebSphere Message Broker(WMB)这些具体的产品。我们日常所说的SOA多是指以ESB为代表的具体实现。
SOA其实就是为了解耦,解耦的本质就是为了去中心化,但是SOA有个很大的问题是,按照SOA的思路这些系统总会在某个环节上走向集中,所以去中心化做得很不彻底。
- 中心化也就是我们所说的ESB以及web service,SB的根本诉求是为了解决异构系统之间的连通性,通过协议转换、消息解析、消息路由把服务提供者的数据传送到服务消费者。所以,ESB是中心化的,很重,有一定的逻辑,但它的确可以解决一些公用逻辑的问题。
- 去中心化的根本诉求就是扩展性,通过一系列的微小服务来实现整体的业务流程,有效的拆分应用,更在于对扩展性、容错性、DevOps的支持,实现敏捷开发和部署,也就是我们说的微服务。
好了,这么看起来有点太烧脑了,我们通俗一点,很多人认为SOA与微服务是两个东西,但是我始终认为微服务架构是SOA架构的另一种实现方式,准确的来说是彻底去中心化的SOA,它们的分歧在于对服务的治理,是分布还是集中。当然这只是从大的方向上来说,具体的微服务实现细节是很多的,微服务架构首先要关注的不是RPC/ServiceDiscovery/Circuit Breaker这些概念,也不是Eureka/Docker/SpringCloud/Zipkin这些技术框架,而是服务的边界、职责划分,划分错误就会陷入大量的服务间的相互调用和分布式事务中。
所以说,有时候没必要过于抠字眼,本来都是SOA思想的不同体现方式,微服务对我们的思考我觉得更多的是思维上的,对于微服务架构, 技术上不是问题,意识比工具重要。