什么是微服务
单体应用架构的局限性
如图所示,该应用就是一个典型的商城单体应用。其中包括了前端界面模板/会员模块/订单模块/商品模块,该应用最终部署的时候会打成一个war包或者作为一个文件夹部署到tomcat应用服务器中。
其实最开始所有的应用都是在单体应用的基础上演变而来。应用开发初期,投入成本比较低,应用并发不大的情况下。需要应用可以快速开发/测试/部署。而单体应用在初期也可以很好的运行,但是随着需求的不断增加,越来越多的开发人员参与到项目中。单体应用开始变得臃肿和难以维护。每次维护升级都有可能引发潜在的bug,新人变得不敢去维护应用。
单体应用最大的问题之一就是扩展性。例如需要增加服务器已解决并发问题,就需要整个应用部署一套。如果应用的瓶颈是订单模块,单体应用就不得不整体部署。导致会员模块/商品模块也要部署,最终浪费了服务器资源。
为了解决单体应用中出现的各类问题,微服务架构开始被大家所关注。我们根据应用中的不同功能模块拆分为多个服务,这些服务可以独立的部署和扩展。每个服务都有自己的进程,相互之间不会影响。这样我们就可以根据每个服务的性能要求去优化针对性的部署和扩容等。
什么是微服务
微服务是一种架构风格,是将一个单一的应用拆分为多个小型的服务,每个服务运行在自己的进程中,服务间采用轻量级的通信机制(HTTP/webservice等)。这些服务围绕业务能力构建并且可以全自动独立部署。服务可以采用不同的语言和存储技术开发。
微服务架构的优点
易于开发和维护:一个微服务只关注一个特定的业务功能,所以它的业务清晰/代码量少。开发和维护单个微服务相对简单。而整个应用是由若干个微服务构建而成,所以整个应用会被维持在一个可控状态。
部署成本低:单个微服务所需要的服务器要求比较低,所以可以合理的控制服务器的性能要求,降低了成本。
技术栈不受限:在微服务中,可以结合不同服务开发团队的技术强项和特点,合理的选择技术栈。
微服务架构的挑战
运维要求较高:由于单体应用拆分为多个微服务。需要同时保证所有的微服务正常运行,运维人员将面临新的挑战。
分布式带来的复杂性:微服务构建的是分布式系统,那么分布式带来的系统容错性/网络延迟/分布式事务都是新的挑战。
重复劳动:多个微服务之间如果没有很好的配合开发,将导致不同团队之间劳动重复的问题。
关注微信公众号(程序员小兔)不定期分享技术