写点什么

microXchg 微服务大会第一日总结:DDD、平台以及对企业的影响

  • 2017-03-05
  • 本文字数:2758 字

    阅读完需:约 9 分钟

在柏林举办的 microXchg 大会上,一组软件开发实践人士分享了关于微服务架构风格的最新理念。讨论的话题包括功能性服务设计(Functional Service Design)、集成领域驱动设计(DDD,Domain-Driven-Design)和 REST、使用嵌入技术(Transclusion)创建基于微服务架构的网站、微服务运行时平台的选择、微服务对企业和员工的影响,以及如何在物联网应用中使用微服务。

microXchg 微服务大会的开场报告是由 Uwe Friedrichsen 呈现的,报告探讨了“弹性功能性服务设计”中的核心理念。InfoQ 新闻已经报道了该演讲的细节内容,关键要点包括:微服务开发人员应该学会容错设计模式(例如回路熔断器和舱壁)和缓存,但不能用于改善已经很糟糕(过度耦合)的系统设计;理解领域驱动设计(DDD,Domain-Driven Design)和模块化的重要性;注重可替换性而非可重用性;对系统的动态行为建模等。

不要从静态领域模型着手,能够给我们带来惊喜的是系统的动态行为。

之后 Oliver Gierke 呈现了他的报告“ DDD 和 REST:领域驱动设计 API 还是 Web ”。他在报告一开始就向听众推荐了 InfoQ 的《领域驱动设计快速入门》一书,因为这本书提供了很好的DDD 核心理念入门。Gierke 建议软件工程师在开发领域模型时应尽量“使隐藏的概念清晰化”,并推荐通过观看“在DDD 中大规模使用Value Object ”,以进一步理解报告的主题。虽然一些开发人员可能会参考数据库模式建立传统的领域模型,但是DDD 类型的模型比简单的外键关系等其他模型更能清晰地表达业务理念。

DDD 领域模型比数据库模式揭示了更多的信息。

Gierke 明确指出,REST 并不等同于“提供 HTTP 的 CRUD”。在设计展现给用户的数据(即视图)时,必须注意要加入对这个问题的关注。报告中展示了一个 API 操作的四层模型,该模型涵盖了四个方面的内容,它们分别是:借助 API 的显式操作、一些事件形式的操作、事件溯源(ES,Event Sourcing)和命令查询职责分离(CQRS,Command Query Responsiblility Segregation)。Gierke 指出,“超媒体即应用状态引擎(HATEOAS,Hypermedia As The Engine Of Application State)”这一概念对于客户通信而言非常有用,可被用于与支持动作和状态转移的客户端交互,而非将它们发布为独立的领域相关文档。这或许是通过增加领域知识的复杂性来降低客户端协议的复杂性,但是 Gierke 建议听众考虑一下这种权衡是否有用:

HATEOAS 被用于给支持动作和状态转移的客户端发出指示。这或许是通过增加领域知识的复杂性来降低客户端协议的复杂性,但是你应问问自己:“什么会变更得更频繁,是业务规则还是所使用的协议?”

第三个报告是由 Gustaf Nilsson Kotte 呈现的“微服务网站”,报告探讨了高效构建网站的原则,这些网站虽然以单一站点形式交付,但是由多个微服务组成。报告的核心前提是每个微服务应该提供自己的前端,面向用户的页面应该使用嵌入技术构建。“页面片段缓存(ESI,Edge-Side Includes)”可以在服务器端提供嵌入技术,例如通过 Akamai Varnish 。还有一些框架在基于 JavaScript 的客户端提供嵌入技术,例如 AngularJS h-include 。报告中展示了每种方法的一些优缺点。

服务器端嵌入技术对比客户端嵌入技术

Kotte 在对报告做总结时指出,基于微服务的网站应以持续集成、去中心化管理和优化移动设备和蜂窝网络的性能为目标。在不考虑全局客户端依赖的情况下嵌入(Transclusing)服务器端资源,这可作为一种分解网页(和微服务)的方法,这个方法可以推动上述目标的达成。更多信息可以阅读 Kotte 在近期撰写的“微服务网站”一文。

此后, Dustin Huptas 做了名为“ AaaS,任何事情即服务。我们应如何选型?”的演讲。他提请听众注意,虽然一些服务提供商提供了以“某事即服务”命名的部署平台,但是应该慎重选择最适合自身应用的解决方案。Huptas 认为单体应用和经典的 SOA 应用最适合运行在物理的基础设施和基础设施即服务(IaaS,Infrastructure as a Service)上,基于微服务的应用最适合使用 Iaas、平台即服务(PaaS,Platform as a Service)以及新出现的功能即服务(FaaS,Function as a Service),而“无服务”类型应用最适合使用 PaaS 和 FaaS。

架构 / 技术即服务模型。

Huptas 给出了一种“自适应IT 立方体”,并探讨了从任一部署平台迁移到其它平台时所应考虑的架构、技术和企业(包括文化和过程)问题。必须注意要使用渐进的方式做迁移,而且迁移行动必须得到企业的认同。例如,软件应用的迁移或更新应该具有长期的承诺。

随后, Daniel Bryant (即这篇新闻的作者)做了题目为“微服务:对企业和员工的影响”的报告。报告的核心内容指出了采用微服务时存在着很多挑战,这些挑战主要围绕着企业、过程和人员方面的问题。Bryant 建议在实现一个基于微服务的应用时,企业应该聚焦于定义和沟通清晰的目标(包括商业价值和技术策略),在整个企业和技术栈上做优化反馈,并确保在企业中清晰地定义职责。

策略愿景的沟通。

Bryant 建议企业在设定目标前必须对状态有一个清晰的认识,并建议使用 Wardley 映射价值流程分析工具。强大的技术领导力(在整个团队中共享)同样非常重要。此外,“ InnerSource ”模型有助于更好地应用从大规模开源项目中获得的经验教训。为显示业务价值、架构质量和操作的有效性,必须将度量和信号“添加”到微服务中。Bryant 在对演讲做总结时,建议在采用 DevOps 方法的开始阶段就要定义好职责,并指出持续集成通常是驱动软件交付过程持续改进的催化剂,尤其当构建基于微服务应用的集成复杂度与日俱增。

第一日大会以 Fred George 的主题演讲“家庭中的物联网和微服务”结束。George 指出,我们当前生活在一个“智能代理时代”,充斥着智能助手技术,例如Apple Siri,Google Home 和Microsoft Cortana。这些物联网技术的主要创新点并非在于语音识别技术上,而是在于可以由终端用户创建的后台服务交互。

George 展示了自己家中部署的物联网技术,其中包括 Amazon Echo 、Phillips 的物联网灯泡、Apple TV 和具备物联网功能的交换机。这些设备的控制软件是使用 Ruby 和 Java 开发的微服务,它们通过 Docker Swarm 部署,并使用 RabbitMQ 事件总线作为通信手段。将所有物联网设备黏合在一起的软件开发技术原则包括:即时(just-in-time)设计、实现极小化的面向行为服务、将动作和结论作为全局事件进行发布,以及基于硬件的幂等性和冗余性构建可靠性。

microXchg 大会于今年 2 月 16 日到 17 日在柏林召开。可以在大会的YouTube 频道上看到所有报告的视频记录。

查看英文原文: microXchg Microservices Conference Day One Summary: DDD, Platforms, and Organisational Impact


感谢薛命灯对本文的审校。

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

2017-03-05 18:001930
用户头像

发布了 227 篇内容, 共 78.6 次阅读, 收获喜欢 28 次。

关注

评论

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

Why me, why now Jan 25, 2021

王泰

28天写作

生活,在哪里都一样

熊斌

个人成长 28天写作

鸿蒙开发者beta!Github标星25K+超火的Android实战项目,赶紧收藏!

欢喜学安卓

android 程序员 面试 移动开发

企业项目迁移go-zero全攻略(一)

万俊峰Kevin

微服务 microservice Go 语言

PolarDB-X 并行计算框架

PolarDB-X

数据库 sql 大数据

OpsMind 前端低代码开发平台——MPlatform

OpsMind

大前端 低代码

当公元成了可以考古的年代「幻想短篇 17/28」

道伟

28天写作

年会游戏:猜数字(前端特效)

德育处主任

CSS html 大前端 js 28天写作

大数据场景下Volcano高效调度能力实践

华为云开发者联盟

大数据 spark Kubernetes Volcano application

MySQL 5.6.35 索引优化导致的死锁案例解析

vivo互联网技术

MySQL 数据库 死锁

架构师训练营 - 第四周作业

Mark

聊聊 Git 的三种传输协议及实现

Zoker

git 架构 DevOps

作业2

瑾瑾呀

基于KubeEdge和Kuiper的边缘流式数据处理实践

华为云开发者联盟

spark 边缘计算 kuberedge kuiper 边缘流式数据

第二章作业(一)

LouisN

使用 AWS CDK Python 从零开始构建 EKS 集群

郭旭东

AWS IaC AWS CDK

Redis为什么变慢了?一文讲透如何排查Redis性能问题 | 万字长文

Kaito

redis 性能优化 后端

循环?还是递归?

xcbeyond

Java 算法 递归 28天写作

使用 external version 进行 Elasticsearch 并发控制

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

区块链数字钱包APP系统开发|区块链数字钱包软件开发

系统开发

架构师训练营第4周学习总结



与前端训练营的日子 --Week13

SamGo

学习

android开发三大框架!国内一线互联网公司面试题汇总,终局之战

欢喜学安卓

android 程序员 面试 移动开发

碎碎念之「技术文档写作风格」

Justin

碎碎念 文档 28天写作 写作技巧

[编程参考-连载] Snowflake 算法原理与对应的 Python 实现

穿甲兵

Python 算法

数据库性能调优之始: analyze统计信息

华为云开发者联盟

数据库 sql GaussDB 语义

文章类网站前端日期的显示该如何选择时区?

IT蜗壳-Tango

七日更 服务器时区

区块链钱包APP系统开发|区块链钱包软件开发

系统开发

字节跳动&火山引擎:企业级机器学习平台建设实践

机器学习 云计算 AI 云原生

在 ArrayList 使用冒泡法

sinsy

ArrayList 冒泡法

管理的亲和力是怎么练成的?

一笑

管理 沟通与管理 28天写作

microXchg微服务大会第一日总结:DDD、平台以及对企业的影响_语言 & 开发_Daniel Bryant_InfoQ精选文章