这让维护变得非常困难,因为这需要不同的团队一起协作来做变动,发布或者实现容错。
充分利用微服务是一门科学并且需要一些刻意练习。以下微服务最佳实践和设计原则将帮助你构建松散耦合,分布式和优化的微服务,以实现最佳价值。
10个微服务最佳实践
1.单一责任原则
就像代码中的类一样,它仅仅在单个原因情况下改变,微服务也是采用类似的方式建模。构建可能会改变一个以上的业务这种臃肿的服务是一个坏的实践。
例如:你正在构建用于订购披萨的微服务。你可以基于功能构建下面这些组件,诸如InventoryService,OrderService,PaymentService,UserProfileService,DeliveryNotificationService等。InventoryService仅仅有获取或更新披萨种类或配料库存相关的API,同样的,其他也只会提供对应功能的API。
2.独立的数据存储
如果你的所有微服务都共享一个数据库,这就违背了使用微服务的目的。对这个数据库的任何的改变或者故障都会影响使用该数据库的所有微服务。根据微服务的需要选择正确的数据库,定制化基础设施以及对应数据的存储,并且让你的服务独占它。理想情况下,任何需要访问该数据的其他微服务只能通过拥有写权限的微服务提供的API来访问。
3.使用异步通信实现松散耦合
为了避免构建出一个紧密耦合的组件网格(mesh),可以考虑在微服务之间使用异步通信。
a.对依赖的服务异步调用,如下例子。
例如:有一个服务A依赖服务B的例子。当服务B返回响应消息,服务A再返回成功给调用服务A的调用者。如果调用者对服务B的内容不关心,那么服务A可以异步调用服务B,并且这个时候可以立即返回成功给调用者。
b.一个更好的选择是在微服务通信之间使用事件机制。你的微服务可以发布一个事件消息到消息总线上,可以用来通知一个状态的改变或者一个失败事件,并且任何对该事件感兴趣的微服务都可以获得该消息然后做出相应的处理。
例如:上面提到的披萨订单系统中,当客户的订单被接收到或者订单已经完成以及运输的状态消息都可以使用异步通信给客户发送通知消息。通知服务可以监听订单提交的消息事件然后将相应的通知推送给客户。