这是我参与「第五届青训营 」笔记创作活动的第5天
前言
学习web服务时,无论使用的是Java还是Go,总是会听微服务的声音。那么微服务究竟是什么呢,本文以初学者的视角来进行解读。
微服务的架构优势
- 我们所说的微服务更多是架构上的概念。系统架构不断演变,由最初的单体架构、垂直应用架构不断发展为分布式架构、SOA架构、微服务架构等。为了迎合复杂的业务需求,庞大的用户量。大型互联网公司一般都采用的是微服务架构。但是这也并不意味着微服务架构就是架构演变的最终形态,架构的演变仍然是动态发展的。
- 分布式架构抽取了业务无关的公用模块,面临的缺点是一个服务模块挂掉,可能会引起整个系统的瘫痪,并且调用关系过于复杂,不同服务之间依然有冗余。SOA架构是面向服务的,但是整个系统设计是中心化的,需要从上到下去设计、重构困难。也是从SOA架构来引入了服务、服务注册的概念。微服务架构可以说是由SOA架构演变而来,是彻底的服务化。
- 微服务架构从下而上设计,有着高效的开发效率,并且故障可控。但也面临着运维难度增加、安全、分布式系统本身的复杂性等。 -微服务架构
微服务原理和特征
- 基本概念
服务:一组具有相同逻辑的运行实体
实例:一个服务中,每个运行实体即为一个实例
集群: 服务内部的逻辑划分,包含多个实例 - 服务注册
微服务自然要去调用其他服务的地址。写死在代码里自然是万万不可的,DNS则存在着延时问题、不能指定端口等问题。因此我们引入了一个统一的服务注册中心,用于储存服务名到服务实例的映射
服务治理
- 服务发布
服务发布实际上一个比较复杂的问题。蓝绿部署以集群为单位进行上线,简单易用并且稳定,但是需要双倍的资源。灰度发布则是以实例为单位进行上线,不必占用双倍资源了,但是会面临着回滚难度大、基础设施要求高的问题。 - 流量治理
微服务架构下,可以基于地区、集群、实例、请求等不同维度,对端对端的流量进行精确的控制。 - 负载均衡
负载均衡负责分配请求在每个下游实例上的分布。常见的负载均衡算法由轮询,随机,源地址哈希,加权轮询等等。 - 稳定性治理
分为限流、熔断、过载保护、降级等等。
思考与总结
其实学这门课之前,对分布式、微服务这些概念其实十分陌生,只熟悉单体架构(其实根本没有架构的概念)。学习完后对微服务架构有了初步的认识,也对架构是什么有了初步的理解。收获颇多,继续学习!