我对微服务架构一无所知,因此决定阅读并概述Sam Newman的书《创建微服务》。我认为,对于那些开始涉足这一主题的人来说,它是一个很好的介绍。
微服务
微服务架构的思想基于几个概念:面向主题的设计,连续交付,按需虚拟化,基础架构自动化,小型独立团队和可扩展系统。微服务是一种小型(可以在两周内完全重写)的自治服务,仅执行一项任务。同时,微服务的边界是在业务边界的基础上形成的。
该方法的优点:
- 技术上的异质性是可能的;
- 优雅的退化很容易实现;
- 系统的各个部分独立扩展;
- 独立部署服务;
- 团队之间的责任分担简单。
通过将代码放入库中,似乎可以替换微服务架构。但这只能解决部分问题-技术上的异质性,简单的扩展,独立部署是不可能的。此外,仍然存在无法控制的连接问题。
在某些语言(例如Erlang)中,程序(模块)的各个部分可以独立缩放和部署。但这是该规则的例外。
微服务不是灵丹妙药。它们受到分布式系统的所有问题的困扰。重要的是要学习如何以高质量的方式部署,测试和监视这样的系统。微服务架构并不适合所有公司。
开发架构师
在开发由许多服务组成的系统时,架构师的作用会增加。
. . , , . — . , , , .
— , , .
:
( ) .
— , . , , .
. , . .
( DDD) — .
, , . . , , — .
« », -.
. : , , - . , -.
:
-, , — . , . — . , — .
, «» , , . , - . . , .
, . . «-», .
— . . , ( ). ( ).
, — RPC REST. RPC — , , . REST — , ( REST-).
. - ( ATOM) . , , .
. : , — . -, .
.
— ( 1.5.3 2.0.0) . URI (, /v1/createUser/
, /v2/createUser/
), , HTTP, .
( 1.5.3 2.0.0), — , . , .
, . .
— . , , .
— API-, . , ( ).
— backend-for-frontend (BFF). (, ) API- .
, API-.
(, CMS CRM). . — , API.
. , , .
. — . , , . : ; .
, . — . . , (, , ).
. . :
. , (, ) . (-).
( , , ). . . .
, . , Chef, Puppet Ansible. — , . — , deb-. . , . — .
LXC- — . . Docker — , , Kubernetes.
- , , . , , -. E2e , .
- - — (), (). . — Mountebank.
(e2e) . CI, , . CDC ( ).
- . ( ).
. .
-, .
- : — . . -.
( - ) — . (, , - -). , . , . , .
.
-, , . , .
-, . , (, logstash) (, Kibana) .
( , ) -. , - .
: - .
. , .
. — , , . — , . . , .
, :
- . , - - . , — , .
- HTTP(S) Basic Auth. -, HTTPS, SSL-. -, ( Basic Auth).
- . , — , , .
- . , .
- - (HMAC). , , . ( JWT) . — , .
- API-. , , API-. , , .
. , .
. , IP- . .
. , .
«, , , »
, , , .
— , , - . , .
: , , . . , , .
— (graceful degradation).
— . , - .
— . , , , . , , - .
— , . , , ( ), . . «», , .
, .
— . . .
— . . .
— . . - , .
— , (), . . .
. , .
, -, :
, , .
HTTP . cache-control
expires
ETag . HTTP, , .
. , . , , - . , .
— . ( , , ) . , .
CAP
: , . .
最简单的方法是使用DNS。如果其功能还不够,则可以使用Zookeeper,Consul或Eureka之类的工具。
文献资料
API服务需要记录在案。非常需要将代码和文档连接起来,并且不可能更改一件事。例如,您可以使用Swagger或HAL。
摘要
微服务架构基于以下几个原则:
- 围绕业务概念进行建模;
- 自动化文化;
- 内部实施的隐藏细节;
- 全面分权;
- 独立部署;
- 孤立的故障;
- 综合观察。