写点什么

InfoQ 中文站架构社区 2007 年度十大新闻

  • 2007-12-29
  • 本文字数:2200 字

    阅读完需:约 7 分钟

架构社区是年轻的 InfoQ 里面最年轻的一个社区,诞生只有半年时间。在“架构”这个意思不是很明确的大词背后,我们倒是做了不少实实在在的讨论。

其实在这个社区里没有什么“新闻”,这么说的原因是,一方面报道的内容多半不是新闻事件,而是言论交锋;另一方面讨论的内容也常常是把我们习以为常的旧东西再拿出来重新剖析。而且讨论的问题也不见得会有一定的答案,不过我们的目的也不是寻找公式化的回答,我们要的是想清楚每个选择的利弊和权衡。

要是能让开发者反思,再反思,这个社区的目的也就达到了吧。

1. DSL:单一语言开发的终结者?
许多年以来,对于软件项目,企业软件开发的主流实践一直都倾向于在单一的通用编程语言上进行标准化,从而使得 Java 和 C#成为今天编程语言的主流选择。随着越来越多的目光开始投向 DSL,也许我们的前脚已经踏在了一道新的门槛之上,向前望去,我们会发现在软件项目中采用多种语言已经成为一个标准,但 80 年代和 90 年代初出现的问题不会重现。

点评:DSL 离“领域专家说的语言”还很远,“让领域专家去编程”已经基本被 MDA、BPM 的实践所否定。不过,我们已经从为工作选择合适的工具、框架,进步到了为工作选择合适的语言,不管 OOP、AOP、FP……通通为我所用。再说,XML 配置、连贯接口这些不是很像语言的 DSL,我们已经用很久了吧。

2.真正的线性可伸缩性需要新的模式和中间件架构吗?
Nati Shalom 声称已有基于分层的中间件不能用于真正的线性可伸缩性。他提出了新的基于自给自足处理单元的中间件栈(middleware stack)作为替代,它支持分区 / 向外扩展(scale-out)模型。几年前,微软的 Pat Helland 就提出了某种事务性模式及形式描述,它们可被用在被他称为准无限可伸缩的系统中。

点评:Web 2.0 一流行,可伸缩性就很敏感了。数据分区、缓存共享、读写分离……一直到极端的完全无状态模型,那么多努力的成果让投入 / 产出的曲线多少变直了一些。棘手的事务问题这此也给出了不错的解决方案。不过,成天可伸缩性挂在嘴边的人,还是要先问一下自己,到底什么是可伸缩性。

3. API 设计的“不可承受之轻”
API 的设计影响着所有的开发者。有些 API 用起来很舒服,而有些则用起来让人焦头烂额,更有甚者,让人完全丧失了继续用这套 API 来做开发的勇气。但它们的区别在哪里呢?是哪种品质会让一套 API 易用而另一套复杂难解?ACM Queue 最近刚发布了 Michi Henning 的一篇有关 API 设计的文章,在文中作者对这些方面进行了分析。

点评:API 设计是一件基本但重要的事情,但好像我们都没有这方面的系统教育。

4.软件架构的十大错误
IASA 成员 Eoin Woods 发表了一篇文章讲述他所认为的十大软件架构错误——常常要碰得头破血流才会得到的一些教训。

点评:每个人都犯过的错误,也还要再犯的错误。希望下次再犯的时候,知道自己错在哪里就好了。这样想太悲观了吗?

5.一图胜千言?
一图总是胜过千言?Dean Wampler 在新文章《为什么我们要写代码而不只是画图就好》中主张,在软件行业里,前面那句话通常要反过来说才对。

点评:不管图形还是文字,说到底还是要看它的抽象程度适合不适合要表达的内容。

6.为灵活性和健壮性而设计:异步消息模型、OOP 和函数式编程
按照 Pragmatic Programmers 的说法在 OOP 中最好避免围绕返回值来设计。Michael Feathers 认为最好同时也使用异步消息模型,这样有助于提高适应性和健壮性。这样的做法与 Erlang 的模型相吻合,虽然违背了一些纯函数式编程的原则。

点评:异步、无状态模型的优点很多人都看得到,但要是谈到在具体的用例中采用异步、无状态模型,很多人就说“这件事情本质上就是同步的”——真的吗? 还是你需要好好换一下思维方式?

7. RDBMS 是不足够的
在服务的世界里,RDBMS 并不能适合所有的问题。面向文档的分布式数据库(Document Oriented Distributed Databases)试图解决该问题,并为存储文档再提供一种新途径。CouchDB(以 Erlang 编写)正从 Alpha 阶段日渐向前发展。InfoQ 找来了 Anthony Eden,他正在开发的 RDDB 用 Ruby 实现了同样的概念。

点评:RDBMS 的地位难以撼动,但在面对分布式服务的时候,有必要打破一些 RDBMS 的规条,才能满足性能和可伸缩性的需求。这又是一次新的尝试。

8. Duck Typing 与协议 vs. 继承
最近在 RubyTalk 邮件列表中发生了关于何时使用 is_a? 以及何时使用 respond_to? 的争论。这强调了这样一种状况:对象可以都响应同样的接口,但是却没有共同的超类。让我们来分析下这次争论,然后看看诸如 Smalltalk、Erlang 和 Scala 其他这些编程语言是如何解决的。

点评:最基本的 OO 概念也会被翻出来“学而时习之”。跨出语言的局限才能把概念的本质看得更清楚一点。

9.依赖注入是否值得?
在博客的世界里进行了一场关于使用依赖注入之优点和缺点的有趣讨论。论题是:依赖注入是否真的值得?

点评:用惯用熟的 DI,为什么要用它倒成了问题。且不管反方的观点成不成立,让我们再想清楚,为什么要用依赖注入——松耦合。

10.预先设计的大架构——过早考虑伸缩性之一例?
请看看博客作者们对“过早考虑可伸缩性”这个问题的回应。问题是——在设计应用程序的时候,应该花多少精力去为伸缩性打基础?

点评:伸缩性不是优化,它是一项需求,我们从一开始就应该考虑它。 对未来的规模估计不足,那到时候就要返工,可能使业务的发展停滞;如果估计得过分,那又是浪费,而且可能错失市场时机。理论上是存在一个投入 / 产出比的拐点,可是它在哪里呢?

2007-12-29 10:131165
用户头像

发布了 225 篇内容, 共 75.4 次阅读, 收获喜欢 53 次。

关注

评论

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

半夜服务器告警不再错过!运维人员必备的语音通知方案

外滩运维专家

电话报警 电话推送 电话接口 监控电话 语音监控

漏洞赏金猎手入门指南:从零开始赚取高额奖金的核心方法论

qife122

渗透测试 漏洞挖掘

大数据-46 Redis RDB 持久化机制详解:原理、配置与优缺点解析

武子康

Java redis 大数据 缓存 分布式

从Web 2.0到Agentic Web:MCP对智能代理生态构建的推动作用

申公豹

Web

AI-Compass DeepSearch深度搜索生态:集成阿里ZeroSearch、字节DeerFlow、MindSearch等前沿平台,实现超越传统关键词匹配的智能信息检索革命

汀丶人工智能

StarRocks × MinIO:打造灵活高效的存算分离方案

StarRocks

Docker 存算分离 StarRocks minlo quickstart

AI-Compass Embedding模型模块:15+主流向量化技术的多模态语义表示生态

汀丶人工智能

AI-Compass RLHF人类反馈强化学习技术栈:集成TRL、OpenRLHF、veRL等框架,涵盖PPO、DPO算法实现大模型人类价值对齐

汀丶人工智能

AI-Compass LLM合集-多模态模块:30+前沿大模型技术生态,涵盖GPT-4V、Gemini Vision等国际领先与通义千问VL等国产优秀模型

汀丶人工智能

淘宝商品图片搜索API响应数据解析

tbapi

淘宝API接口 天猫API接口 淘宝图片搜索接口 淘宝拍立淘接口 天猫拍立淘接口

Flink exactly once sink 实现

Joseph295

使用AWS KMS和ML-DSA创建后量子签名指南

qife122

AWS KMS ML-DSA

MKVToolNix for Mac mkv视频编辑工具

晨光熹微

AI-Compass NLP2SQL模块:集成Chat2DB、DB-GPT、MindsDB等核心工具,实现自然语言到SQL转换的智能化数据查询生态系统

汀丶人工智能

AI-Compass GraphRAG技术生态:集成微软GraphRAG、蚂蚁KAG等主流框架,融合知识图谱与大语言模型实现智能检索生成

汀丶人工智能

​​从数据到决策:低代码+AI如何简化并加速可视化工作流?

不在线第一只蜗牛

一篇说人话的文章,告诉你 Django、Flask、FastAPI 到底怎么选

程序员晚枫

django flask FastApi

Recompress for Mac PDF文件压缩软件

晨光熹微

AI-Compass LLM训练框架生态:整合ms-swift、Unsloth、Megatron-LM等核心框架

汀丶人工智能

以故事+动画,让PID知识通俗易懂部分二

芯动大师

AI招聘机器人公司Paradox.ai因弱密码泄露数百万求职者数据

qife122

网络安全 密码安全

摆脱偏见,Mac也要逆袭“游戏圈”

阿拉灯神丁

crossover MacBook M1 如何在Mac上运行win游戏 Mac游戏推荐 游戏本

Netflix 数据网关实践

俞凡

架构 大厂实践

阿里巴巴为什么禁止超过3张表join?

量贩潮汐·WholesaleTide

前端

MCP协议中的不安全凭证存储漏洞分析与安全实践

qife122

MCP 凭证安全

基于YOLOv8的AI虫子种类识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

申公豹

yolov8

以故事+动画方式,让PID知识通俗易懂部分一

芯动大师

从 Berlinterop 看三大确定性趋势:以太坊升级与 Layer 2 生态新篇章

NFT Research

Ethereum blockchain web3、

javax.security.auth.login.LoginException: null (68)

刘大猫

人工智能 数据挖掘 算法 数据分析 LoginException

AI-Compass(AI百科全书开源):构建最全面的AI学习与实践生态,服务AI全群体

汀丶人工智能

人工智能 大模型

AI-Compass前沿速览:ChatGPT Agent、Kimi2、Mistral语音模型、Grok AI情感陪伴、百度Tizzy、有言数字人

汀丶人工智能

人工智能 大模型

InfoQ中文站架构社区2007年度十大新闻_InfoQ_郭晓刚_InfoQ精选文章