设计微服务的最佳实践

你是否曾想过,什么是微服务?以及大规模的互联网行业,例如社交,电商,物流,金融等领域,如何使用微服务构建互联网应用以满足用户需求。

要了解微服务是什么,你必须了解如何将单体应用程序,拆解为独立打包和部署的微型应用程序。本文章将帮助你清晰化的理解,开发者如何根据需求使用微服务来构建他们的应用程序。

下面,从以下几个维度进行阐述

为何选择微服务? 

什么是微服务? 

微服务架构的功能

微服务架构的优点 

设计微服务的最佳实践 

1,为何选择微服务? 

现在,在我介绍微服务之前,让我们看看在微服务之前流行的架构,即单体架构。

通俗地说,您可以说它类似于一个大容器,在这个容器中,应用程序的所有软件组件被紧密地打包并部署在一起。

罗列一下单片架构的挑战:


不灵活 - 单片应用程序无法使用不同的技术构建

不可靠 - 即使系统的某个功能不起作用,整个系统也不起作用

不可扩展 - 由于每次需要更新应用程序时都无法轻松扩展应用程序,因此必须重建整个系统

妨碍持续开发 - 无法同时构建和部署应用程序的多个功能

缓慢的开发 - 单体应用程序的开发需要花费大量的时间来构建,因为每个功能都必须一个接一个地构建

不适合复杂的应用程序 - 复杂应用程序的功能具有紧密耦合的依赖关系

上述挑战是导致微服务发展的主要原因。

2,什么是微服务? 

微服务,又称微服务架构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合。

在微服务架构中,每个服务都是独立的,并实现单一业务功能。

传统架构与微服务架构之间的差异

以电子商务网站为例,了解它们之间的差异。

我们在上图中观察到的主要区别是,所有功能最初都在共享单个数据库的单个实例下。 但是,通过微服务,每个功能都被分配了不同的微服务,处理自己的数据,并执行不同的功能。


现在,让我们通过查看其架构来了解有关微服务的更多信息。请参考下图:


微服务架构

1,来自不同设备的不同客户端尝试使用不同的服务,如搜索,构建,配置和其他管理功能

2,所有服务都根据其域和功能分开,并进一步切分成各个微服务

3,这些微服务有自己的负载均衡器和执行环境来执行它们的功能,同时在自己的数据库中捕获数据

4,所有微服务都通过无状态服务器(REST或消息队列)相互通信

5,微服务在服务发现中心的帮助下获取其通信路径,并执行自动化,监控等操作功能

6,然后,微服务执行的所有功能都通过API网关传达给客户端

7,所有内部点都从API网关连接。因此,任何连接到API网关的人都会自动连接到整个系统

现在,让我们通过查看其功能来了解有关微服务的更多信息。

3,微服务功能 


解耦 - 系统内的服务很大程度上是分离的。因此,整个应用程序可以轻松构建,更改和扩展

组件化 - 微服务被视为可以轻松更换和升级的独立组件

业务能力 - 微服务非常简单,专注于单一功能

自治 - 开发人员和团队可以彼此独立工作,从而提高速度

持续交付 - 通过软件创建,测试和审批的系统自动化,允许频繁发布软件

职责 - 微服务不关注作为项目的应用程序。相反,他们将应用程序视为他们负责的产品

分散治理 - 重点是使用正确的工具来做正确的工作。这意味着没有标准化模式或任何技术模式。开发人员可以自由选择最有用的工具来解决他们的问题

敏捷 - 微服务支持敏捷开发。任何新功能都可以快速开发并再次丢弃。

4,微服务的优点 

独立开发 - 所有微服务都可以根据各自的功能轻松开发

独立部署 - 基于其服务,可以在任何应用程序中单独部署它们

故障隔离 - 即使应用程序的一项服务不起作用,系统仍可继续运行

混合技术堆栈 - 可以使用不同的语言和技术来构建同一应用程序的不同服务

粒度缩放 - 单个组件可根据需要进行部署节点缩放,无需将所有组件部署缩放在一起

5,设计微服务的最佳实践

在当今世界,复杂性已经蔓延到互联网的每个产品当中。微服务架构有望保持团队规模和功能更好。


现在,让我们看一个案列来更好地理解微服务。


案例:购物网站

当您打开购物网站时,您看到的只是一个购买页面。但是,在幕后,购物网站具有接受付款的服务,用于客户咨询的服务等

假设此网站的开发人员已在单一框架中创建它。请参阅下图:

因此,所有功能都放在一个代码库中,并且位于单个底层数据库下。

现在,让我们假设市场上出现了一个新的品牌,开发商希望将即将到来的品牌所有细节都放在这个网站中,原有的数据库结构和UI展示已经无法满足。

然后,他们不仅需要为新标签重做服务,而且还必须重新构建整个系统并相应地进行部署。

为避免此类挑战,购物网站的开发人员决定将其应用程序从单片架构转移到微服务。请参阅下图了解购物网站的微服务架构。

这意味着开发人员不会创建Web微服务,逻辑微服务或数据库微服务。相反,他们为搜索,推荐,客户服务等创建单独的微服务。


这种类型的应用程序架构不仅可以帮助开发人员克服以前架构所面临的所有挑战,还可以帮助轻松构建,部署和扩展购物车应用程序。

通过上述案列,我们可以总结出来,设计微服务的最佳实践:

1,为每个微服务分别存储数据

2,将代码保持在类似的成熟度级别

3,为每个微服务单独构建

4,部署到容器

5,将服务设计为无状态服务

在此我向大家推荐一个架构学习交流群。交流学习群号874811168 里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构等这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • 在本人的前一篇文章《不要把微服务做成小单体》中,现在很多的微服务开发团队在设计和实现微服务的时候觉得只要把原来的单...
    和坚阅读 12,146评论 2 77
  • “微服务架构”这一术语在前几年横空出世,用于描述这样一种特定的软件设计方法,即以若干组可独立部署的服务的方式进行软...
    ThoughtWorks阅读 16,904评论 1 71
  • 本文来自作者 未闻 在 GitChat 分享的{基于 Docker 的微服务架构实践} 前言 基于 Docker ...
    AI乔治阅读 7,264评论 0 71
  • 简介 UIView 对象有一个 transform 属性,该属性可以使控件产生移动、缩放、旋转效果,其坐标系统采用...
    小白进城阅读 283评论 0 0
  • 1, 邹虹辞去了家乡的工作,前往北京投奔在那里做蔬菜生意的丈夫。 两个孩子在读中学,眼看长大成人。将来在哪里工作,...
    青青小园阅读 603评论 1 3