这是我参与「第五届青训营」伴学笔记创作活动的第 7 天。
-
微服务架构介绍
-
为什么系统架构需要演进?
互联网的爆炸性发展;硬件设施的快速发展;需求复杂性的多样化;开发人员的急剧增加;计算机理论及技术的发展等原因使得老的架构无法适应。
-
演进历史
-
单体架构:所有逻辑放在一个进程里
-
垂直应用架构:按照业务线垂直划分
-
分布式架构:抽出业务无关的公共模块,公共逻辑的去冗余
-
SOA架构:面向服务,有服务注册中心
-
微服务:彻底的服务化,开发效率高
-
-
微服务架构核心要素:
- 服务治理:服务注册,服务发现等
- 可观测性:日志采集、分析,监控打点,监控大盘,异常报警,链路追踪等
- 安全:身份验证,认证授权等。服务之间的调用必须有认证授权的过程
-
-
基本概念
-
服务:一组具有相同逻辑的运行实体
-
实例:一个服务中,每个运行实体即为一个实例
-
集群:服务内部的逻辑划分,包含多个实例
-
服务包含集群,集群包含实例
-
实例与进程的关系:没有必然的对应关系,可以一个实例对应一个或多个进程,反之不常见
-
常见的实例承载形式:进程,VM,k8s pod
-
有状态/无状态服务:服务实例是否存储了可持久化的数据
-
服务间通信:对单体服务,不同模块通信只是简单的函数调用;对于微服务,服务间通信意味着网络传输;
-
-
服务注册与发现
-
服务注册。
问题:如何指定调用一个目标服务的地址?
-
指定目标服务IP地址端口。不能指定一个固定的地址,在微服务环境中ip地址动态变化。而且一个服务有多个实例,指定一个实例是不行的
-
DNS。 解决以上两个问题,但有以下问题:本地DNS缓存造成延时,负载均衡,域名无法配置端口等
-
注册中心。存储服务名到服务实例的映射
-
-
服务实例上线及下线过程
-
如果直接下线,依然有流量过来,会造成故障
-
先去服务中心,把该服务删掉,过会儿再删实例
-
添加,先把实例启动,进行健康检查,再把实例注册在服务中心
-
-
-
总结
通过学习了解了架构的演进历史,以及微服务的基本概念和服务注册与发现的原理。