企业中的微服务:敌是友?

宏观问题的微观解决方法?

微服务的炒作无处不在,尽管业界似乎无法就确切的定义达成共识,但我们一再被告知,从单一应用程序转向由小型服务组成的面向服务的架构(SOA)是正确的方法。构建和发展软件系统。 但是,当前没有传统的“企业”组织谈论采用微服务。 这篇博客文章是较大文章的预览,该文章探讨了企业中微服务的使用。

界面–良好的合同造就了好邻居

无论您是开始新建的微服务项目,还是要负责将现有的整体解构为服务的任务,首要任务都是定义新组件的边界和相应的应用程序编程接口(API)。

与使用传统的面向企业服务的体系结构(SOA)方法通常实现的服务相比,微服务体系结构中服务的建议粒度要更好,但是可以说SOA的初衷是创建可重用业务功能的内聚单元,甚至如果实施历史讲述了一个不同的故事。

新建微服务项目通常具有更大的灵活性,并且初始设计阶段可以使用服务提供者和消费者之间的明确责任和合同(例如,使用消费者驱动的合同 )来定义域驱动设计(DDD )启发的有限上下文。

但是,典型的棕地项目必须寻求在现有应用程序中创建“ 接缝 ”,并实现与接缝接口集成的新(或提取)服务。 目标是使每个服务具有高凝聚力和松散耦合; 服务接口的设计是这些原则的种子。

通信–同步与异步

实际上,我们发现许多企业将需要在其服务中同时提供同步和异步通信。 值得注意的是,尽管这些框架所解决的许多挑战仍然存在,但行业内仍有相当大的动力要摆脱人们认为的“重量级” WS- *通信标准(例如WSDL,SOAP,UDDI)。服务发现,服务描述和合同协商(如greg Young在muCon微服务会议上的最新演讲中非常简洁地阐述 )。

中间件–传统企业如何应对?

尽管许多重量级的Enterprise Service Bus ESB可以执行一些非常巧妙的路由,但它们经常被部署为黑匣子。 吉姆·韦伯(Jim Webber)曾开玩笑说ESB应该代表“ Egregious Spaghetti Box”,因为在专有ESB中执行的操作并不透明,而且通常很复杂。

如果要求指示使用ESB(例如,消息拆分或基于策略的路由),则应考虑使用开源轻量级ESB实现(例如Mule ESB或Fuse ESB) 。

我通常会发现轻量级的MQ平台(例如RabbitMQ或ActiveMQ )更合适,因为我们认为SOA通信的当前趋势是朝着“ 哑管道和智能端点 ”迈进,除了消除潜在的供应商费用和锁定外,其他好处使用轻量级的MQ技术可以简化部署,管理和简化测试。

部署微服务–有多难?

无论您选择构建微服务,使用连续集成样式的构建管道都是至关重要的,该管道包括针对功能需求,容错,安全性和性能的严格自动化测试。 可以说,手动QA和分阶段评估的经典SOA方法在“ 速度取胜 ”且快速创新和试验的能力是竞争优势的经济中不再适用(如精益创业运动所体现的那样)。

您的应用程序的行为可能会在基于微服务的平台中浮现出来,尽管没有什么可以替代对生产堆栈中的全面而普遍的监视,但是在您的组件暴露给客户之前进行锻炼(或折磨 )的构建管道似乎是高度有益。 正如我在几场会议的演讲中所讨论的那样 ,一个好的构建管道应尽可能早地在目标部署环境中使用服务。

摘要– API,轻量级的comms和正确的部署

无论您是否订阅了微服务炒作,这种架构风格似乎都在几乎所有软件开发领域中得到了关注。 本文试图为理解这个不断发展的空间中的关键概念提供入门知识,并希望提醒读者,经典企业SOA之前已经见过许多这些问题和解决方案。 我们明智的做法是不要重新发明众所周知的“面向服务”的轮子。

请单击此处,以获取完整的原始文章 ,该文章提供了有关JVM平台上微服务实现选项的更多信息,并讨论了持续交付的要求。 本文的一个版本最初发布在DZone 2014 Enterprise Integration Guide中 。

参考文献

参考文献的完整列表和推荐阅读的内容也可以在原始文章和最近讨论微服务业务含义的文章中找到。

翻译自: https://www.javacodegeeks.com/2015/01/microservices-in-the-enterprise-friend-or-foe.html

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

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

相关文章

自定义百度地图气泡

自定义百度地图气泡 http://www.cnblogs.com/jz1108/archive/2011/09/15/2152122.html 转载于:https://www.cnblogs.com/ygm900/archive/2013/02/26/2933000.html

使用Bean验证扩展PrimeFaces CSV

你们中有些人已经知道我和我的合著者Mertalışkan正在研究PrimeFaces Cookbook的2.版。 Packt Publishing允许我从新章节“客户端验证”的一个食谱中摘录一小部分摘录。 这将有助于使读者知道这本书的内容。 在此博客文章中,我想讨论使用Bean验证扩展的PrimeFaces客…

ASP.NET.CORE发布后启动网站出现500.19-0x8007000d错误解决方法

本项目使用的是netcoreapp2.2,缺少的XML文件是swagger。发布采用的是文件系统、依赖框架。 我第一次发布asp.net.core的后台,发布后启动网站出现500.19错误-0x8007000d。百度查了一下原因,2其中大多数人说是因为没有权限,需要编辑…

Java持久性锁定初学者指南

隐式锁定 在并发理论中,锁定用于保护可变共享数据免受危险数据完整性异常的影响。 因为锁管理是一个非常复杂的问题,所以大多数应用程序都依赖于其数据提供程序隐式锁定技术。 将整个锁定职责委托给数据库系统既可以简化应用程序开发,又可以…

负载均衡的集中实现方式

1, 软件 (安装第三方软件做双机,缺点是切换速度,以及故障转移会有问题)2, 硬件(采用第三方硬件设备,缺点是费用贵)3, DNS(价格最便宜,…

uni-app之新建项目无模板选择以及点击创建后一直卡住不动

uni-app:新建项目无模板选择以及点击创建后一直卡住不动 原因:无权限 解决方法:退出HBuilderX,然后以管理员身份启动HBuilderX.exe。解决问题

WildFly和Docker上的Java EE 7动手实验室

Java EE 7动手实验室已在全球范围内交付,它是一个非常标准的应用程序,显示了典型Java EE 7应用程序的设计模式和反模式。 它显示了如何在接近现实的应用程序中使用以下技术: WebSocket 1.0 JSON处理1.0 批次1.0 上下文和依赖注入1.1 Jav…

JSONP跨域的原理解析

转自 http://www.nowamagic.net/librarys/veda/detail/224 JavaScript是一种在Web开发中经常使用的前端动态脚本技术。在JavaScript中,有一个很重要的安全性限制,被称为“Same-Origin Policy”(同源策略)。这一策略对于JavaScript…

uni-app运行编译报错

uni-app运行编译失败; 原因:安装目录问题 解决方案:将下载的安装包放在英文目录下,路径中不要出现中文

一罐将其全部统治:Arquillian + Java 8

借助Java 8 ,已实现了许多新的语言改进,以简化开发人员的生活。 在我看来, Java 8的最大优点之一是,在某些情况下,已开发的代码看起来比使用以前的方法更漂亮,我指的是Lambdas和Method引用。 这篇文章不是要…

Gentoo使用sudo

安装app-admin/sudo包 emerge sudo 设置环境变量EDITOR echo EDITOR\"/usr/bin/vim\" >/etc/env.d/99editor env-update 然后注销重新登陆编辑sudo配置文件/etc/sudoer,启用wheel组特权,/etc/sudoer不能用编辑器直接编辑,只能使…

uni-app引入阿里巴巴矢量库图标后,顶部导航栏显示小方块

引入阿里巴巴矢量图标库 首先在阿里巴巴创建项目,拥有图标 具体引入方法参考: [https://blog.csdn.net/Dream_Weave/article/details/88550978?depth_1-utm_sourcedistribute.pc_relevant.none-task&utm_sourcedistribute.pc_relevant.none-task]在…

使用Spring Integration进行消息处理

Spring Integration提供了Spring框架的扩展,以支持著名的企业集成模式。 它在基于Spring的应用程序中启用轻量级消息传递,并支持与外部系统的集成。 Spring Integration的最重要目标之一是为构建可维护且可测试的企业集成解决方案提供一个简单的模型。 …

mysql中的字段类型

Mysql中的字段类型 MySQL支持大量的列类型,它可以被分为3类:数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述。概述有意…

js 编码

编码 let url encodeURIComponent(this.url);

使用RxNetty访问Meetup的流API

本文将涉及多个主题:响应式编程,HTTP,解析JSON以及与社交API集成。 完全在一个用例中:我们将通过非夸张的RxNetty库实时加载和处理新的metup.com事件,结合Netty框架的强大功能和RxJava库的灵活性。 Meetup提供了公开可…

SQL Server 2005/2008 导入导出数据常见报错

数据库导入导出时总失败,错误信息如下: 正在验证 (错误) 消息 错误 0xc0202049: 数据流任务 1: 无法在只读列“ID”中插入数据。 (SQL Server 导入和导出向导) 错误 0xc0202045: 数据流任务 1: 验证列元数据失败。 (SQL Server 导入和导出向导) 错…

js、react对象名和对象属性赋值

const resValue {}; resValue[standards${standardsNumber}] ""; Console.log(:test",resValue )//

TIBCO产品的微服务和DevOps

如今,每个人都在谈论微服务。 您可以在数百篇文章和博客文章中读到很多有关微服务的信息。 马丁福勒 ( Martin Fowler )的文章是一个很好的起点,该文章引发了有关这种新架构概念的大量讨论。 另一个很棒的资源是独立于供应商的分…

三层结构

三层结构: 1.UI层,表示层;负责界面,也就是我们看到的前台的东西,最直观的东西都在这里实现; 2.BLL层,业务逻辑层,负责软件的业务逻辑,逻辑代码在这里实现; 3.…