微服务基础概念

1 系统架构的演变
随着互联网的发展,网站应用的规模不断扩大,常规的应用架构已无法应对,分布式服务架构以及微服
务架构势在必行,亟需一个治理系统确保架构有条不紊的演进。

1.1 单体应用架构
Web应用程序发展的早期,大部分web工程(包含前端页面,web层代码,service层代码,dao层代码)是将
所有的功能模块,打包到一起并放在一个web容器中运行。

比如搭建一个电商系统:客户下订单,商品展示,用户管理。这种将所有功能都部署在一个web容器中
运行的系统就叫做单体架构。

优点:

  • 所有的功能集成在一个项目工程中
  • 项目架构简单,前期开发成本低,周期短,小型项目的首选。

缺点:

  • 全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
  • 系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。
  • 技术栈受限。

1.2 垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提
升效率

优点:

  • 项目架构简单,前期开发成本低,周期短,小型项目的首选。
  • 通过垂直拆分,原来的单体项目不至于无限扩大
  • 不同的项目可采用不同的技术。

缺点:

  • 全部功能集成在一个工程中,对于大型项目不易开发、扩展及维护。
  • 系统性能扩展只能通过扩展集群结点,成本高、有瓶颈。

1.3 分布式SOA架构
1.3.1 什么是SOA
SOA 全称为 Service-Oriented Architecture,即面向服务的架构。它可以根据需求通过网络对松散耦合
的粗粒度应用组件(服务)进行分布式部署、组合和使用。一个服务通常以独立的形式存在于操作系统进
程中。
站在功能的角度,把业务逻辑抽象成可复用、可组装的服务,通过服务的编排实现业务的快速再生,目
的:把原先固有的业务功能转变为通用的业务服务,实现业务逻辑的快速复用。
通过上面的描述可以发现 SOA 有如下几个特点:分布式、可重用、扩展灵活、松耦合
1.3.2 SOA架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定
的服务中心,使前端应用能更快速的响应多变的市场需求 。

优点:

  • 抽取公共的功能为服务,提高开发效率
  • 对不同的服务进行集群化部署解决系统压力
  • 基于ESB/DUBBO减少系统耦合

缺点:

  • 抽取服务的粒度较大
  • 服务提供方与调用方接口耦合度较高

1.4 微服务架构

优点:

  • 通过服务的原子化拆分,以及微服务的独立打包、部署和升级,小团队的交付周期将缩短,运维成本也将大幅度下降
  • 微服务遵循单一原则。微服务之间采用Restful等轻量协议传输。

缺点:

  • 微服务过多,服务治理成本高,不利于系统维护。
  • 分布式系统开发的技术成本高(容错、分布式事务等)。

1.5 SOA与微服务的关系
SOA( Service Oriented Architecture )“面向服务的架构”:他是一种设计方法,其中包含多个服
务, 服务之间通过相互依赖最终提供一系列的功能。一个服务 通常以独立的形式存在与操作系统进程
中。各个服务之间 通过网络调用。
微服务架构:其实和 SOA 架构类似,微服务是在 SOA 上做的升华,微服务架构强调的一个重点是“业务需
要彻底的组件化和服务化”,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。
这些小应用之间通过服务完成交互和集成

功能 SOA 微服务
组件大小 大块业务逻辑 单独任务或小块业务逻辑
耦合 通常松耦合 总是松耦合
公司架构 任何类型 小型、专注于功能交叉团队
管理 着重中央管理 着重分散管理
目标 确保应用能够交互操作 执行新功能、快速拓展开发团队

2 分布式核心知识

2.1 分布式中的远程调用

在微服务架构中,通常存在多个服务之间的远程调用的需求。远程调用通常包含两个部分:序列化和通
信协议。常见的序列化协议包括json、xml、hession、protobuf、thrift、text、bytes等,目前主流的
远程调用技术有基于HTTP的RESTful接口以及基于TCP的RPC协议。
(1)RESTful接口
REST,即Representational State Transfer的缩写,如果一个架构符合REST原则,就称它为RESTful架构。
资源(Resources
所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图
片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,
每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地
址或独一无二的识别符。REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资
源"(Resources)的"表现层"。
表现层(Representation
"资源"是一种信息实体,它可以有多种外在表现形式。我们把"资源"具体呈现出来的形式,叫做它的"表
现层"(Representation)。比如,文本可以用txt格式表现,也可以用HTML格式、XML格式、JSON格
式表现,甚至可以采用二进制格式;图片可以用JPG格式表现,也可以用PNG格式表现。URI只代表资源
的实体,不代表它的形式。严格地说,有些网址最后的".html"后缀名是不必要的,因为这个后缀名表示
格式,属于"表现层"范畴,而URI应该只代表"资源"的位置。

状态转化(State Transfer
访问一个网站,就代表了客户端和服务器的一个互动过程。在这个过程中,势必涉及到数据和状态的变
化。互联网通信协议HTTP协议,是一个无状态协议。这意味着,所有的状态都保存在服务器端。因
此,如果客户端想要操作服务器,必须通过某种手段,让服务器端发生"状态转化"(State Transfer)。
客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:
GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源
(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。
综合上面的解释,我们总结一下什么是RESTful架构:
每一个URI代表一种资源;
客户端和服务器之间,传递这种资源的某种表现层;
客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。
(2)RPC协议
RPC(Remote Procedure Call ) 一种进程间通信方式。允许像调用本地服务一样调用远程服务。RPC
框架的主要目标就是让远程服务调用更简单、透明。RPC框架负责屏蔽底层的传输方式(TCP或者
UDP)、序列化方式(XML/JSON/二进制)和通信细节。开发人员在使用的时候只需要了解谁在什么
位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。

(3)区别与联系

比较项 RESTful RPC
通讯协议 HTTP 一般使用TCP
性能 略低 较高
灵活度
应用 微服务架构 SOA架构

1、HTTP相对更规范,更标准,更通用,无论哪种语言都支持http协议。如果你是对外开放API,例如
开放平台,外部的编程语言多种多样,你无法拒绝对每种语言的支持,现在开源中间件,基本最先支持
的几个协议都包含RESTful

2、 RPC 框架作为架构微服务化的基础组件,它能大大降低架构微服务化的成本,提高调用方与服务提
供方的研发效率,屏蔽跨进程调用函数(服务)的各类复杂细节。让调用方感觉就像调用本地函数一样
调用远端函数、让服务提供方感觉就像实现一个本地函数一样来实现服务。

2.2 分布式中的CAP原理
现如今,对于多数大型互联网应用,分布式系统(distributed system)正变得越来越重要。分布式系
统的最大难点,就是各个节点的状态如何同步。CAP 定理是这方面的基本定理,也是理解分布式系统的
起点。
CAP理论由 Eric Brewer 在ACM研讨会上提出,而后CAP被奉为分布式领域的重要理论。分布式系统的
CAP理论,首先把分布式系统中的三个特性进行了如下归纳:

Consistency(一致性):数据一致更新,所有数据的变化都是同步的
Availability(可用性):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求
Partition tolerance(分区容忍性):某个节点的故障,并不影响整个系统的运行

通过学习CAP理论,我们得知任何分布式系统只可同时满足二点,没法三者兼顾,既然一个分布
式系统无法同时满足一致性、可用性、分区容错性三个特点,所以我们就需要抛弃一样:

选 择 说 明
CA 放弃分区容错性,加强一致性和可用性,其实就是传统的关系型数据库的选择
AP 放弃一致性(这里说的一致性是强一致性),追求分区容错性和可用性,这是很多分布式
系统设计时的选择,例如很多NoSQL系统就是如此
CP 放弃可用性,追求一致性和分区容错性,基本不会选择,网络问题会直接让整个系统不可

需要明确一点的是,在一个分布式系统当中,分区容忍性和可用性是最基本的需求,所以在分布是系统
中,我们的系统最当关注的就是A(可用性)P(容忍性),通过补偿的机制寻求数据的一致性 。

原文地址:https://www.cnblogs.com/dalianpai/p/12254735.html

时间: 2024-11-08 10:39:14

微服务基础概念的相关文章

微服务基础概念认知总结

由于从未使用过Spring Cloud.Dubbo等微服务框架,所以只能不断地从微服务基础知识出发,不让自己局限于某一种工具框架上.以下知识摘自一些自己看过的微服务相关的书上,还有一些自己对微服务的理解. 单体应用存在的问题 复杂性高 单体应用项目包含的模块非常多.模块的边界模糊.依赖关系不清楚.代码质量层次不齐.混乱地堆砌在一起.每次修复BUG或者新增功能,涉及的部分比较多,存在着隐含的缺陷,有可能一小部分的改变会影响到其他功能. 技术债务 虽然时间的推移.需求变更和人员的更迭,会逐渐形成应用

掌握系列之微服务-1.概念

掌握高并发.高可用架构 第四章 微服务 本章介绍微服务的概念.为何要引入微服务.微服务会引发的问题,以及流行的微服务架构等. 第一节 微服务基础 微服务 1. 微服务的定义 Martin Flower在2014年的一篇论文<MicroServices>中提出的,在某种程度上微服务是面向服务的架构SOA继续发展的下一步,它是一些协同工作的小而自治的服务,很小,专注于做好一件事,具有自治性,其主要特点是: 与组织结构相匹配,每个服务可按照业务.团队进行划分,使小的团队在小的代码库上高效工作 可组合

Spring-cloud微服务实战【一】:微服务的概念与演进过程

本文是一个系列文章,主要讲述使用spring-cloud进行微服务开发的实战.在开始之前,我们先说一下从传统的单一部署架构到微服务的发展过程,以便让童鞋们更好的理解微服务的概念与演进过程. 1.单体架构   在互联网时代早期,彼时还没有微服务的概念,企业开发应用,将所有功能都集中到一个应用中,典型的特征是tomcat + servlet + jsp + mysql,然后将应用打包成一个war包发布. ![file](https://img2018.cnblogs.com/blog/1924225

http与www服务基础概念详解

dns解析过程: dns cache command:ipconfig /displaydns   -->显示DNS CACHE内容ipconfig /flushdns     -->清除DNS CACHE windows hosts路径:C:\Windows\System32\drivers\etc\hosts http协议简介:HTTP协议,全称HyperText Transfer Protocol,中文名称超文本传输协议,是互联网上应用最为广泛的一种网络协议.所有的www都必须遵守这个标

第四十天-http与www服务基础概念详解

1.1 http协议简介 HTTP协议,全称HyperText Transfer Protocol,中文名称超文本传输协议,是互联网上应用最为广泛的一种网络协议.所有的www都必须遵守这个标准,设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法.    (HTTP(HyperText Transfer Protocol,超文本传输协议)是在万维网上进行通信时所使用的协议方案,HTTP有很多应用,但是最著名的是应用于WEb服务器之间的双工通信)    WWW(World Wide W

Linux的DNS服务基础概念

DNS的查询方式 1.递归 递归的意思就是 客户端只需要问一次,如果上级DNS服务器不知道,那么上级DNS服务器会自己去找自己的DNS服务器. 2.迭代 迭代的意思就是客户端需要自己一个DNS服务器 一个DNS服务器自己去问. DNS名称解析方式 正向解析  输入域名找IP 方向解析 输入IP找域名 主备DNS服务器 备DNS服务器的DNS记录需要不停的跟主DNS服务器数据库进行同步. 对DNS记录的改变只能在主DNS服务器上. "复制"操作的实施方式: 序列号:也是数据库的版本号,每

【微服务架构】SpringCloud之Eureka(服务注册和服务发现基础篇)(二)

上篇文章讲解了SpringCloud组件和概念介绍,接下来讲解一下SpringCloud组件相关组件使用.原理和每个组件的作用的,它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路有(Zuul),客户端负载均衡(Ribbon),Archaius,Turbine等  今天学习的是Eureka即注册中心 一:Eureka简介 Eureka是Spring Cloud Netflix的一个子模块,也是核心模块之一.用于云端服务发现,一个基于REST的服务,用于定位服务,以实

【转载】微服务,我们需要哪些基础框架?

微服务(MicroServices)架构是当前互联网业界的一个技术热点,圈里有不少同行朋友当前有计划在各自公司开展微服务化体系建设,他们都有相同的疑问:一个微服务架构有哪些技术关注点(technical concerns)?需要哪些基础框架或组件来支持微服务架构?这些框架或组件该如何选型?笔者之前在两家大型互联网公司参与和主导过大型服务化体系和框架建设,同时在这块也投入了很多时间去学习和研究,有一些经验和学习心得,可以和大家一起分享. 服务注册.发现.负载均衡和健康检查 和单块(Monolith

.NET Core微服务系列基础文章

今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有了一个感性的认识.虽然只做了两个月的开发工作,但是对微服务架构的兴趣却没有结束,又因为自己的.NET背景(虽然对.NET的生态有点恨铁不成钢),想要探索一下在.NET平台下的微服务架构的可行性,也准备一些材料作为分享的素材. 幸运的是,在.NET Core首届在线峰会上,看到了很多前辈的分享,也增强了自己要摸索和实践.NET Co