微服务的设计原则、特征

it2023-05-17  75

设计原则

 

1. 服务的单一职责原则(SOLID设计原则)

一个单元、类、方法,甚至是一个服务,应当只有一件事要做。多个模块共享职责或者单个模块涉及多种职责是不推荐的。

 

2. 自包含原则

微服务是自托管、独立部署、自治的服务。绑定了所有的依赖:包依赖、运行环境、容器等等。

传统的应用我们打包成war或者ear包,部署到JavaEE服务器上,而微服务打包成jar,包含所有的依赖,独立运行为一个java进程。

 

特征

 

1. 服务是一等公民

所有的服务均采用暴露为API节点的方式展现,内部具体的逻辑、实现方式对外都是抽象隔离的。

2. 服务的交互

最为广泛接受的通信方式是JSON+REST。

3. 松耦合

服务之间往往是通过输入输出事件来进行通信的,如消息、HTTP、REST。

4. 服务抽象

不仅仅是对具体实现的抽象,而且包括对外的抽象隔离。

5. 服务复用

适合多场景下各种模式下的服务消费。

6. 无状态

本身不维护状态,如有需要,则会在数据库中或内存中维护。

7. 服务是可发现的

服务会将自己的存在广播出去,以便于被发现。当服务挂掉,则会在微服务体系中清除。

8. 服务间的互操作性

通常采用消息或者Http请求方式进行互操作,如REST/JSON、Protocol Buffer等

9. 可组合型

多个服务编排起来共同提供服务。

 

微服务是轻量的

 

从web服务器的选择到托管容器的选择,微服务的托管是轻量级、便携式、容器化的。

 

微服务对实现方式的容忍性  

可以使用相同语言的不同的版本,也可以是不同的语言来实现不同的服务,服务之间是不会产生影响的。

 

服务自治

 

服务从开发到构建、测试、部署、扩展等等,都是自治的。

开发阶段:采用版本控制(Git)、持续集成(Jenkins)等实现自治

测试阶段:采用Selenium等工具实现自测。

基础设施:采用容器(Docker)集成实现自治。

发布阶段:采用Chef或Puppet发布。

配制信息管理:Ansible可以用于管理配置。

自动部署:Spring Cloud、Kubernetes、Mesos、Marathon均可用于部署。

 

生态

 

DevOps、统一日志管理、服务注册、API网关、广泛的监控、服务路由、流程控制机制

 

 

微服务是分布式的,也是动态的

 

分布式数据及逻辑,去中心化的管理。

每个微服务有自己的数据和逻辑:

SOA在处理情景:

将Shopping Logic的实现逻辑在ESB中全部实现,借助于Customer、Product、Order服务的帮助。

在微服务中,Shopping Logic视为相同地位的服务,服务之间同等调用。

 

SOA的服务注册采用的是静态注册方式,而微服务采用的是动态注册。

 

Antifragility && Fail Fast && Self-healing

 

通过不断解决当前系统的问题,不断健壮当前的代码。

Fail Fast原则保证了如果当前服务出现了差错,下游服务不会产生额外的压力,他的原则不是去避免错误,而是关注如何在出现错误时尽快恢复。

自愈就是吸取错误的教训,尽快从错误中学会避免错误的方法。

 

最新回复(0)