SOASOA(Service-OrientedArchitecture,面向服务的架构)是一种高层架构设计理念,通过使用基于网络上通用通信语言的服务接口,让软件组件可以被重用。那么什么是服务呢?所有的业务功能都可以定义为一个服务,即对外提供开放的能力。当其他系统需要使用该功能时,无需定制开发。服务可大可小,可简单可复杂。例如,商品管理可以是一个服务,包括商品基础信息管理、供应商管理、仓储管理等功能;商品基础信息管理也可以作为一个独立的服务,供应商管理也可以作为一个独立的服务。是分为粗粒度服务还是细粒度服务需要根据企业的实际情况来判断。SOA集成了独立部署和维护的服务,并允许它们进行通信和协同工作以构建跨不同系统的软件应用程序。那么他们如何沟通和合作呢?ESB(EnterpriseServiceBus,企业服务总线)将企业中的各种服务连接在一起。就像计算机总线一样,它将计算机的各种设备连接在一起。因为不同的服务是使用不同的技术实现的,所以每个独立的服务都是异构的。如果没有统一的标准,各个异构系统提供的接口是多种多样的。SOA通过ESB来屏蔽异构系统对外提供各种接口方法,从而实现服务之间高效的互联互通。ESB通过使用标准的网络协议(如SOAP、XML、JSON、MQ)开放服务发送请求或访问数据,实现与各种系统的协议转换、数据转换、透明动态路由等功能,无需开发人员必须从头开始进行集成的麻烦。采用SOA架构后,各个服务相互独立运行,甚至不清楚某个服务对其他服务的依赖程度,降低了各个服务之间的依赖和相互影响,实现了松耦合。如果不实现松耦合,某个服务一旦升级,其他依赖它的服务全部失效,肯定不能满足业务需求。微服务微服务(Microservices)是一种软件架构风格,它以专注于单一职责和功能的小型功能块(SmallBuildingBlocks)为基础,采用模块化的方式组合复杂的大型应用程序。功能块使用独立于语言(Language-Independent/Languageagnostic)的API集相互通信。微服务的起源始于PeterRodgers博士在2005年云计算博览会上提出的Micro-Web-Service。services)作为微软软件架构的下一阶段,其核心思想是让服务可以通过类似于Unix管道的访问方式来使用,复杂的服务使用简单的URI来开放接口,任何服务,任何细粒度的都暴露出来。该设计在HP的实验室中实施,具有改造复杂软件系统的能力。2014年,MartinFowler和JamesLewis共同提出了微服务的概念,定义微服务是由单个应用程序组成的小型服务。他们有自己的流程和轻量级处理。服务按业务功能设计,完全自动化。以同样的方式部署,使用HTTPAPI与其他服务通信。同时,服务会使用最小规模的集中管理(如Docker)能力,服务可以用不同的编程语言、数据库等组件来实现。SOA与微服务的比较SOA的服务粒度较粗,而微服务的服务粒度较细。例如,对于电子商务公司,商品管理系统是SOA架构中的一个服务;而如果采用微服务架构,商品管理系统将被拆分成更多的服务,比如商品基础信息管理、供应商管理、仓储管理等更多的服务。服务通信SOA采用ESB作为服务间通信的关键组件,负责服务定义、服务路由、消息转换、消息传递,一般是重量级实现。微服务使用统一的协议和格式,如HTTPRESTful协议、TCPRPC协议,不需要ESB等重量级实现。服务交付SOA对服务交付没有特殊要求,因为SOA更关心与现有系统的兼容性;微服务架构理念要求快速交付,相应需要自动化测试、持续集成、自动化部署、自动化运维等最佳实践。应用场景SOA更适合大型、复杂、异构的企业级系统。这类系统的典型特征是很多系统已经发展了很多年,每个服务都是异构的。比如使用不同的企业级技术,有的是内部开发的,有的是外部采购的。完全重新发明轮子或进行大规模优化是不可能的。和重构。因为成本和影响太大,只能通过兼容的方式来处理,ESB承担了兼容的任务。微服务更适合快速、轻量级、基于Web的互联网系统。此类系统的业务瞬息万变,需要快速试用和交付。同时,它们基本都是基于Web的,虽然开发技术可能差异很大(例如Java、.NET、PHP等),但对外接口基本都是提供HTTPRESTful接口,并没有在接口层需要考虑类似SOA的ESB的处理。还是有一些区别的。为了便于理解和记忆,归纳为下表:SOA微服务服务粒度粗粒度细粒度业务划分方式水平多层垂直业务划分部署方式整体部署独立部署通信方式采用重量级通信方式,ESB作为一个服务相互通信的角色使用轻量级的通信方式,比如HTTPRESTful服务交付慢速交付块应用场景庞大、复杂、异构的企业级系统快速、轻量级、基于web的互联网系统在这里已经看到了,你而我一定是有缘,留下你的喜欢和关注,你日后必成大器。
