QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

关于构建可进化的系统

  • 2011-06-30
  • 本文字数:892 字

    阅读完需:约 3 分钟

在最近一篇帖子上, Mike Amundsen 写了构建可进化的系统,对他的演讲“超越 REST:一个打造稳定、可进化的 Web 应用程序的方案”做了补充。在那场演讲里,他希望回答的问题是“我们如何设计和实现分布式网络解决方案,使之随着时间的推移仍然保持稳定和灵活?”他说:

……把一个“应用”放到可以触及的“Web 上”一点都不难,难就难在实现一个解决方案,随着时间的推移能够成功地进化。我认为一个成功的方案包括接受和采纳分布式网络架构的一些现实,隔离环境里的临时因素,以及把你的大部分创造力放在以一种灵活和可进化的方式来表达重要的问题域信息上。

根据 Mike 的说法,回答这个问题的关键在于着眼于系统的三个方面:

* 传输协议——他认为目前创建分布式系统的工具都在向开发者隐藏了底层的协议,为了提高抽象性,通常牺牲了传输协议与生俱来的优点。

处理 HTTP 的最好方式是接纳它,让 HTTP 把系统设计师引向有损耗的(lossy)、零散的(chunky)和无状态的设计,接受 HTTP 的稳定性对于你的实现来说很少改变这个本性……这样你的所有分布式网络设计都会体现 HTTP 本身的强大、稳定和可靠。

* 状态管理——作为识别和接纳协议的不同方面的一个特例,状态管理通常用在本来没有状态的协议上(在这里是 HTTP)维护有状态的通讯。

与其不断地发明新的方式,企图忽视分布式网络交互中的无状态本性,设计师和开发者应该停止使用他们的临时个性化数据污染公共网络,客户端应该记录用户所需的信息(这正是为什么它们通常被称作用户代理)。

* 领域语义——他接着解释如何使用媒体类型在客户端和服务器之间共享领域语义。

正是媒体类型为各方定制消息提供了可能;共享它们对每个数据元素和超链接的含义的理解。正是媒体类型专门提供了注册表,各方都可以在这里找到共享出来的对问题域的理解,以便在相互认可的领域层面实现解决方案。

最后,他总结道

构建可进化的系统并不是非常复杂。它需要清除地理解传输协议,小心地隔离临时数据,并专注于通过共享消息恰当地表达问题域。这未必是一个复杂的过程,但确实需要付出努力。

你能举出企业或者其他地方的例子,同时具备所有这些方面的吗?

查看英文原文: On Building Evolvable Systems

2011-06-30 08:442107

评论

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

详解CAN总线:CAN总线报文格式—数据帧

不脱发的程序猿

汽车电子 CAN总线 CAN协议 CAN总线报文格式 CAN数据帧

信息论与编码(一)| 信源分类与数学模型

timerring

9月日更 信息熵

【编程实践】出行无忧,利用Python爬取天气预报

迷彩

爬虫 爬虫教程 9月月更 Scarpy

架构师的十八般武艺:可观测性

agnostic

可观测性

评判优秀程序员标准:“高并发”,竟被一份Github万星笔记讲清楚了

Geek_0c76c3

Java 数据库 架构 开发 面经

Shell编程学习(二)

Studying_swz

Shell 脚本 9月月更

架构实战营模块1作业

陌生流云

架构实战营

互联网架构师联合总结的Java面试攻略,GitHub标星30K!

程序知音

java面试 大厂面试 java架构师 后端技术 Java面试八股文

模块二

早安

极客时间架构师训练营

详解CAN总线:CAN节点硬件构成方案

不脱发的程序猿

嵌入式 汽车电子 CAN总线 CAN节点硬件构成方案 CAN节点

吃透阿里大佬分享的这份Java面试神技,3个月斩获8家offer

Geek_0c76c3

Java 数据库 开源 架构 开发

邓荣伟:稳定支撑每秒百万笔支付请求,支付宝数据库架构的过去、现在与未来

OceanBase 数据库

全网首次公开!阿里巴巴1685页Java面试突击核心讲(基础到高级足足涵盖19个Java核心技术)

Java永远的神

数据库 spring 程序员 程序人生 java面试

竟拿到阿里45K高薪offer!只因他刷了这份阿里微服务天花板手册

Geek_0c76c3

Java 数据库 开源 架构 面经

Github爆火!阿里最新发布的《高并发核心编程笔记》PDF文档

Geek_0c76c3

Java 数据库 开源 架构 开发

OceanBase存储层代码解读(四):宏块的垃圾回收和坏块检查

OceanBase 数据库

遭不住了!Alibaba开源内网“M9”级别高并发编程全彩版进阶手册

程序知音

Java 架构 并发编程 多线程与高并发 后端技术

全网首次公开:Java面试参考指南V3.0版(完美契合当下所有互联网公司面试需求)

Java全栈架构师

数据库 程序人生 后端 高并发 Java 面试

大厂“毕业”半月,面试数十家公司,凭借这份面试总结涨获7家Offer,成功入职

程序员小毕

spring 程序员 程序人生 JVM Java 面试

MyBatisPlus学习

Geek_6689b6

入门 MyBatisPlus 9月月更

详解CAN总线:CAN协议分层结构及功能

不脱发的程序猿

CAN总线 CAN协议 CAN协议分层结构及功能

直冲云霄,阿里大牛耗时49天整理12W字面试手册,押题准确率直冲95%

Geek_0c76c3

Java 数据库 开源 程序员 架构

阿里最新秋招面经,腾讯/美团/字节1万道Java中高级面试题

程序知音

Java 大厂面试 后端技术 Java面试八股文 阿里面试

【编程实践】提高工作效率,避免重复且枯燥的操作,利用Python自动发送邮件

迷彩

SMTP 邮件协议 9月月更 Python邮件发送

[架构实战] 课后作业

爱学习的麦子

Shell编程学习(一)

Studying_swz

Shell 初阶 9月月更

详解CAN总线:标准数据帧和扩展数据帧

不脱发的程序猿

汽车电子 通信协议 CAN总线 CAN协议 标准数据帧和扩展数据帧

Canvas+Javascript实现点击小球的爆炸效果

Sam9029

JavaScript canvas 9月月更 小球爆炸

微信业务架构图与学生管理系统架构图

冷夫冲

架构实战营 #架构实战营 架构师实战营 「架构实战营」

阿里内网流传的9w字图解网络(全彩版)GitHub现已下载量过百万

程序知音

Java 程序员 计算机网络 后端技术 计算机底层

阿里五位MySQL封神大佬耗17个月总结出53章性能优化法则

Geek_0c76c3

Java 数据库 开源 程序员 开发

关于构建可进化的系统_SOA_Dilip Krishnan_InfoQ精选文章