写点什么

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:002270
用户头像

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

关注

评论

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

mysql的 int 类型,刨析返回类型为BigDicemal 类型的奇怪现象

Java 程序员 后端

Redis实战(五)-字符串,kafka基本原理

Java 程序员 后端

redis实现分布式限流 结合Lua脚本,Java开发还不会这些

Java 程序员 后端

MySQL各种锁详情,实战分析

Java 程序员 后端

Nginx架构浅析:为什么不用多线程模型管理连接与处理逻辑业务?

Java 程序员 后端

Nginx面试三连问:如何工作?负载均衡策略有哪些

Java 程序员 后端

MySQL慢查询,一口从天而降的锅!,java程序开发基础彭政答案

Java 程序员 后端

Mysql进阶三板斧(一)带你彻底搞懂View视图的原理及应用

Java 程序员 后端

MySQL进阶三板斧(三)看清,java高级框架思维导图

Java 程序员 后端

Redis 中 RDB 和 AOF 持久化有啥区别?看这儿,你就懂了

Java 程序员 后端

P8大牛带你细谈架构中的限流与计数器的实现方式

Java 程序员 后端

RabbitMQ实现即时通讯居然如此简单!后端代码都省得写了

Java 程序员 后端

mysql的timestamp会存在时区问题?,java技术专家方向

Java 程序员 后端

Netty相关面试题汇总,java并发编程电子书

Java 程序员 后端

Netty编解码开发+多协议开发和应用+源码,Java开发经验谈

Java 程序员 后端

微信朋友圈复杂度分析

abingagl

Offer拿来吧你!秒杀系统?这不是必考的嘛(1)

Java 程序员 后端

Oracle 常用SQL语句大全(精),java框架学习顺序

Java 程序员 后端

Redis与MySQL数据双写一致性工程落地案例,java最新技术百度云

Java 程序员 后端

MySQL是如何恢复到某一天的某一秒的状态?,现在做Java开发有前途吗

Java 程序员 后端

MySQL索引原理B+树,java学习视频百度云盘

Java 程序员 后端

MySQL面试题:谈谈MySQL 索引,B,java程序员面试算法宝典pdf下载

Java 程序员 后端

Offer拿来吧你!秒杀系统?这不是必考的嘛,kafka与rabbitmq面试题

Java 程序员 后端

Mysql优化提高笔记整理,来自于一位鹅厂大佬的笔记

Java 程序员 后端

Redis 变慢了?那你这样试试,不行就捶我,java面试问职业规划

Java 程序员 后端

Redis 最全性能监控指标:汇总实战,实战java虚拟机葛一鸣第二版pdf

Java 程序员 后端

Redis事务详述,java多并发面试题

Java 程序员 后端

Redis从入门到精通,至少要看看这篇,java医疗管理系统技术描述

Java 程序员 后端

OpenKruise :SidecarSet 助力 Mesh 容器热升级

Java 程序员 后端

quartz-2,linux视频教程百度云

Java 程序员 后端

Redis入门HelloWorld,java入门视频教程

Java 程序员 后端

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