微服务探索与实践—总述

背景

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

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

三层架构

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

640?wx_fmt=png

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

单体系统

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

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

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

微服务与SOA

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

640?wx_fmt=png

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


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

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

微服务特性

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

  • 彻底的组件化

    • 彻底的组件化有着极好的灵活性和可替换性,明确了单一职责,它可以在不影响或者极少影响其他业务组件的情况下进行快速迭代与快速交付,也实现了业务的高度内聚

    • 640?wx_fmt=png

  • 技术的异构性

    • 在微服务架构中可以根据不同的业务特征采用不同的技术方向,有针对性的解决具体的业务问题

    • 640?wx_fmt=png

  • 独立存储与部署

    • 每个微服务拥有自己的数据库,并部署在不同的平台上

    • 640?wx_fmt=png

  • 围绕业务组建团队

    • 不同于传统的IT团队,对技能以及职责的区分非常明确,在微服务里,提供以业务为核心,按业务能力组建团队,因此团队成员的技能是跨领域的一体化团队,通常团队不会太大。

    • 640?wx_fmt=png

写到最后

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

  • 加大分布式系统的复杂度:随着服务的拆分,原先基于进程内通讯的功能被迁移到了进程间通信或者网络通信,增加了不稳定性;也会存在服务版本的变化必须兼容其他服务的问题,从而导致接口版本过多,存有大量的重复代码

  • 测试压力与运维成本:原先的一个系统被拆分出了很多套微服务,这些都需要增加测试与运维的投入

  • 服务治理与监控也非常复杂,需要有人力的投入

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

640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/315239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P4097 [HEOI2013]Segment 李超线段树

传送门 文章目录题意:思路:题意: 实现以下两个操作: (1)(1)(1)在平面上加入一条线段。记第iii条被插入的线段的标号为iii (2)(2)(2)给定一个数kkk,询问与直线xkxkxk相交的线段中,交点纵坐标最大的线段的编…

【CF1204D】Kirk and a Binary String【结论题】【LIS】

传送门 题意:给一个01串SSS,求一个等长的01串TTT SSS和TTT所有对应位置的子串最长不下降子序列长度(以下简称LIS\text{LIS}LIS)相同TTT中0的数量尽量多 ∣S∣≤100000|S| \leq 100000∣S∣≤100000 对于一个01串SSS,…

这周,全球首个IT技术全中文免费学习平台诞生了!太惊艳!

本周三的Developer Wednesday为大家揭秘了Microsoft Learn网站的全新学习模式一时间Microsoft Learn圈粉无数如果你正在为错过直播而暴风哭泣等一等,看这里!全程高清回播将为你持续解密这一次你一定不可以再错过了哦!什么是Microsoft Learn&…

【CF1182D】Complete Mirror【树的重心】

传送门 题意:给一棵NNN个结点的树,你需要钦定一个根,使得所有深度相同的点的度数相同。 N≤100000N \leq 100000N≤100000 用脑子想一想,就是根节点直接相连的子树都长得一模一样。 如果根节点度数大于1,我们发现它…

P1989 无向图三元环计数 思维 + 建图

传送门 文章目录题意:思路:题意: 统计无向图中三元环的个数。 思路: 很明显有一种暴力的方法,就是枚举每条边,让后再跑两个点的所有边,可以卡到复杂度O(m2)O(m^2)O(m2)。 我们可以考虑给点之…

十分钟了解Kubernetes

何为Kubernetes?最简单的一句话来概括Kubernetes。它就是一套成熟的商用服务编排解决方案。Kubernetes定位在Paas层,重点解决了微服务大规模部署时的服务编排问题。Kubernetes组件介绍了解Kubernetes都是从Pod开始的。Pod是Kubernetes最小的调度单元,所…

【CF1020C】Election【贪心】

传送门 题意:NNN个人给MMM个党派投票,开始时每个人选择一个党派投票(给定),每个人可以花费一定代价贿赂(每个人给定代价),求让1号党派胜出(票数严格最大)的最…

Codeforces Round #627 (Div. 3) E. Sleeping Schedule dp

传送门 文章目录题意:思路:题意: 给你一天hhh小时,初始时间是000,每天可以使时间aia_iai​或者ai−1a_i-1ai​−1,问最多可以让多少天的时间在[l,r][l,r][l,r]范围内。 思路: 算是个比较简单…

【CF1194E】Count The Rectangles【类扫描线】【单调性】【树状数组】

传送门 题意:给定NNN条与坐标轴平行的线段,保证不垂直的线段没有交点,求一共构成多少个矩形(以线段交点为顶点)。 1≤N≤50001\leq N\leq50001≤N≤5000 显然是个数据结构乱搞题。 直觉告诉我们先枚举一条线段。 假…

.NET Core 的过去、现在和未来

在最新的微软 Build 大会主题网站上,微软.NET 程序经理 Scott Hunter 发表了一篇文章,指出.NET Core 是.NET 的未来。去年,微软就已经确认 Visual Studio Live 中的.NET 框架将会被.NET Core 取代。将.NET Core 作为开源开发技术栈在 2014 年…

Ozon Tech Challenge 2020 (Div.1 + Div.2) C. Kuroni and Impossible Calcul 抽屉原理

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个数组ana_nan​&#xff0c;求∏1≤i<j≤n∣aj−ai∣modm\begin{matrix} \prod_{1\le i<j\le n} |a_j-a_i| \end{matrix}\bmod m∏1≤i<j≤n​∣aj​−ai​∣​modm。 n≤2e5,m≤1e3n\le2e5…

【HAOI2015】按位或【Min-Max容斥】【FWT】

传送门 题意&#xff1a;开始时你有一个数000,每次选出[0,2n−1][0,2^n-1][0,2n−1]中的一个数进行按位或&#xff0c;每个数选中的概率给定。求得到2n−12^n-12n−1的期望操作次数。 1≤n≤201\leq n\leq 201≤n≤20 神仙题 首先发现每一位都是独立的&#xff0c;可以分开考…

Visual Basic 兴衰记

这是一篇暴露年龄的文章。为什么这么说&#xff1f;因为现在年轻的程序员可能没有接触过当年红极一时的 Visual Basic。28 年前的 1991 年 4 月&#xff0c;Microsoft 发布了 Visual Basic 1.0 for Windows&#xff0c;次年 9 月&#xff0c;发布了 Visual Basic 1.0 for DOS。…

Ozon Tech Challenge 2020 (Div.1 + Div.2, Rated) D. Kuroni and the Celebration 交互 + 思维

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一颗树&#xff0c;每次可以询问两个点的lcalcalca&#xff0c;询问次数不能超过⌊n2⌋\left \lfloor \frac{n}{2} \right \rfloor⌊2n​⌋&#xff0c;求它的根。 n≤1e3n\le1e3n≤1e3。 思路&#xf…

【CF1047D】Little C Loves 3 II【构造】【赛瓦维斯特定理】

传送门 题意&#xff1a;给一个NMN \times MNM的空棋盘&#xff0c;每次选取两个曼哈顿距离为3的空格子放上棋子&#xff0c;问最多能放多少个。 1≤N,M≤1e91 \leq N,M \leq 1e91≤N,M≤1e9 暴力讨论 假装N≤MN \leq MN≤M ①N1N1N1 容易得到&#xff0c;详见代码 ②N2N…

函数式编程里的Materialization应该翻译成什么?

Materialization是函数式编程里的一个专业术语, 用于特指函数式编程中查询被实际执行并生成结果的这一过程.首先, 搜了一下中文资料, 暂时没有对该词的中文翻译, CSDN\博客园\阿里云上所有关于它的文档都没有做中文翻译, 直接沿用这个英文单词.难道轮到我来创造这个词的中文翻…

Ozon Tech Challenge 2020 (Div.1 + Div.2) E.Kuroni and the Score Distribution 构造

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 思路&#xff1a; 不难想到&#xff0c;长度为nnn的数组最多的满足条件的三元组序列是1,2,3....,n1,2,3....,n1,2,3....,n&#xff0c;对于每一个位置贡献为i−12\frac{i-1}{2}2i−1​&#xff0c;那么如果m…

【CF1209E】Rotate Columns【状压DP】【位运算】【贪心】

题意&#xff1a;给一个NMN \times MNM的矩阵&#xff0c;可以进行任意多次操作将一列轮换&#xff0c;求每一行的最大值之和的最大值。多组数据。 Easy VersionN≤4N \leq 4N≤4,M≤100M \leq100M≤100 Hard VersionN≤12N \leq 12N≤12,M≤2000M \leq2000M≤2000 看这数据…

Exceptionless(二) - 使用进阶

作者&#xff1a;markjiang7m2原文地址&#xff1a;https://www.cnblogs.com/markjiang7m2/p/11100563.html官网地址&#xff1a;http://letyouknow.net在上一篇文章Exceptionless - .Net Core开源日志框架中就说到如何对Exceptionless进行本地化部署&#xff0c;不过我也跟大家…

Ozon Tech Challenge 2020 (Div.1 + Div.2) F. Kuroni and the Punishment 随机化

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你nnn个数&#xff0c;每次操作可以选择将某个数1,−11,-11,−1&#xff0c;求最少进行多少次操作使得所有数都为正数且gcd>1gcd>1gcd>1。 思路&#xff1a; 考虑gcd2gcd2gcd2的情况&#xff0…