NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

构建和部署微服务的模式

  • 2014-08-20
  • 本文字数:1164 字

    阅读完需:约 4 分钟

微服务管理意味着要看管大量相互通信的小型系统并提供自动配置功能,此外基础设施自动化也是极其重要的, James Lewis 在做技术与实践分享的时候声称这些有助于他管理日益增长的运维复杂度,而这些复杂度就是由于微服务架构造成的。

在ThoughtWorks 工作的咨询师James 对微服务的起源进行了描述,他认为这是对我们目前用于构建应用的方式的一种回应。一直以来,我们都是在构建那种庞大的而且难以修改、测试和管理的单片应用,这种应用从根本上来说就像是一个由像意大利面条那样乱作一团的代码所构成的大泥球 big balls of mud )。解决方案就是将原来的单片应用构建为更小的事物,并通过某些方式让它们相互之间能够进行通讯。

对于 James 而言,微服务意味着先选择一套大型的应用程序,然后识别出限界上下文 bounded contexts )及其内部的业务功能,并对它们进行分割,重要的是要将数据一起进行分割,也就是说要采用应用数据库而非集成数据库。为了理解业务领域的内容,关键的一点就是要在一开始就采用上下文图 context map )这个工具,James 引用了他的同事 lan Cartwright 的一段话:

业务和架构应该是同构的。业务人员应该能够通过查看架构的总体示意图来了解其反映的业务内容,同样,作为技术人员,我们应该能够通过浏览业务来领会其展现的架构内容。

微服务架构的一个很重要的方面就是规模,James 认为单一职责模式(SRP)( Single Responsibility Pattern )是一种很好的衡量标准。一个服务应该只有一个进行改动的原因,这在实践中意味着它应该是小型的并且足够专注,进而能够从概念上进行理解和把握。

James 认为微服务的一个核心概念就是能够对每个服务进行独立部署和扩展的可能性;一个服务可以被部署为多个实例,而不同的服务也可以托管在同一台服务器上。James 强调,在构建和部署分布式系统的时候,对自动化配置的关注是至关重要的,每个服务或者应用都必须自动地进行构建、部署和扩展。微服务的许多复杂性都来自于集成过程,但是我们可以应用一些模式来进行应对,还可以参考《持续交付》一书中关于构建过程的模式。

Chef Puppet 这样的工具有助于实现机器的自动化配置,大量的服务会引入一定的复杂度,使用这些工具来进行基础设施自动化也是控制这些复杂度的重要方式。Phoenix 基础架构模式描述了一种我们利用基础架构自动化来再造所有的基础架构的方式,比如我们应该能够将电脑的信息都清除,然后运行一个脚本来重新构建它及其所有的依赖。

James 所提到的微服务大会定于十一月份下旬在伦敦举办。

查看原文地址: http://www.infoq.com/news/2014/07/building-deploying-microservices


感谢赵震一对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-08-20 04:122724

评论

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

钩陈/ 好中文作业:巴别塔

ZoomQuiet大妈

写作 大妈 是也乎 IMHO 蟒营®

Java | 原来 serialVersionUID 的用处在这里

YoungZY

Java

原创下载 | TDD工具集原创开源代码免费下载!

编程道与术

Java 开源 TDD 下载 代码

Zookeeper Watcher 流程分析(结合源码)

CoderLi

Java zookeeper 源码分析 后端 Watcher

华硕灵珑II笔记本电脑——自由work不设限

最新动态

2w字长文!手撸一套 Java 基础面试题

cxuan

Java 后端 Java25周年

如何基于 OAM 编写一个扩展 Trait?

钱王骞

云原生 k8s OAM

中电标协提出并归口:《政务APP评价指标》团体标准开启制订工作

博睿数据

App 标准化 中电标协 政务信息化 博睿宏远

2020年5月云主机性能评测报告

博睿数据

云计算 服务器 公有云 机房 云主机

Java 序列化

CoderLi

Java 程序员 后端 序列化

重学 Java 设计模式:实战外观模式「基于SpringBoot开发门面模式中间件,统一控制接口白名单场景」

小傅哥

设计模式 小傅哥 重构 代码质量 代码坏味道

下周要开始“卖桃者说”代班计划了

霍太稳@极客邦科技

日常

JAVA 中的 CAS

犀利豆

Java 并发 CAS

知乎Matisse图片库在Android10上拍照,预览问题

三爻

android

iPad配置OpenVPN客户端

wong

ipad OpenVPN

副业月赚 10 万的程序员是如何做销售的?

非著名程序员

程序员 独立开发者 程序人生 提升认知

自由是不是随心所欲?

Neco.W

个人成长 自由 控制

月薪 3W 的 Apple 微信编辑是这么发文章的 |如何发类似 Apple 微信公众号的文章效果

陈东泽 EuryChen

CSS 微信 大前端 apple 微信公众号

原创 | TDD工具集:JUnit、AssertJ和Mockito (二十一)编写测试-测试模板

编程道与术

Java 编程 TDD 单元测试 JUNI

游戏夜读 | 如何制作游戏?

game1night

面向对象的三个基本特征(要素)

彭阿三

三要素 三个基本特征 封装、继承、多态

kubernetes简单入门(多图少字版)

绿星雪碧

Kubernetes 入门

常用运筹学软件整理

张利东

架构师训练营学习总结——框架设计【第二周】

王海

极客大学架构师训练营

如何让程序员变得没朋友

四猿外

程序员 个人感悟 技术人生 经验分享

Zookeeper 序列化

CoderLi

Java zookeeper 源码分析 后端

Zookeeper-Access Control List(ACL)

CoderLi

Java zookeeper 源码分析 后端

情绪管理 - ABC理论

石云升

情绪控制 ABC理论 费斯汀格法则

架构师训练营作业(第二周)

王海

极客大学架构师训练营

机器学习算法评估指标—2D语义分割

做技术BP的文案Gou

学习 2D 评估标准 语义分割

ZooKeeper 数据模型:节点的特性与应用

CoderLi

zookeeper 源码分析 数据模型 节点

构建和部署微服务的模式_SOA_Jan Stenberg_InfoQ精选文章