这些年互联网的快速发展,分布式,微服务的概念风靡整个行业。在企业中IT的架构,从过去的单体应用架构发展到现在广为人知的微服务架构。不说别的,现在出去面试都不好意思说自己不知道微服务。微服务是一种架构风格,将我们的业务拆分若干个服务,为我们的开发带来了极大的便利。过去,架构是从单体应用架构-->分布式架构-->微服务发展。
这种架构在老的JAVA web项目中还存在,就是一套代码撸到底。就是项目中从controller到service再到dao层,不进行任何的拆分,所有的代码都堆积在一个项目中。这样打出来的war巨大无比,启动都要费好多时间。比如下面的例子:
这样就把供应链所有的的功能业务代码放在项目中,可想而知,代码量有多大。不过这种架构方式既有缺点又有优点优点:
分布式架构从业务的不同进行拆分,将我们的单体应用拆分多个业务服务系统,每个服务系统就是一个单体应用,他们之间通过商定好的api进行调用。例如将上面的例子拆分,将庞大的供应链系统拆分成采供管理系统,资产管理系统,仓储管理系统:
这种拆分,大大降低了代码的耦合度,提高了服务的可用性。从原来一个大项目重新分配任务小组,每个小组负责自己的业务项目,业务服务之间通过api调用,每个服务模块运行在不同的主机上。当然这种分布式架构一下子表现出的优点也表现出缺点。优点:
其实90%的微服务架构就是分布式架构一种延申。微服务的概念最早源于Martin Fowler发表的一篇《Microsevices》。这种微服务按照业务的功能继续拆分成相互独立的微服务,各个微服务之间是松耦合的,也是通过远程协议进行调用。例如我们将采供管理再一次拆分,将采供管理系统拆分成需求管理,采购管理,入库管理:
这种拆分方式将分布式应用架构更加细分化。各个微服务之间通过各种远程协议进行同步/异步调用,各个微服务之间也是独立部署。当然这种服务架构也同样。除了具备分布式架构的缺点外,还有:
市面上支持微服务的技术栈是多种多样的,但是按照现在比较流行的,无非就是springcloud以及dubbo方案。springcloud是spring社区下的项目,提供了完整的落地方案,包括服务发现,网关,配置中心,链路跟踪等。而dubbo是阿里巴巴基于java分布式服务治理框架,但是它没有提供完整的解决方案,而是专注于RPC领域。两者技术选型对比:
当然了,我们在实际中不能光是微服务而微服务,要根据具体场景来选型。选择适合自己业务的架构,才是最好的架构。
以上是我本人对应用架构的理解,如果有不对之处,证明本人学业不精,还望各位理解谅解。
本人水平有限,难免有错误或遗漏之处,望大家指正和谅解,提出宝贵意见,愿与之交流。