什么是微服务?
微服务架构风格是一种将一个单一应用程序ka开发为一组x小型服务的方法,每个服务y运行在自己d的进程中,服务通信采用轻量级通信机制(http)。这些服务we围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,服务可用不同的语言开发,使用不同的数据存储技术。
微服务架构特性:
1.每个微服务可独立运行在自己的进程里
2.一系列独立运行的微服务共同构建起整个体系
3.每个服务为独立的业务开发,一个微服务只关注某个特定的功能,如订单、用户等
4.微服务之间通过轻量的通信机制进行通信,如restapi
5.可以使用不同的语言与数据存储技术
6.全自动的部署机制
微服务架构的优点:
易于开发和维护:一个微服务只会关注一个特定的业务功能,所以它业务清晰、代码量较少。开发和维护单个微服务相对简单。而整个应用是由若干个微服务构建而成的,所以整个应用也会被维持在一个可控状态。
单个微服务启动较快:单个微服务代码量较少,所以启动较快
局部修改容易部署:单体应用只要有修改,就得重新部署整个应用,微服务解决了这样的问题。一般来说,对某个微服务进行修改,z只需要重新部署这个服务即可。
技术栈不受限:在微服务架构中,可以结合项目业务及团队的特点,合理地选择技术栈。
按需伸缩:可以根据需求,实现细粒度的扩展。例如,系统中的某个微服务遇到了瓶颈,可以结合这个微服务的业务特点,增加内存、升级CPU或者是增加节点。
微服务架构的缺点:
运维要求较高:更多的服务意味着更多的运维投入。在单体架构中,只需要保证一个应用的正常运行。而在微服务中,需要保证几十甚至几百个服务的正常运行与协作,这给运维带来了极大的挑战。
分布式固有的复杂性:使用微服务构建的是分布式系统。对于一个分布式系统,系统容错、网络延迟、分布式事务等都会带来巨大的挑战。
接口调整成本高:微服务之间通过接口进行通信。如果修改某一个微服务的API,可能所有使用了该接口的微服务都需要做调整。
重复劳动:很多服务可能会使用到相同的功能,而这个功能并没有达到分解为一个微服务的成都,这个时候,可能各个微服务都会开发这个功能,从而导致代码重复。尽管可以使用共享来解决这个问题(例如可以将这个功能封装成公共组件,需要该功能的微服务引用该组件),但共享库在多语言环境下就不一定行得通了
微服务设计原则:
单一职责原则:一个单元(类、方法或服务等)只应关注整个系统功能中单独、有界限的一部分。
服务自治原则:每个微服务应具备独立的业务能力、依赖与运行环境。在微服务架构中,服务是独立的业务单元,应该与其他服务高度解耦。每个微服务从开发、测试、构建、部署都应当可以独立运行,而不应依赖其他的服务。
轻量级通信机制:微服务之间应该用轻量级的通信机制进行交互。如REST、AMQP、STMOP、MOTT等
微服务粒度:微服务粒度是难点,也常常是争论的焦点。应当使用合理的粒度划分微服务,而不是一味的把服务做小。代码量的多少不能作为微服务划分的依据。因为不同的微服务本身业务复杂性不同,代码量也不同。