atititi.soa  微服务 区别 联系 优缺点.doc

atititi.soa  微服务 区别 联系 优缺点.doc

1. 应用微服务的动机,跟传统巨石应用的比较1

2. 面向服务架构(SOA)  esb2

3. 微服务架构(Microservices)2

4. 微服务架构特征(Characteristics)3

4.1. 通过服务实现组件化 vs   通过库(library)3

4.2.  去中心统一化  vs 统一的技术平台3

4.3. 7. Design for failure3

5. 服务划分有两个原则要遵循:单一职责原则    每个工具都小而美4

6. 比较soa4

6.1. 相似却不相同4

7. 案例:shop5

8. 微服务架构的关键问题6

8.1. 1. 微服务架构的通信机制6

8.2. 2. 分布式数据管理6

9. 重构巨石型应用7

10. 参考7

1. 应用微服务的动机,跟传统巨石应用的比较

web应用程序发展的早期,大部分web工程是将所有的功能模块(service side)打包到一起并放在一个web容器中运行,很多企业的Java应用程序打包为war包。其他语言(Ruby,Python或者C++)写的程序也有类似的问题。

假设你正在构建一个在线商店系统:客户下订单、核对清单和信用卡额度,并将货物运输给客户。很快,你们团队一定能构造出如下图所示的系统。

这种将所有功能都部署在一个web容器中运行的系统就叫做巨石型应用。巨石型应用有很多好处:IDE都是为开发单个应用设计的、容易测试——在本地就可以启动完整的系统、容易部署——直接打包为一个完整的包,拷贝到web容器的某个目录下即可运行。

但是,上述的好处是有条件的:应用不那么复杂。对于大规模的复杂应用,巨石型应用会显得特别笨重:要修改一个地方就要将整个应用全部部署(PS:在不同的场景下优势也变成了劣势);编译时间过长;回归测试周期过长;开发效率降低等。另外,巨石应用不利于更新技术框架,除非你愿意将系统全部重写(代价太高你愿意老板也不愿意)。

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙,  EMAIL:[email protected]

转载请注明来源: http://www.cnblogs.com/attilax/

2. 面向服务架构(SOA)  esb

面向服务架构 SOA 思想概念的提出已不是什么新鲜事,大概在10年前就有不少相关书籍介绍过。当时 java 企业应用领域 J2EE 依然是主流,应用程序被部署在庞大统一的符合 J2EE 规范的容器中运行,在单一进程中提供所有的功能。 而 SOA 提出的一些架构原则,在当时看来无疑是革命性的。 由于业已存在的大量单一庞大的应用,按照 SOA 的思想和架构原则来改造无疑相当于推翻重新开发一遍,在成本上很难接受。 因此早期的 SOA 通常和另外一个术语关联在一起——ESB(企业服务总线)。 当时在 SOA 的实施思路上无一例外的选择了 ESB 模式来整合集成大量单一庞大的应用,以保护企业前期投入成本。因此 ESB 其实是 SOA 特定历史阶段的一种实现方式。

3. 微服务架构(Microservices)

对微服务架构我们没有一个明确的定义,但简单来说微服务架构是:

采用一组服务的方式来构建一个应用,服务独立部署在不同的进程中,不同服务通过一些轻量级交互机制来通信,例如 RPC、HTTP 等,服务可独立扩展伸缩,每个服务定义了明确的边界,不同的服务甚至可以采用不同的编程语言来实现,由独立的团队来维护。

4. 微服务架构特征(Characteristics)

4.1. 通过服务实现组件化 vs   通过库(library)

传统实现组件的方式是通过库(library),传统组件是和应用一起运行在进程中,组件的局部变化意味着整个应用的重新部署。 通过服务来实现组件,意味着将应用拆散为一系列的服务运行在不同的进程中,那么单一服务的局部变化只需重新部署对应的服务进程。 另外将服务作为组件可以更明确的定义出组件的边界,因为服务之间的调用是跨进程的,清晰的边界和职责定义是设计时必须考虑的。

 微服务哲学还给企业提供了框架,用于思考如何拆分应用,以一种可扩展成不同部分的应用形式。其中一个较好的方法是把应用拆分成独立的容器,使用内部应用相互通信,而不是使用传统的SOA进行内部应用通信,Anuff说。

有了微服务,电脑的最小单元就是最小的Docker容器,10行的node.js代码

4.2.   去中心统一化  vs 统一的技术平台

传统应用中倾向采用统一的技术平台或产品来解决所有问题。 不是每个问题都是钉子,也不是每个解决方案都是一个锤子。 问题有其具体性,解决方案也应有其针对性。 用最适合的技术方案去解决具体的问题,在大一统的传统应用中其实很难做到,而微服务的架构意味着,你可以针对不同的业务服务特征选择不同的技术平台或产品,有针对性的解决具体的业务问题。

4.3. 7. Design for failure

正因为将服务独立在不同的进程中后,引入了额外的失败因素。 任何时刻对服务的调用都可能因为服务方不可用导致失败,这就要求服务的消费方需要优雅的处理此类错误。 这其实是相对传统应用开发方式的一个缺点,不过随着一些开源服务化框架的出现,对业务开发人员而言适当的屏蔽了类似的错误处理,不过开发人员依然需要知道对服务的调用是完全不同于进程内的方法或函数调用的

5. 服务划分有两个原则要遵循:单一职责原则    每个工具都小而美

(1)每个服务应该尽可能符合单一职责原则——Single Responsible Principle,即每个服务只做一件事,并把这件事做好;(

(2)2)参考Unix命令行工具的设计,Unix提供了大量的简单易用的工具,例如grep、cat和find。每个工具都小而美。

6. 比较soa

 微服务架构和SOA是不一样的。但高层次的想法源于对庞大应用程序的沮丧。Martin Fowler在一片文章中的解释比这个全面得多。把你的应用程序作为服务套件,而不是一个紧密耦合整体的代码来创建时,更容易修改和维护——特别是需要全天候运行的Internet应用程序。只要重构和重新部署几个服务,并不需要重装并重新释放整体

6.1. 相似却不相同

微服务与SOA有很多相同之处。两者都属于典型的、包含松耦合分布式组件的系统结构。但是两种架构背后的意图是不同的:SOA尝试将应用集成,一般采用中央管理模式来确保各应用能够交互运作。微服务尝试部署新功能,快速有效地扩展开发团队。它着重于分散管理、代码再利用与自动化执行。

总结:


功能


SOA


微服务


组件大小


大块业务逻辑


单独任务或小块业务逻辑


耦合


通常松耦合


总是松耦合


公司架构


任何类型


小型、专注于功能交叉的团队


管理


着重中央管理


着重分散管理


目标


确保应用能够交互操作


执行新功能,快速拓展开发团队

7. 案例:shop

按照功能和资源划分后,就形成下面图3的架构图。分解后的微服务架构包含多个前端服务和后端服务。前端服务包括Catalog UI(用于商品搜索和浏览)、Checkout UI(用于实现购物车和下单操作);后端服务包括一些业务逻辑模块,我们将在巨石应用中的每个服务模块重构为一个单独的服务。

服务。这么做有什么问题呢?

8. 微服务架构的关键问题

8.1. 1. 微服务架构的通信机制

(1)客户端与服务器之间的通信

,客户端可以向micro service发起RESTful HTTP请求,但是会有这种情况发生:客户端为了完成一个业务逻辑,需要发起多个HTTP请求,从而造成系统的吞吐率下降,再加上无线网络的延迟高,会严重影响客户端的用户体验。

为了解决这个问题,一般会在服务器集群前面再加一个角色:API gateway,由它负责与客户度对接,并将客户端的请求转化成对内部服务的一系列调用。这样做还有个好处是,服务升级不会影响到客户端,只需要修改 API gateway即可。加了API gateway之后的系统架构图如图5所示。

(2)内部服务之间的通信

内部服务之间的通信方式有两种:基于HTTP协议的同步机制(REST、RPC);基于消息队列的异步消息处理机制(AMQP-based message broker)。

8.2. 2. 分布式数据管理

(1)处理读请求

(2)处理更新请求

当一份数据位于多个服务上时,必须保证数据的一致性。

分布式事务(Distributed transactions)使用分布式事务非常直观,即要更新Customer Service上的信用卡额度,就必须同时更新其他服务上的副本,这些操作要么全做要么全不做

9. 重构巨石型应用

在实际工作中,很少有机会参与一个全新的项目,需要处理的差不多都是存在这样那样问题的复杂、大型应用。这时候如何在维护老服务的同时,将系统渐渐重构为微服务架构呢?

不要让事情更坏,有新的需求过来时,如果可以独立开发为一个服务,就单独开发,然后为老服务和新服务直接编写胶水代码(Glue Code)——这个过程不容易,但这是分解巨型服务的第一步,如图7所示;

识别巨石型应用中的可以分离出来当做单独服务的模块,一般适合分离的模块具有如下特点:两个模块对资源的需求是冲突的(一个是CPU密集型、一个是IO密集型);授权鉴定层也适合单独分离出一个服务。每分离出一个服务,就需要编写对应的胶水代码来与剩下的服务通信,这样,在逐渐演进过程中,就完成了整个系统的架构更新。

10. 参考

微服务与SOA之间差了一个ESB(2) - 51CTO.COM.htm

面向服务与微服务架构 - 瞬息之间 - 博客频道 - CSDN.NET.htm

微服务(Microservice)那点事 - 开源中国社区.htm

时间: 2024-10-22 18:08:22

atititi.soa  微服务 区别 联系 优缺点.doc的相关文章

应用架构的演进--MVC,RPC,SOA,微服务架构

MVC架构:垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率. 当业务规模很小时,将所有功能都部署在同一个进程中,通过双机或者前置负载均衡器实现负载分流 此时,加速前端页面开发,分离前后台逻辑的mvc框架是关键. 代表技术:Struts2.SpringMVC.Spring.Mybatis 等等. RPC架构:分布式服务架构 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用

微服务架构的优缺点

微服务架构是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,采用一组服务的方式来构建一个应用,服务独立部署在不同的进程中,不同服务通过一些轻量级交互机制来通信的架构思路. 独立性 在开发层面,每个微服务基本上都是各自独立的项目(project),而对应各自独立项目的研发团队基本上也是独立对应,这样的结构保证了微服务的并行研发,并且各自快速迭代,不会因为所有研发都投入一个近乎单点的项目,从而造成开发阶段的瓶颈.开发阶段的独立,保证了微服务的研发可以高效进行. 可扩展

SOA 架构与微服务架构的区别

注重重用,微服务注重重写 SOA 的主要目的是为了企业各个系统更加容易地融合在一起. 微服务通常由重写一个模块开始.要把整个巨石型的应用重写是有很大的风险的,也不一定必要.我们向微服务迁移的时候通常从耦合度最低的模块或对扩展性要求最高的模块开始. 把它们一个一个剥离出来用敏捷地重写,可以尝试最新的技术和语言和框架,然后 单独布署.它通常不依赖其他服务.微服务中常用的 API Gateway 的模式主要目的也不是重用代码. 而是减少客户端和服务间的往来.API gateway 模式不等同与 Fac

SOA架构与微服务的区别异同

SOA架构介绍 按照英文维基百科定义:SOA(Service-Oriented-Architecture)是一种"软件"和"软件架构"的设计模式(或者叫设计原则).它是基于相互独立的软件片段要将自身的功能通过"服务"提供给其他应用 面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语言.这使得构建

从 SOA 到微服务,企业分布式应用架构在云原生时代如何重塑?

作者 | 易立 阿里云资深技术专家 导读:从十余年前的各种分布式系统研发到现在的容器云,从支撑原有业务到孵化各个新业务,企业的发展离不开统一的.与时俱进的技术架构.本篇文章从企业分布式应用架构层面介绍了云原生计算架构带来的变化,希望能够帮助更多企业的 IT 转型,利用云计算技术推动其成为市场竞争中的敏捷力量. 进入 21 世纪以来,我们见证了企业分布式应用架构从 SOA(Service-oriented Architecture),到微服务架构,再到云原生应用架构的演化. 为了说明企业架构演化背

程序员修神之路--为什么有了SOA,我们还用微服务?

菜菜哥,我最近需要做一个项目,老大让我用微服务的方式来做 那挺好呀,微服务现在的确很流行 我以前在别的公司都是以SOA的方式,SOA也是面向服务的方式呀 的确,微服务和SOA有相同之处 面向服务的架构(SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来.接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台.操作系统和编程语言.这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互.它是一种设计方法,其中包

微服务实践(总)-原文

本系列文章为 dockone.io 首发,转载请标明出处,以示尊重!! http://dockone.io/people/hokingyang   希望读者通过本系列文章对微服务优缺点有一个比较好的理解,以及何时使用这种架构.也许微服务架构比较适合你的应用.也许你正在开发一个大型.复杂单体式应用,日常开发和部署经验非常缓慢和痛苦,而微服务看起来是远方一个极乐世界.幸运的是,有可以参考的脱离苦海的策略,本篇文章中,我将描述如何逐步将单体式应用迁移到微服务架构. 本系列七篇文章列表如下: 微服务实战

微服务面试集合

1.50个微服务面试题 https://cloud.tencent.com/developer/article/1346868 顶级微服务面试问题 根据Gartner的说法,微服务是云开发的新应用平台.微服务是独立部署和管理的,一旦在容器内实现,它们与底层操作系统的交互很少. 因此,如果您计划在微服务中开始您的职业生涯,那么现在正是潜入技术处于新生状态的时候.因此,为了帮助您准备面试,我提出了微服务面试问题和答案博客. 在这个微服务面试问题博客中,我收集了面试官最常问的问题.这些问题是在咨询微服

微服务实战:深入微服务架构的进程间通信

[编者的话]这是采用微服务架构创建自己应用系列第三篇文章.第一篇介绍了微服务架构模式,和单体式模式进行了比较,并且讨论了使用微服务架构的优缺点.第二篇描述了采用微服务架构应用客户端之间如何采用API Gateway方式进行通信.在这篇文章中,我们将讨论系统服务之间如何通信. 简介 在单体式应用中,各个模块之间的调用是通过编程语言级别的方法或者函数来实现的.但是一个基于微服务的分布式应用是运行在多台机器上的.一般来说,每个服务实例都是一个进程.因此,如下图所示,服务之间的交互必须通过进程间通信(I