这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天
本文将着重介绍微服务架构的基本组件、工作原理、流量特征的相关知识
01. 基本概念
- 服务(service) 一组具有相同逻辑的运行实体
- 实例(instance) 一个服务中,每个运行实体即为一个实体
- 实力与进程的关系 实例与进程之间没有必然对应关系,可以一个实例可以对应一个或多个进程(反之不常见)
- 集群(cluster) 通常指服务内部的逻辑划分,包含多个实例。
- 常见的实例承载形式 进程、VM、k8s pod ...
- 有状态/无状态服务 服务的实例是否存储了可持久化的数据(例如磁盘文件)
如果把 HDFS 看作一组微服务
>
服务间通信
对于单体服务,不同模块通信只是简单的函数调用。
对于微服务,服务间通信意味着网络传输。
02. 服务注册及发现
问题
在代码层面.如何指定调用一个目标服务的地址(ip:port)?
hardcode?
服务有多个实例,没法 hardcode (记住一个服务的所有实例都是运行同一份代码)服务实例 ip port本身是动态变化的
// Service A wants to call service B.
client := grpc.NewClient("10.23.45.67:8080")
DNS?
- 本地 DNS 存在缓存,导致延时
- 负载均衡问题
- 不支持服务实例的探活检查
- 域名无法配置端口
- 解决思路 新增一个统一的服务注册中心、用于存储服务名到服务实例的映射。
- 服务实例上线及下线过程
03. 流量特征
- 统一网关入口
- 内网通信多数采用 RPC
- 网状调用链路
总结
- 微服务架构中的基本组件及术语
- 服务注册及发现
- 无损的服务实例上下线流程
- 微服务架构中的基本流量特征
个人总结
微服务架构只是金字塔尖的那一朵小红花,需要下面一层层的 Pass 绿叶来陪衬。实施微服务需要基础设施的自动化(包括自动化构建、测试、部署和监控等),同时也要求开发团队组织架构的调整来适应新的开发模式。软件架构总在不断演进,微服务之后会是 Service Mesh么 ?