1 微服务架构介绍
1.1系统架构演变历史
单体架构->垂直应用架构-> 分布式架构-> SOA架构-> 微服务架构 单体架构:
特点:所有功能模块在一个单独的应用程序中运行,共享代码和资源。
优点:简单易懂,开发和部署相对容易。
缺点:调试困难,模块之间相互影响,扩展性和可靠性有限。
垂直应用架构:
特点:按照业务功能进行垂直划分,每个应用程序都是单体架构。
优点:减少模块之间的相互影响。
缺点:不同业务功能仍然存在冗余,扩展性和可靠性有限。
分布式架构:
特点:将应用程序的模块部署在不同的计算机或服务器上,并通过网络进行通信和协作。
优点:可扩展性好,可以实现高性能和高可用性。
缺点:调用关系复杂,一个模块的故障可能会导致整个系统的瘫痪。
SOA架构:
特点:基于服务的架构风格,将应用程序划分为一组相互协作的服务。
优点:松耦合和可重用的服务,支持业务功能的灵活组合。
缺点:需要中心化的服务治理和共享的基础设施,复杂性较高。
微服务架构:
特点:将应用程序拆分为一组小型、独立的服务,每个服务具有自己的业务逻辑和独立部署能力。
优点:高效的开发迭代效率,故障可控性,支持灵活的扩展和部署。
缺点:治理和运维的挑战,包括服务注册与发现、可观测性和安全等问题,分布式系统复杂性增加。
1.2微服务架构概览
1.3微服务架构核心要素
服务治理: 服务注册,服务发现:负载均衡 可观测性: 日志采集,日志分析,监控大盘 安全: 身份验证,认证授权,访问令牌
2. 微服务架构原理及特征
2.1 基本概念
在微服务架构中,有一些基本概念需要了解:
服务(Service):是具有相同逻辑的运行实体,每个服务都是独立部署和扩展的。
实例(Instance):在一个服务中,每个运行的实体即为一个实例。一个服务可以有一个或多个实例,实例与进程之间没有必然的对应关系。
集群(Cluster):通常指服务内部的逻辑划分,包含多个实例,通过集群可以实现负载均衡和高可用性。
实例承载形式:服务的实例可以承载在进程、虚拟机(VM)或容器(如Kubernetes中的Pod)中。
有状态/无状态服务:有状态服务的实例存储了可持久化的数据(例如磁盘文件),而无状态服务的实例不存储持久化数据,可以随时替换和扩展。
在微服务架构中,服务之间的通信是通过网络进行的,不同服务之间的调用意味着网络传输。
2.2 服务注册与发现
服务注册与发现是微服务架构中的重要组成部分。它涉及到服务的注册、发现和负载均衡。
服务注册:每个服务在启动时将自己的信息(如主机名、端口号、服务名称等)注册到服务注册中心,使得其他服务能够发现它。
服务发现:其他服务可以通过服务注册中心查询和发现需要调用的服务的实例信息,从而建立连接和进行通信。
负载均衡:服务注册中心可以提供负载均衡的功能,将请求均匀地分发到多个服务实例之间,以实现高可用性和性能的优化。
常见的服务注册与发现工具包括Netflix的Eureka、Consul和ZooKeeper等。
2.3 流量特征
在微服务架构中,流量特征是需要考虑的重要因素之一。
核心服务:微服务架构中的核心服务是具有高频访问和重要性的服务,对于这些服务,需要进行高可用性、负载均衡和故障恢复的设计。
异步通信:微服务之间的通信常常采用异步方式,使用消息队列或事件总线来实现解耦和削峰填谷的效果。
弹性设计:微服务架构中对于故障和异常情况的处理非常重要。采用断路器模式、限流和重试机制等可以增加系统的弹性,提高容错能力。
监控与日志:由于微服务架构中的服务数量较多,需要对每个服务进行监控和日志记录,以便及时发现和解决问题。常见的监控和日志工具包括Prometheus、Grafana和ELK堆栈等。