服务化与微服务化的本质在于真实世界的映射与专业化分工。微服务化使服务走向了专业化和精细分工,提升效率。
以中国银行为例,通过实现“微服务”,银行的外币兑换窗口成为单独的服务,大大提升了客户办事的效率。这种模式下,服务更加专业化,避免了团队间转换导致的效率损失,减少了客户等待时间,避免了疲倦宕机问题,降低了对团队成员技能的全面要求,使得服务改进更加容易。
微服务并非新兴概念,早在2004年亚马逊就实践了“Two Pizza Team”模式,分解大服务为小服务,使用消息解耦服务间依赖。微服务理念源于2005-2009年间Fred George团队对传统J2EE程序的分解实践。Martin Fowler于2014年3月正式提出“Microservices”的概念。
小烟囱并非真正的微服务,代码库过大不利于维护,团队过大效率低下,难以管理。微服务化的目标是解决代码库过大的问题,团队规模过小或过大都不是理想的微服务状态。团队规模应在6-10人之间,以保持高效协作。
微服务强调独立性,但并非完全分散对象,而是通过合理定义“限界上下文”(Bounded Context)来引导微服务拆分,确保服务间的内聚性。在商品交易中,销售与服务支持为两个“限界上下文”,可分别实现为微服务。服务边界划分需考虑数据的分布与冗余,以提高微服务的合理性。
微服务架构的实施面临挑战,系统可用性、性能与硬件资源消耗需通过技术手段解决。数据独立与否取决于用户体验与技术可行性,集成策略可在服务、JMS或数据库之间选择,以满足实时性需求。
单体应用仍有其价值,其存在反映了技术与实践的多样性。微服务并非唯一途径,其关键在于合理划分服务边界,而不仅仅是技术实现。实现更好的服务效率与用户体验是微服务的核心目标。