iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何理解微服务架构
  • 793
分享到

如何理解微服务架构

2023-06-05 06:06:29 793人浏览 八月长安
摘要

因为Martin Fowler和Chris Richardson两位大神的布道,及NetFlix和Amazon公司的实践,国内对于微服务的一些基础问题理解基本一致,但受限于自身单体应用的限制,过度到微服务架构,又要各想办法,具体问


因为Martin Fowler和Chris Richardson两位大神的布道,及NetFlix和Amazon公司的实践,国内对于微服务的一些基础问题理解基本一致,但受限于自身单体应用的限制,过度到微服务架构,又要各想办法,具体问题具体看了。本篇描述一下微服务架构的基本概念及个人的一些理解。“微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间相互协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务和服务之间采用轻量级的通信机制相互沟通(通常是基于Http的Restful api).每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构"----Martin Fowler的博客

 微服务的特征与界定
如何理解微服务架构

单体应用 vs 微服务架构

 优点

1:提升开发交流,每个服务足够内聚,足够小,代码容易理解;

2:服务独立测试、部署、升级、发布;

3:按需定制的DFX,资源利用率,每个服务可以各自进行x扩展和z扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;每个服务按4:需要选择HA的模式,选择接受服务的实例个数;

5:容易扩大开发团队,可以针对每个服务(service)组件开发团队;

6:提高容错性(fault isolation),一个服务的内存泄露并不会让整个系统瘫痪;

7:新技术的应用,系统不会被长期限制在某个技术栈上;

缺点

没有银弹,微服务提高了系统的复杂度;开发人员要处理分布式系统的复杂性;服务之间的分布式通信问题;服务的注册与发现问题;服务之间的分布式事务问题;数据隔离再来的报表处理问题;服务之间的分布式一致性问题;服务管理的复杂性,服务的编排;不同服务实例的管理。

·        如何理解微服务架构

ChrisRichardson提出的微服务的三维扩展模型:

X轴,服务实例水平扩展,保证可靠性与性能;

Y轴,功能的扩展,服务单一职责,功能独立;

Z轴,数据分区,数据独立,可靠性保证;


如何理解微服务架构 
通信问题

微服务的拆分一般会带来IPC通信的问题。通信机制需要完备可靠,服务之间的通信选择应尽量单一,从两个维度对通信的模式进行划分:

第一个维度是一对一还是一对多:

一对一:每个客户端请求有一个服务实例来响应。

一对多:每个客户端请求有多个服务实例来响应。

第二个维度是这些交互式同步还是异步:

同步模式:客户端请求需要服务端即时响应,甚至可能由于等待而阻塞。

异步模式:客户端请求不会阻塞进程,服务端的响应可以是非即时的。

·        如何理解微服务架构


微服务架构认为,服务间通信应该就只有这几种模式。AC出于时延、编程模型等方面的考虑,提供了一套通信机制,业务之间的通信要按需选用。

 服务的发现与注册

一般的微服务架构里都有两层API GetWay,一层是外部APIGetWay,用于用户访问系统;一层是内部API GetWay,内部服务之间的APIGetWay。内部API GetWay要解决的问题就是服务发现和服务注册。从这也能看出来,为什么通信的方式要尽量单一,APIGetWay有一项工作就是协议转换。

微服务可能是HA主备的,也可能是LB的,怎么找到一个服务?有两种思路,客户端发现(左图),客户端去注册中心查询服务实例列表,自行选择;另一种是服务端发现(右图),添加LB模块,客户端把请求发向LB,由LB根据负载均衡策略选择服务实例;

 如何理解微服务架构

如何理解微服务架构

微服务注册表的典型实现:

 ETCD: 是一个高可用,分布式的,一致性的,键值表,用于共享配置和服务发现。两个著名案例包括kubernetes和Cloud Foundry。
 ZK: 是一个广泛使用,为分布式应用提供高性能整合的服务。Apache ZooKeeper最初是hadoop的子项目,现在已经变成顶级项目。

微服务架构的部署

微服务架构对于部署的要求

部署速率,Amazon与NetFlix都有千个服务,每个服务都有持续部署的要求,Amazon的服务每秒都会部署一次;

部署自动化,一切都要自动化,IaaS与PaaS解决I层与P层自动化部署,微服务有自动部署与运维工具,并实现Auto-Scaling;

部署提供基础机制,为实现分布式部署要求,部署机制一般都有资源池化、服务的生命周期来看,部署服务 与服务注册是一体的; 

部署的粒度:

VM: 部署系统管理的VM的生命周期,如当前AC的iDeploy部署,把AC部署拆分为每个VM的安装、配置与启动;这种方式粒度粗,支撑不了微服务的部署(除非一个服务占用一个VM); 

App: 管理应用的生命周期及部署形态,生命周期分为部署、配置、启动、升级等,部署形态有主备、LB、Daemon等;

Container: 相比于APP,容器有更好的隔离性和移植性;

微服务:一般的微服务要么是APP,要么是Container,但AC就不是。受限于ONOS架构,我们的服务是一组feature;

MS部署的解决方案:

TOSCA: 云应用拓扑标准,一种描述云化部署的DSL,我司主推一个标准,PaaS的部署系统和MANO用的都是TOSCA;

Kubernetes:Google开源的容器管理系统,提出了Pod/Service/Labels等概念,以ETCD为中心,PaaS基于k8s开发出了我司的云化部署平台;

Mesosphere:DCOS,数据中心操作系统,基于mesos实现资源池化,有自身的编排工具;分布式LAB基于DCOS的思想做出了一套部署与集群管理系统(HASEN);

微服务的划分

微服务的划分主要是保证微服务功能内聚,职责单一。一般使用DDD(Domain Drive Design)的思想与方法对微服务进行划分,这种方法有点类似于数据库ER图的划分,不断分解数据,保证关系型数据库符合原子性、冗余性的范式要求。当然,微服务的划分比数据表划分更复杂,也没有微服务范式的概念,但思想是一致的。更多的内容,请参考《领域驱动设计》这本书。

分布式一致性

有两个大的思路:全局的分布式事务;事件驱动;

分布式事务就是现在AC的思路,在设计开发中;

事件驱动,忽略了事务的概念,由每个服务在应用层面保存服务的状态,服务之间的通信使用事件机制通知;此种方法可以保证微服务间的独立性,但把问题交给了服务的设计者;具体事件驱动的案例见参考材料;

数据隔离问题

微服务之间数据隔离可以保证服务的独立升级与部署,数据隔离有三个维度:

数据表级隔离;数据表之间独立,没有外键关系;

数据库级隔离;不同服务有不同的数据库;

DBMS级隔离;不同服务有不同的数据库管理系统;

一般做到数据库级隔离就可以了,服务之间的数据交换使用服务间接口。

从单体到微服务

微服务架构是一个衍生架构,都是从单体架构演化而来的。

因为微服务架构本身的复杂性,初创系统出于快速开发、快速验证的考虑,很少在一开始就使用微服务架构。加之微服务的概念在这两年才火,大型单体应用也是看到了开发与维护的成本在不断增加,才会有转型微服务的动力。因此,如何从单体到微服务是一个普遍问题。

从单体到微服务的原则:

逐步演进,不要全部重构

全部重构,带来极大的成本和风险,系统会有很长的不稳定期。而且,最终的效果也不会很好,在设计时很难想到所有问题。微服务架构的演化思路应该是一步步铺基础设施,一点点拆分微服务。 

演化建议(个人建议)

1. 不要增加新的耦合;

不要有编译依赖,如直接import其它模块的类;

使用版本建议的通信方式,不要使用osGIService,这个耦合还是很强;不要直接访问其它模块的数据表;

避免不必要的亲合性,注意特性之间的状态,如A特性访问B特性的2个请求有状态,那这两个特性实例就有亲合性;

2. 前后端分离;

  前后端业务分离,前端之间不会耦合,能前端做的,就放在前端;

3. 独立的服务逐渐拆出;

  逐步拆出功能独立的微服务,对有特殊DFX要求的微服务也可以优先拆出;

devops与微服务架构

DevOps是09年提出来的概念,但一直没有太火。直到14年,容器与微服务架构的提出,DevOps才得到了快速的发展。DevOps不单是一个实现自动化的工具链,而是组织、流程与技术的结合。组织上强调全栈团队、团队特性专一、团队自治;技术上打通开发与运维;流程上强调端到端、可视化、灰度升级、A/B测试等。

对于DevOps,MS不是必须的,但MS为DevOps提供了最好的架构支撑,对于组织和流程的要求也是一致的。所以,也有人称MS是DevOps架构。

目前,华为云对微服务的支持投入巨大,在国内率先支持Go语言服务框架!现在,围绕微服务正在如火如荼的开展一系列体验活动!

--结束END--

本文标题: 如何理解微服务架构

本文链接: https://www.lsjlt.com/news/241729.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何理解微服务架构
    因为Martin Fowler和Chris Richardson两位大神的布道,及NetFlix和Amazon公司的实践,国内对于微服务的一些基础问题理解基本一致,但受限于自身单体应用的限制,过度到微服务架构,又要各想办法,具体问...
    99+
    2023-06-05
  • 如何理解Spring Cloud微服务架构
    这篇文章主要讲解了“如何理解Spring Cloud微服务架构”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何理解Spring Cloud微服务架构”吧!...
    99+
    2024-04-02
  • 阿里架构师:带你快速理解微服务架构,理解微服务架构的核心
    什么是微服务首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。传统的WEB应用核心分为业务逻辑、适配器以及API或通过UI访问的WEB界面。业务逻辑定义业务流程、业务规则以及领域...
    99+
    2023-06-04
  • 如何理解Spring Cloud和Docker的微服务架构
    如何理解Spring Cloud和Docker的微服务架构,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。  Spring Cloud和Docker的微服务架构  功能服务 ...
    99+
    2023-06-04
  • SpringCloud 微服务架构详解
    SpringCloud 微服务学习(一) SpringCloud Alibaba1.1、单体 分布式 集群1.2、系统架构的演变1.2.1、单体应用架构1.2.2、垂直应用架构1.2.3、分层架构1.2.4、SOA架构1.2.5、微...
    99+
    2023-08-16
    java 分布式
  • 如何使用Spring Cloud构建微服务架构?
    微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥该架构模式的重要作用,则需要微服务框架的支持。在 Java 生态圈,目前使用较多的微服务框架就是集成了包括 Netflix O...
    99+
    2023-06-05
  • Kubernetes中如何部署微服务架构
    要在Kubernetes中部署微服务架构,可以按照以下步骤进行: 创建一个Kubernetes集群:首先需要在云端或本地环境中创...
    99+
    2024-04-02
  • 微服务架构如何解决应用状态的管理问题?
    随着应用的不断发展和扩展,应用状态管理问题也变得越来越复杂和困难。传统的单一应用架构难以应对多个模块和组件的管理问题,而微服务架构则为解决这些问题提供了有效的解决方案。微服务架构是一种基于一些小型服务的架构,这些服务都可以独立运行并进行相互...
    99+
    2023-05-18
    微服务架构 应用状态 管理问题
  • 微服务架构中如何进行服务的版本管理?
    随着现代化软件架构的发展,微服务架构已成为了许多企业选择的开发方式。它具有高可扩展性、高弹性和高可靠性等优点,因此越来越多的企业开始采用微服务架构来构建他们的应用程序。那么在微服务架构中,如何进行服务的版本管理呢?在本文中,我们将完成如下三...
    99+
    2023-05-16
    微服务架构 服务版本管理 API Gateway
  • 微服务架构中如何处理服务的多版本问题?
    随着互联网技术的快速发展,微服务架构的应用越来越广泛。微服务架构具有高灵活性、高可扩展性和高可靠性等优点,使得其在企业级应用中得到了广泛应用。但是,随着服务的不断迭代升级,服务的版本也在不断地增多。因此,如何在微服务架构中处理服务的多版本问...
    99+
    2023-05-16
    微服务架构 多版本问题 服务处理
  • 微服务架构中如何进行服务的部署和管理?
    随着云计算、容器技术和DevOps的快速发展,微服务架构正变得越来越流行。与传统的单块应用相比,微服务架构可以将应用程序划分为小型且自治的服务,以便更好地达到可伸缩性和灵活性。在同步开发、测试和发布服务等任务时,部署和管理服务是极为重要的,...
    99+
    2023-05-17
    微服务架构 服务部署 服务管理
  • 微服务架构中如何处理服务的追踪和诊断?
    随着云计算以及容器技术的不断普及,微服务架构作为一种新型的软件架构方式也引起了广泛的关注。相比传统的单体应用架构,微服务架构具有更好的可拓展性和可维护性,并且能够更好地适应快速变化的需求。然而,随着微服务数量的增多和复杂度的增加,问题的排查...
    99+
    2023-05-17
    微服务 服务追踪 服务诊断
  • 微服务架构中如何处理服务的故障处理和恢复?
    随着互联网和云计算技术的飞速发展,越来越多的企业开始采用微服务架构来构建分布式系统,以实现更高的可伸缩性、可扩展性和可靠性。但是,微服务架构中服务的故障处理和恢复也是一个重大挑战,因为微服务架构中的服务是高度分布式和松散耦合的。因此,了解微...
    99+
    2023-05-17
    恢复 微服务架构 故障处理
  • 微服务架构中如何处理服务的生命周期和管理?
    随着互联网和移动互联网的快速发展,软件开发变得越来越复杂,而微服务架构已成为当今软件开发的主流趋势之一。微服务架构是一种将大型应用程序划分为多个小型服务的方法。每个服务都具有特定的业务功能,并且可以独立地进行开发、测试和部署。在这种架构中,...
    99+
    2023-05-17
    微服务 生命周期 管理。
  • 微服务架构中如何处理大量的异步任务?
    随着云计算和大数据时代的到来,解决并发问题已经成为了互联网架构设计的关键。而微服务架构作为云时代下的一种较为先进的架构方式,其本身的异步任务处理能力成为了其优势之一。但是,当异步任务数量急剧增加时,也会给微服务架构的性能和稳定性带来挑战。本...
    99+
    2023-05-17
    处理 微服务架构 异步任务
  • 如何分析Java高可用集群架构与微服务架构
    这篇文章将为大家详细讲解有关如何分析Java高可用集群架构与微服务架构,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 序可能大部分读者都在想,为什么在这以 dubbo、spring...
    99+
    2023-06-16
  • 微服务架构中如何处理服务的服务挂起和超时?
    随着信息技术的快速发展,越来越多的应用程序转向微服务架构。微服务架构有许多好处,包括容易扩展、灵活性高、可观测性好等等。然而,在微服务架构中处理服务挂起和超时仍然是一个复杂而又重要的问题。每个微服务可能会有上百个服务调用,每个服务调用都可能...
    99+
    2023-05-16
    微服务 服务挂起 超时处理。
  • 微服务架构—服务降级
    1 、简介什么是服务降级当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理或换种简单的方式处理,从而释放服务器资源以保证核心交易正常运作或高效运作。如果还是不理解,那么可以举个例子:假如目前有很多人想要给我付钱...
    99+
    2023-06-05
  • 传统服务架构和微服务架构的区别
    本篇内容主要讲解“传统服务架构和微服务架构的区别”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“传统服务架构和微服务架构的区别”吧!一:传统服务架构一个系统由多个业务聚合而成,由多个java pa...
    99+
    2023-06-04
  • 分解微服务:PHP 微服务架构的奥秘揭开
    微服务架构是一种软件开发方法,将应用程序分解成松散耦合、独立部署的小服务。PHP 作为一种流行的 Web 编程语言,非常适合构建微服务。本文将深入探讨 PHP 微服务架构,揭开其分解过程的奥秘。 理解微服务的概念 微服务本质上是小型、自主...
    99+
    2024-02-16
    微服务 PHP 架构 分解 设计
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作