写点什么

不同类型的微服务?

  • 2016-04-25
  • 本文字数:1792 字

    阅读完需:约 6 分钟

最近,有许多微服务领域的讨论,但是这些讨论大多都是关于如何从头开始构建微服务应用的,Mark Little 认为,微服务的初衷在于改造已有的应用,提高其敏捷性,他讨论了在这种场景下,实现微服务的最佳实践。

Mark Little 博士是 Red Hat 中间件部门的工程副总裁,他领导着 JBoss 的技术方向和研究 / 开发工作。在此之前,他曾经担任过 SOA 技术开发的主管,并负责标准的制订。

在 Mark Little 最新的一篇博客文章中,他回顾了自己从事微服务相关的一些经历和对微服务的认识,他依然愿意在这个领域不断思考,并与其团队成员进行交流,从而推动行业思想的发展。

在这个过程中,有些困扰他的问题变得逐渐清晰。长期以来,人们思考的可能是微服务与SOA、分布式系统以及DevOps 的关系,而且也有很多的项目和产品来帮助开发基于(微)服务的架构。但是,除Red Hat 以外,大多数关于微服务的文章都是从头开始构建的。这其实也反映了大多数开发工作的关注点:从头(Greenfield)开发,重新对系统进行架构,然后完全重建。

不过,微服务最初并不是这样的,如果读一下最初的文献的话,尤其是来自Netflix 的文章,就会发现微服务的理念(或者Adrian Cockcroft 最初所说的“Adrian Cockcroft”)是与已有系统息息相关的,它致力于将它们重构为组件(服务),这些组件能够独立地部署、版本化和发布。这里的理念在于为已有的系统(brownfield)构建微服务。Mark Little 虽然一开始就知道这些背景,但是一直以来他始终认为这种方式与从头开始构建所使用的过程、工具以及方式都是完全相同的。直到最近,他才意识到中间的差别。

有些团队会基于已有的系统进行改造,实现微服务,这是很有价值的。大多数人所面临的都是已有的应用,就像Netflix 那样,因此这种方式更具有实用性。它不需要我们好高骛远,每次只需进步一点点即可,这方面是作者以前所没有太多关注的。为了支持这些微服务,也需要对基础设施进行一些很重要的简化。

在一个样例中,他们所面临的是单体应用中的已有组件。因为团队是基于Java EE 的,所以具体的表现形式就是多个WAR(Web Archive)或JAR(Java Archive),这些文件会放到一个EAR(Enterprise Archive)中,但是这个例子本身与编程语言和框架是无关的。在这个例子中,目标是将单个组件拆分为微服务,这样当某个WAR 中的内容发生变化的时候就不需重新创建整个EAR 包了。

如果从完全重建的角度来看,这其实没有实质性的不同。不过,在分布式场景方面,我们可以采取一些变化,至少可以进行简化,这里不需要命名服务(或类似的机制)来定位各种各样的服务所在的位置,同时也不需要SLA。实际上,因为我们知道服务的API,并且这里的目标在于提升开发过程的敏捷性,所以,可以将API 硬编码到“客户端”中(应用的其他部分)。从事后来看,很多地方都是可以硬编码的。可以借助地址绑定或底层的网络,如REST/HTTP 使用URL 来表示服务的名称/ 地址,当然,这样的话需要DNS 实现绑定。

到目前为止,这是可行的,到一定程度之后,就会引入传统分布式系统的复杂性了,不过,我们还没到那一步。团队的关注点在于:“作为开发人员,我该从哪里开始拥抱微服务呢,在不开发、不安装过多基础设施的前提下,该如何取得成功呢?”。Mark Little 认为这种方式的简化/ 硬编码/ 依赖基础设施能够在一定程度上提供帮助。

当提到微服务时,我们经常读到的内容就是中心化的日志、事件驱动方式、协作(orchestration)以及部署技术,但是,当面临预先定义的组件/ 服务时,如果我们想借助微服务来提升敏捷性的话,这些技术其实并没有那么重要。借助硬编码以及一些自动化的方式,完全就能实现。

这是一种新型的微服务吗?事实上并非如此,这是一种不断演化的方式,其实与之前的CORBA 和Java EE 应用并无分别,我们会通过硬编码、接口的方式进行手动编码,随着分布式应用复杂性的不断增长,开发人员需要基础设施和工具的更多帮助。所以,这种方式毫无疑问也是微服务,因为它的目标依然是让团队更加灵活、具有独立的生命周期,只不过它更加聚焦于某一点,或者说更加实用。

在将已有的系统往微服务架构改造的过程中,Mark Little 所述的这些观点,应该会对我们提供一些借鉴和帮助。


感谢陈兴璐对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-04-25 19:002613

评论

发布
暂无评论
发现更多内容

从 Netflix 传奇看,结果导向的产品路线图如何制定?

LigaAI

敏捷开发 研发管理 技术管理 成长路线图 企业号 2 月 PK 榜

2022年最新数据库调查报告:中国使用率最高的数据库云厂商是谁?

墨天轮

数据库 腾讯云 阿里云 华为云 上云

解析关于Tomcat Servlet-request的获取请求参数及几种常用方法

华为云开发者联盟

开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

【华秋电子】晶体的选择有哪些参数?

华秋电子

校招前端高频react面试题合集

夏天的味道123

前端 React

滴滴前端高频react面试题汇总

xiaofeng

前端 React

瓴羊Quick BI移动端自助分析功能受追捧

巷子

前端一面常见react面试题(持续更新中)

夏天的味道123

前端 React

前京东高级副总裁周伯文提前1年布局ChatGPT,现招募多名合伙人

B Impact

前端leetcde算法面试套路之回溯

js2030code

JavaScript LeetCode

CI/CD | 深入研究Jenkins后,我挖掘出了找到了摆脱低效率低下的方法

龙智—DevSecOps解决方案

ci 持续集成 jenkins

Atlassian Server用户新选择 | 数据中心产品是否适合您的企业(2)?

龙智—DevSecOps解决方案

Atlassian 数据中心版 server版

从实现一个React到深度理解React框架核心原理

夏天的味道123

前端 React

你要的react+ts最佳实践指南

xiaofeng

前端 React

线上研讨会报名 | Perforce、中手游、星思半导体专家邀您一起畅聊如何通过数字资产管理与版本控制赋能大规模研发

龙智—DevSecOps解决方案

版本控制 数字资产 游戏开发 数字资产管理 芯片研发

用javascript分类刷leetcode9.位运算(图文视频讲解)

js2030code

JavaScript LeetCode

代码质量与安全 | ChatGPT能帮到你什么还有待探索,但人工智能真的可以帮你做自动化测试

龙智—DevSecOps解决方案

人工智能 AI 软件测试 测试 自动化测试

腾讯前端必会react面试题合集

xiaofeng

前端 React

瓴羊Quick BI拥有可视化大屏功能,精准掌握所有数据内容!

小偏执o

2022年中国小微企业云财税服务市场专题分析

易观分析

数字化 财政 财税

文章转载 | 紫龙上海CTO王琦:我们对游戏工业化的探索

龙智—DevSecOps解决方案

游戏开发 游戏引擎 紫龙游戏

彻底搞懂React-hook链表构建原理

夏天的味道123

前端 React

2023年优质的数据库审计厂商当属行云管家!

行云管家

等保 等级保护 数据库审计

透明led显示屏的应用指南

Dylan

LED LED display LED显示屏

华为云携手金蝶,探索高成长型企业“数字化创新管理”之路

华为云开发者联盟

云计算 后端 华为云 企业号 2 月 PK 榜 华为云开发者联盟

阿里云IoT企业物联网平台 可用地域区 和 接入点信息速查——实践类

阿里云AIoT

阿里云 物联网 IoT

前端leetcde算法面试套路之堆

js2030code

JavaScript LeetCode

谈JVM xmx, xms等内存相关参数合理性设置

京东科技开发者

JVM 内存 垃圾回收 吞吐量 企业号 2 月 PK 榜

AIGC的隐私安全问题及隐私保护技术 | 社区征文

京东科技开发者

隐私计算 语言模型 ChatGPT 企业号 2 月 PK 榜 LLM

几个你必须知道的React错误实践

xiaofeng

前端 React

cmp云管平台专业厂商选择技巧看这里!

行云管家

云计算 云服务 云管平台 云计算管理工具

不同类型的微服务?_语言 & 开发_张卫滨_InfoQ精选文章