云原生分布式微服务的基础概念

Posted adventure.Li

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了云原生分布式微服务的基础概念相关的知识,希望对你有一定的参考价值。

一、背景

基本说明

随着时代的发展,用户的需求变化以及软硬件的提升,云原生的时代已来临。大厂面试也除了对计算机基础的考察外,也开始进行架构、设计方面的考察,微服务和分布式理论等也开始成为迈入大厂的必备技能。以下是个人的一些理解。

基础体系

二、详细说明

先从一道经常被讨论的面试题说起:

请你谈谈对微服务的理解以及微服务和分布式的区别是什么?

相信大多数Java程序员被问到该问题可能是能谈出一二,但也可能理解不多,包括鄙人。以下也仅代表个人的一些看法:
微服务:将模块拆分成一个独立的服务单元通过接口来实现数据的交互,强调的是业务的拆分,模块的微小,便于独立部署或开发。对应的一些解决方案或框架,有SpringCloud,可再谈谈具体的一些组件,从组件层面去看待微服务。
分布式:是指将不同的业务分布在不同的地方,更加强调的实现层面,物理上的分布式分布。可列举一些常见的分布式系统,例如Hadoop、Zk、Nacos等。
集群:同一个业务,部署在多个服务器上。

关于具体的对比不展开说,我们先思考一下为什么需要进行分布式或者进行服务的拆分?

理解技术的背后

分布式的背景理解

技术的出现,必然有背后的业务和需求推动。而分布式、微服务则是为了解决复杂问题的一种分治手段。复杂的来源有以下:

  • 用户的对象变化:有起初的科学家数学家到个人PC流行再到现如今的人手的手机,每天产生的信息也是指数级增长。
  • 用户的数量激增:正因为对象发生变化,带来的也是用户数的增长。
  • 软件解决的业务问题变化:架构来源于软件,软件服务于社会、人类。所以说理解架构的演变、云原生、微服务,也离不开人类的需求,也正因为人的需求多变、对于响应速度、容错的要求越来越高,所以说也导致分布式及其保证数据一致性、熔断等概念的提出。

总之,正因为以上的系列推动,出现了分布式的概念,来解决单机无法解决的问题。分布式的思路也很简单,正如人组成团队协作共同完成一项单人难以完成的任务。但与之而来的问题也很多,协作是一件很棘手的事情。因此分布式的概念让Java程序员从面对 OS层面的进程、线程协作 扩大到 架构层面的 服务、模块、业务的协作,甚至由于追求团队效率 还需要去兼顾 人员团队的协作。

  • 对于OS层面的协作,通信都OS内部,不涉及网络,通过管道、共享内存、信号量等机制即可进行通信协作。
  • 而对于分布式的机器间的协作,将会更加麻烦,此时主要需要去解决网络的超时、出错、机器的宕机等问题。一般采用的通信是RPC高性能通信机制,当然也可能通过REST轻量级HTTP通信协议通信,SpringCloud一般采用此办法。

分布式的主要技术

为保证分布式的有效、可用等,提出来一些常见的一致性协议去保证服务的可用性。

关键理论

  • CAP基础理论
  • BASE基本一致性理论

常见协议

  • 2PC
  • 3PC
  • Gossip协议
  • Paxos协议
  • Raft协议
  • ZK的ZAB协议
  • Nacos的Distro协议

详细可参考该篇文章

常见开源分布式系统

  • apache的zookeeper以及hadoop体系
  • alibaba的nacos

微服务的背景理解

微服务一般也会采用分布式进行部署实现,但也不一定就是分布式,微服务更多在于上层的业务服务,分布式和集群更多在于实现层面,微服务的分布式部署降低机器的负载,通过同一微服务的集群的负载均衡实现服务的高可用,都是基础为上层提供设施的体系。

在分布式部分,理解了实现方面的协作,而微服务更多在于业务服务方面的协作。通过微小的服务器,便于独立的进程部署,更好地进行服务间的调用,实现解耦,和提升复用性,极大提升的开发效率和软件的高质量。

微服务的主要技术

  • 服务注册与发现
  • 分布式配置
  • 分布式事务
  • 消息驱动
  • 服务网关
  • 路由、负载均衡
  • 链路追踪、服务治理

Java常见微服务生态

  • SpringCloud(netfflix)

相关介绍

  • SpringCloudAlibaba

DevOps的背景理解

以上从实现、业务方面的协作都有了解决办法,那么现在还有人员的协作还没解决,因此DevOps就主要来解决人员的协作问题。

DevOps:开发+运维,由于容器技术的兴起,运维变得相对更加容易,将运维的部分职责也交给开发人员来处理,提升开发成本及提升效率。
其中的一些敏捷开发方法:例如白板则是共同推进达成目标一致性,更快速、有效的传递需求,任务。

主要方法、实践

  • Jenkins的持续集成:避免重复的编译、部署,方便部署,测试
  • 白板:对开发人员协调达成共同目标,有点锁的味道

    推荐文章

以上是关于云原生分布式微服务的基础概念的主要内容,如果未能解决你的问题,请参考以下文章

spring cloud互联网分布式微服务云平台规划分析--spring cloud服务监控中心

spring cloud互联网分布式微服务云平台规划分析--spring cloud服务监控中心

springboot学习笔记11:分布式微服务springcloud概念区分

Spring Cloud分布式微服务架构图

分享Spring Cloud分布式微服务架构图

分享Spring Cloud分布式微服务架构图