这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
之前很频繁的听过关于微服务这个名词,今天着重学习一下微服务~
主要包括:
微服务架构的由来及原理;
服务治理功能是如何工作的。
微服务架构
微服务架构是当前大多数互联网公司的标准架构。
系统架构的演变历史
- 单体架构
优:性能最高、冗余小;
缺: debug 困难、模块相互影响、模块分工、开发流程
- 垂直应用架构
按照业务线垂直划分
优:业务独立开发维护
缺:不同业务存在冗余、每个业务还是单体,无法复用
- 分布式架构
抽出业务无关的公共模块,分布式独立部署运行。
优:业务无关的独立服务
缺:一个模块服务有问题,可以导致整个系统崩溃;调用关系错综复杂;不同服务依然存在冗余。
- SOA 架构(Service Oriented Architecture)
开始引入“服务”“服务注册”的概念
缺陷:整个系统从设计上依然是中心化的;需要从上至下去设计划分;重构困难。
- 微服务架构
彻底的服务化、自上而下设计
优势:高效的开发迭代效率;故障可控。
缺:治理、运维难度;观测挑战;安全性;分布式系统。
微服务架构概览
微服务架构的核心要素
1. 服务治理
服务注册、服务发现、负载均衡、扩缩容、流量治理、稳定性治理。
2. 可观测性
日志采集、监控打点、链路追踪、日志分析、监控大盘、异常报警。
3. 安全
身份验证、认证授权、访问令牌、审计、传输加密、黑产攻击。
在此之前建议大家恶补一下架构初探、 分布式架构等课程。
微服务架构原理及特征
了解一些基本概念
- 服务 (service)
一组具有相同逻辑的运行实体。
相同逻辑:一个服务它的代码是一样的;
运行实体:即:实例
- 实例 (instance)
一个服务中,每个运行实体即为一个实例。
一个服务就是运行同一段代码的多个实体。
- 实例与进程的关系
实例与进程之间没有必然对应关系,可以一个实例可以对应一个或多个进程 (反之不常见)。
- 集群(cluster)
通常指服务内部的逻辑划分,包含多个实例。
每个逻辑的划分就叫做一个集群(服务包含集群、集群包含实例。)
- 常见的实例承载形式
进程、VM、k8s pod......
- 有状态/无状态服务
服务的实例是否存储了可持久化的数据(例如磁盘文件)
用 HDFS 更深入理解微服务的概念。。
- 服务间通信
对于单体服务,不同模块通信只是简单的函数调用。
对于微服务,服务间通信意味着网络传输。
服务注册及发现
在代码层面,如何调用一个目标服务的地址(ip:port)?
首先由 DNS 引入
解决思路:新增一个统一的服务注册中心,用于存储服务名到服务实例的映射。
有了一个好的服务注册中心后完成服务实例上线及下线过程。
参考文章: 1)【Go微服务】一文入门go-micro