一、什么是微服务
微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。
二、微服务架构特性
1、每个微服务可独立运行在自己的进程里
2、一系列独立运行的微服务共同构建起整个系统
3、每个服务为独立的业务开发,一个微服务只关注某个特定的功能,如:订单管理
4、微服务之间通过一些轻量级的通信机制进行通信,例如:通过RESTful API进行调用
5、可以使用不同的语言与数据存储技术
6、全自动的部署机制
三、微服务的优点与挑战
3.1、优点
1、易于开发和维护
一个微服务只会关注一个特定的业务功能。
2、单个微服务启动较快
单个微服务代码量较少
3、局部修改容易部署
单体应用只要要修改就得重新部署整个应用,微服务解决了这一问题
4、技术栈不受限
语言不受限制
5、按需伸缩
可根据需要,实现细粒度的扩展
3.2、挑战
1、运维成本较高
更多的服务意味着更多的运维投入
2、分布式固有的复杂性
使用微服务构建的是分布式系统,对于一个分布式系统,系统容错、网络延迟、分布式事务等都会带来巨大的挑战
3、接口调整成本高
微服务之间通过接口进行通信,如果修改某一个微服务的API,可能所有使用了该接口的微服务都需要做调整
4、重复劳动
很多服务可能都会使用到相同的功能,而这个功能并没有达到分解为一个微服务的程度。
四、微服务设计原则
4.1、单一职责原则
指的是一个单元(类、方法或者服务等)只应关注整个系统功能中单独、有界限的一部分。(SOLID原则之一)
4.2、服务自治原则
指每个微服务应具备独立的业务能力 、依赖与运行环境。应该与其它服务高度解耦,每个微服务从开发、测试、构建、部署,都应当可以独立运行,而不应该依赖其它的服务
4.3、轻量级通信原则
轻量级的通信机制应具备两点:
1、体量较轻
2、跨语言
微服务架构中,常用的协议有REST、AMQP、STOMP、MQTT等
4.4、微服务粒度
微服务的粒度是难点,也常常是争论的焦点。应当使用合理的粒度划分微服务,而不是一味的把服务做小。
五、微服务架构的实现
不仅需要开发框架的支持,还需要一些自动化的部署工具,以及IaaS、PaaS或CaaS的支持。
开发框架的选择:
可以使用Spring Cloud作为微服务开发框架。当然也可以使用Dubbo等