微服务探索与实践—总述

背景

软件开发是一个不断发展的过程,从当初的面向过程为主到如今的面向对象的开发,软件开发者不断探索与实践更加符合时代发展要求的开发模式与架构思想,而这,也在极大程度上提高了软件开发的效率。

微服务是一种架构模式或者说是架构风格,而架构这个词语,相信有很多人都曾试图为它做出明确的定义,可是很难下,因为软件架构也在不断发展,内涵也在不断得到丰富。只是不变的是,我们需要通过软件架构,根据族组织、业务、技术等因素划分出不同的但可以相互协作的应用系统,使得设计出来的系统具有较高的伸缩性、可维护性以及可扩展性。

三层架构

曾经在与朋友讨论微服务的时候,朋友曾经说过三层架构是不是可以避免在某种程度上因架构设计带来的耦合度过大问题,我跟他说应该很难,因为三层就架构更多的关注是统一系统内的职责划分问题,而架构更多的是关注多套系统。这里的话,顺便提一下三层架构,大家对这种架构应该不会陌生,它主要包括表示层、业务逻辑层以及数据访问层,如下图所示

可以发现,三层架构方式使得各层的关注点更加清晰,但如果随着业务的扩大,三层架构只是延长了系统的生命周期,并不会对系统架构带来太大的改变。这就需要讨论单体系统带来的问题了。

单体系统

三层架构是一种经典的单体应用架构。单体系统有的特点就是,开发、测试、部署都比较简单,以前我所在的公司,因为性能问题,几乎需要花大力气重构系统的时候,却发现只需要再加几台服务器就可以很简单的解决这个问题了,这说明了系统的水平扩张也非常简单。但即便他这么简单,现在也已经不再推荐去做了。

单体系统意味着公司所有的业务逻辑都被整合进去了,想要一个新人快速上手几乎不太可能,同时老员工离职所带来的风险也是不可估量的。随着大量功能的集成,也对未来新需求的继续集成带来了很大的困难,牵一发而动全身,实在让人无可奈何。更重要的是,互联网的快速发展,要求我们要做到快速开发、快速集成、快速上线、快速迭代,而单体应用很难做到这点,因为很多团队都会要求对系统的核心功能进行回归。

所以从架构角度对系统进行拆分就成了一种必要,SOA也随之诞生,本文不会具体讨论SOA,只会简单说明一下SOA关于系统拆分的理念。SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。相对而言,SOA对系统拆分的力度似乎没有太“微”,但是和微服务思想几乎没有什么太大的区别了。

微服务与SOA

微服务与SOA的区别(由于很多场景下,SOA会使用到ESB,放在这里也方便与微服务做更好的比较,多说一句,ESB逐渐被P2P的虚拟总线所替代),如下图所示

通过上图,可以知道微服务与SOA最大的区别在于,SOA使用了ESB来集成基于不同协议的服务之间的交互工作,而微服务去除了中间的管道,以服务化方式进行交互和集成。

  SOA 微服务架构
关注点 关注可重用性的最大化,但服务粒度较大 彻底实现服务器的组件化,服务粒度较小,并关注“上下文边界”
通信协议 (通常会通过ESB调度)支持多种消息协议 使用轻量级协议,推荐使用REST full风格,如HTTP
开发与交付 修改时,由于依赖较大,往往牵扯面很大,交付并不灵活 可以只是基于一套服务,交付快捷灵活
数据存储 可共享数据存储 每个微服务拥有独立的数据存储
部署 使用通用平台 可以不基于通用平台
服务治理 共同的治理和标准 服务微治理,实时生效
趋势 DevOps、持续交付、容器,做的并不是很好 DevOps、持续交付、容器在微服务方面的实践非常的丰富

总的来说,微服务是SOA的一个子集或者是升级版,它是SOA在互联网时代发展的必然进化结果,它有力的促进了其实实施服务架构的实践。

微服务特性

前面有讲过,微服务是一种架构风格,一个大型应用系统有一个或多个微服务组成,系统中的各个微服务可被独立部署,各个微服务之间是松耦合的,每个微服务体现着单一职责原则。它主要有以下特性:

  • 彻底的组件化

    • 彻底的组件化有着极好的灵活性和可替换性,明确了单一职责,它可以在不影响或者极少影响其他业务组件的情况下进行快速迭代与快速交付,也实现了业务的高度内聚
  • 技术的异构性
    • 在微服务架构中可以根据不同的业务特征采用不同的技术方向,有针对性的解决具体的业务问题
  • 独立存储与部署
    • 每个微服务拥有自己的数据库,并部署在不同的平台上
  • 围绕业务组建团队
    • 不同于传统的IT团队,对技能以及职责的区分非常明确,在微服务里,提供以业务为核心,按业务能力组建团队,因此团队成员的技能是跨领域的一体化团队,通常团队不会太大。

写到最后

微服务确实有着无可比拟的优势,但是微服务也带来了很大的缺点:

  • 加大分布式系统的复杂度:随着服务的拆分,原先基于进程内通讯的功能被迁移到了进程间通信或者网络通信,增加了不稳定性;也会存在服务版本的变化必须兼容其他服务的问题,从而导致接口版本过多,存有大量的重复代码
  • 测试压力与运维成本:原先的一个系统被拆分出了很多套微服务,这些都需要增加测试与运维的投入
  • 服务治理与监控也非常复杂,需要有人力的投入

所以,微服务的进行,需要根据现状在做决定,切不可为了拆分而拆分

原文地址:https://www.cnblogs.com/edison0621/p/10503256.html

时间: 2024-10-28 16:04:52

微服务探索与实践—总述的相关文章

微服务探索与实践—服务注册与发现

前言 微服务从大规模使用到现在已经有很多年了,从之前的探索到一步步的不断完善与成熟,微服务已经成为众多架构选择中所必须面对的一个选项.服务注册与发现是相辅相成的,所以一般会合起来思索.其依托组件有很多,比如Zookeeper,Consul,Eureka等等. 本文,我们将探讨服务注册和发现的概念及其使用机制,以使得微服务能够在不知道其确切位置(通常是URL)的情况下消费其他服务.由于本文主要是个人实践的一些总结,总会有不足之处,也希望各位看官帮忙完善.本系列前一篇文章请移步总述 服务注册与发现探

微服务架构与实践及云原生等相关概念

微服务架构与实践 笔记:<微服务架构与实践> 王磊 著 一 单块架构 1 定义:对于这种功能集中.代码和数据中心化.一个发布包.部署后运行在同一进程的应用程序,我们通常称之为单块架构应用,并非物理上的分层. 2 单层架构:数据 逻辑 页面 混合 3 三层架构: 1)表示层:数据显示和用户交互 2)业务逻辑层:业务逻辑处理 3)数据访问层:数据存储访问 4 优势: 比较适合小项目 易于开发:开发简单直接,集中式管理,基本不会重复开发,集成工具适合 易于测试:单进程 易于部署:单项目包,功能都在本

Spring Cloud 微服务设计与实践

整理微服务设计与实践历程,共享给大家. 微服务的描述 The description of microserivce by Martin Fowler : 根据业务模块划分服务种类. 每个服务可以独立部署并且互相隔离. 通过轻量的 API 调用服务. 服务需要保证良好的高可用性. 微服务架构是以专注与单一责任的小功能模块为基础.通过 API 相互通信的方式完成复杂业务系统搭建的一种设计思想. 演变过程 单体架构(Monolithic) -> 垂直架构 -> SOA 架构 -> 微服务架构

(转)微服务框架落地实践之路

http://www.primeton.com/read.php?id=2276&his=1 一.微服务架构产生的背景 近十年中,互联网给我们生活带来了翻天覆地的变化,消费者的生活方式日益数字化,人们可以在任何时间.任何地点利用网络进行购物体验,运用社交媒体进行自我表达,企业也在运用多种技术手段,发挥数字化潜力,改善客户联系,促进企业业务模式的转型.在这种背景下,互联网也好,传统企业也罢,都面临一个共同的需求:面对快速变化的需求,面对业务模式的升级,如何构建出灵活的,可扩展,可重用的系统? 前几

Docker+Kubernetes(k8s)微服务容器化实践

Docker+Kubernetes(k8s)微服务容器化实践网盘地址:https://pan.baidu.com/s/1uVkMsKgfzsJcShlnuLk3ZQ 密码:1i7q备用地址(腾讯微云):https://share.weiyun.com/5ZcsfIX 密码:udrifz Docker官方支持Kubernetes, Kubernetes是容器编排最大赢家,Kubernetes 以其高效.简便.高水平的可移植性等优势占领了绝大部分市场,江湖一哥地位毋庸置疑,脱胎于谷歌的成熟的Borg

从Uber微服务看最佳实践如何炼成?

导读:Uber成长非常迅速,工程师团队快速扩充,据说Uber有2000名工程师,8000个代码仓库,部署了1000多个微服务.微服务架构是Uber应对技术团队快速增长,功能快速上线很出色的解决方案.本文偏向微服务的入门篇,以Uber微服务为例,进行了深入浅出的讲解. 微服务特性 对于微服务没有适当的定义,你可以说它是一个框架,由小型的.独立的可部署的服务组成,执行不同的操作. 微服务专注于单个业务领域,可以作为完全独立的可部署服务,并在不同的技术栈上实现它们. 单体架构和微服务架构区别 在使用微

微服务架构与实践-王磊

(原文地址:http://www.infoq.com/cn/articles/microservice-and-continuous-delivery) 摘选书中节选-微服务与持续交付 十年以前,软件在一年之内的交付次数屈指可数. 过去的十年间,交付的过程一直被不断地优化和改进.从早期的RUP模型.敏捷.XP.Scrum,再到近几年的精益创业.DevOps,都力求能更有效地降低交付过程所耗费的成本并提高效率,从而尽早实现软件的价值. 持续交付是一种软件开发策略,用于优化软件交付的流程,以尽快得到

【读书笔记】微服务架构与实践

一:概述 微服务实在互联网大浪潮下顺势而起的 微服务降低了单个问题的复杂性,但是提高了整体上运维和部署的难度 二:基础篇 提出以下4个问题 神马是微服务 微服务到底怎么发展起来的? 微服务的优势在哪儿里?为什么现在大家都在谈微服务 微服务有不什么不足,或者对使用微服务说有什么挑战? 作为从业者的我们到底要怎么看待微服务,并且如何在实际的工作项目中使用它? 分别针对上面的四个问题,做出解答 什么是微服务? 微服务更像是一种架构模式,不是某种具体的技术.提倡将单一的应用划分为一组小的服务,服务之间相

Docker+Kubernetes(k8s)微服务容器化实践视频课程

 第1章 初识微服务微服务的入门,我们从传统的单体架构入手,看看在什么样的环境和需求下一步步走到微服务的,然后再具体了解一下什么才是微服务,让大家对微服务的概念有深入的理解.然后我们一起画一个微服务的架构图,再从架构上去分析微服务架构的优势和不足. ... 第2章 微服务带来的问题及解决方案分析通过传统服务与微服务对比的方式去学习,如果使用微服务架构会遇到什么问题,这些问题在业内都有什么解决方案.之后我们插了一段SpringBoot和SpringCloud的内容,主要目的是让大家搞清楚它们跟微服