微服务拆分是指将一个大型应用程序拆分成独立服务的过程,在微服务拆分时,需要考虑以下6大微服务拆分原则@mikechen
1.单一职责原则
单一职责原则,全称是Single Responsibility Principle,又称单一功能原则,是设计模式六大原则之一。
微服务单一职责原则,是指每个微服务应该专注于解决一个明确定义的业务领域或功能,而不是试图处理多个不相关的功能。
在微服务架构中,单一职责原则的重要性体现在以下几个方面:
1)易于维护
每个微服务专注于特定的功能或业务领域,使得服务的代码相对独立,易于维护。
当需要增加新功能或对某个功能进行修改时,只需关注该微服务,而不影响其他服务的运行。
2)解耦性
如果一个微服务接口有一个以上的职责,这些职责就耦合在了一起,这会导致脆弱的设计。
单一职责原则有助于降低服务之间的耦合度,因为每个微服务只关注一个功能,不会包含与其他功能相关的代码。
所以微服务之间的关联度较低,可以更灵活地独立开发、部署和扩展。
3)更好的团队协作
每个微服务的责任清晰明确,可以由专门的团队负责开发和维护,这种团队的划分也能够促进团队之间的合作和协作,提高开发效率。
2.接口隔离原则
定义微服务之间的接口时,应该遵循接口隔离原则,确保接口足够简洁明了,不包含不必要的功能,减少耦合。
服务通过标准的接口隔离,隐藏内部实现细节,这使得服务可以独立开发、测试、部署、运行,以服务为单位持续交付。
尽量消除对其他服务的强依赖,这样可以降低沟通成本,提升服务稳定性。
3.适当微原则
使用微服务最重要的一点就是,微服务到底多微才算“微”,这个业界也没有一定的标准。
服务越小,微服务的独立性就会越高,但同时,微服务的数量也会激增,管理这些大批量的服务也将会是一个挑战。
所以,微服务也不是越小越好,最好结合服务拆分场景来考虑。
应逐步划分,持续演进,避免服务数量的爆炸性增长。
4.避免影响产品原则
也就是说要一边做产品功能迭代,一边完成服务化拆分。
比如:优先剥离比较独立的边界服务,短信服务之类就是典型可独立的服务。
从非核心的服务出发减少拆分对现有业务的影响,也给团队一个练习、试错的机会。
5.具备可扩展性原则
在拆分微服务时,应该考虑到每个服务的独立扩展性,以满足不同的负载需求。
微服务拆分之后,由于服务是以独立进程的方式部署,所以服务之间通信就不再是进程内部的方法调用而是跨进程的网络通信了。
在这种通信模型下服务接口的定义要具备可扩展性,否则在服务变更时会造成意想不到的错误。
比如:微服务的接口因为升级把之前的三个参数改成了四个,上线后导致调用方大量报错。
针对这种情况,推荐做法服务接口的参数类型最好是封装类,这样如果增加参数就不必变更接口的签名,而只需要在类中添加字段就可以了。
这就是典型的针对微服务接口,具备可扩展性原则的场景之一。
6.容错性原则
在设计微服务时,应该考虑到服务的容错性,以避免单点故障导致整个系统崩溃。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》