赞
踩
傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波
单体应用,由一个单一的Java WAR
(Web Application Archive)文件构成。随着时间的推移,这个文件变成了一个庞大的、复杂的应用程序。,已成为“泥球模式
" (the Big Ball of Mud Pattern, www.laputan.org/mud/)的一个典型例子。“随意架构的、庞大的、草率的、布满了胶带和线路,如同意大利面条一般的代码丛林
”。
软件交付的步伐已经放缓。更糟糕的是,应用程序是使用一些日益过时的框架编写的。
FTGO
应用程序是一个典型的分层模块化企业级Java应用
。FTGO应用程序拥有一个六边形的架构。在这个六边形中,应用程序的核心是业务逻辑组件
。在业务逻辑外围是各种用来实现用户界面和与外部服务集成的适配器。
业务逻辑
由包含了服务
和领域对象
的模块
组成,一些典型的模块包括OrderManagement, Delivery Management, Billing和Paymentse。若干适配器用来完成与外部系统的对接工作,一些是入站( inbound)适配器,它通过调用业务逻辑来处理各类请求,包括REST API和Web用户界面适配器。其他是出站(outbound)适配器.
读完这本书后,你会理解和掌握如下知识:
你也会掌握如下技术:
这个模型描述了扩展一个应用程序的三种维度: X、Y和Z
,
在多个实例之间实现请求的负载均衡,X轴扩展是扩展单体应用程序的常用方法。
x轴扩展的工作原理。在负载均衡器之后运行应用程序的多个实例。负载均衡器在N个相同的实例之间分配请求。这是提高应用程序吞吐量和可用性的好方法。
根据请求的属性路由请求Z轴扩展也需要运行单体应用程序的多个实例,但不同于X轴扩展,每个实例仅负责数据的一个子集。
Z轴扩展的工作原理。置于前端的路由器使用请求中的特定属性将请求路由到适当的实例。例如,应用程序可能会使用请求中包含的userId来路由请求。在这个例子中,每个应用程序实例负责一部分用户。该路由器使用请求Authorization头部指定的user1d来从N个相同的应用程序实例中选择一个。对于应用程序需要处理增加的事务和数据量时, Z轴扩展是一种很好的扩展方式。
根据功能把应用拆分为服务,X轴和Z轴扩展有效地提升了应用的吞吐量和可用性,然而这两种方式都没有解决日益增长的开发问题和应用复杂性。为了解决这些问题,我们需要采用Y轴扩展,也就是功能性分解。丫轴扩展把一个单体应用分成了一组服务
服务本质上是一个麻雀虽小但五脏俱全的应用程序,它实现了一组相关的功能,例如订单管理、客户管理等。服务可以在需要的时候借助X轴或Z轴方式进行扩展。例如,订单服务可以被部署为一组负载均衡的服务实例。
我对微服务架构的概括性定义是:把应用程序功能性分解为一组服务的架构风格。请.注意这个定义中并没有包含任何与规模有关的内容。重要的是,每一个服务都是由一组专注的、内聚的功能职责组成。
模块化是开发大型、复杂应用程序的基础。微服务架构使用服务作为模块化的单元。服务的API为它自身构筑了一个不可逾越的边界,你无法越过API去访问服务内部的类,这与采用Java包的单体应用完全不同。因此模块化的服务更容易随着时间推移而不断演化。微服务架构也带来其他的好处,例如服务可以独立进行部署和扩展。
微服务架构的一个关键特性是每一个服务之间都是松耦合的,它们仅通过API进行通信。实现这种松耦合的方式之一,是每个服务都拥有自己的私有数据库。对于一个线上商店来说, Order service拥有一个包括ORDERS表的数据库, customer Service服务拥有一个包含CUSTOMERS表的数据库。在开发阶段,开发者可以修改自己服务的数据库模式,而不必同其他服务的开发者协调。在运行时,服务实现了相互之间的独立。服务不会因为其他的服务锁住了数据库而进入堵塞的状态。
微服务架构有如下好处:
微服务架构的主要弊端和问题如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。