慣性聚合 関心のあるブログ、ニュース、テクノロジーを効率的に追跡
原文を読む 慣性聚合で開く

おすすめ購読元

博客园 - 司徒正美
V
V2EX
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
aimingoo的专栏
aimingoo的专栏
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
A
About on SuperTechFans
月光博客
月光博客
T
The Blog of Author Tim Ferriss
宝玉的分享
宝玉的分享
Martin Fowler
Martin Fowler
博客园 - 聂微东
The GitHub Blog
The GitHub Blog
V
Visual Studio Blog
WordPress大学
WordPress大学
酷 壳 – CoolShell
酷 壳 – CoolShell
Engineering at Meta
Engineering at Meta
GbyAI
GbyAI

阮一峰的网络日志

科技爱好者周刊(第 396 期):互联网通信的替代方案 科技爱好者周刊(第 396 期):互联网通信的替代方案 - 阮一峰的网络日志 科技爱好者周刊(第 395 期):软件开发的第三种方式 科技爱好者周刊(第 395 期):软件开发的第三种方式 - 阮一峰的网络日志 科技爱好者周刊(第 393 期):脑腐状态 科技爱好者周刊(第 392 期):axios 投毒与好莱坞式骗术 科技爱好者周刊(第 391 期):AI 的贫富分化 科技爱好者周刊(第 390 期):没有语料,大模型就是智障 套壳中国大模型撑起500亿美元估值?扒一扒 Cursor 的"套壳"疑云 科技爱好者周刊(第 389 期):未来如何招聘程序员 科技爱好者周刊(第 388 期):测试是新的护城河 零安装的"云养虾":ArkClaw 使用指南 科技爱好者周刊(第 387 期):你是领先的 科技爱好者周刊(第 386 期):当外卖员接入 AI 字节全家桶 Seed 2.0 + TRAE 玩转 Skill 科技爱好者周刊(第 385 期):马斯克害怕中国车企吗? 智谱旗舰 GLM-5 实测:对比 Opus 4.6 和 GPT-5.3-Codex 科技爱好者周刊(第 384 期):为什么软件股下跌 科技爱好者周刊(第 383 期):你是第几级 AI 编程 Kimi 的一体化,Manus 的分层 科技爱好者周刊(第 382 期):独立软件的黄昏 AI native Workspace 也许是智能体的下一阶段 科技爱好者周刊(第 381 期):中国 AI 大模型领导者在想什么 科技爱好者周刊(第 380 期):为什么人们拥抱"不对称收益" 科技爱好者周刊(第 379 期):《硅谷钢铁侠》摘录 我如何用 AI 处理历史遗留代码:MiniMax M2.1 升级体验 科技爱好者周刊(第 378 期):预测是新的互联网热点 科技爱好者周刊(第 377 期):14万美元的贫困线 科技爱好者周刊(第 376 期):太空数据中心的争议 科技爱好者周刊(第 375 期):一扇门的 Bug 终于有人做了 Subagent,TRAE 国内版 SOLO 模式来了 科技爱好者周刊(第 374 期):6GHz 的问题 VS Code 使用国产大模型 MiniMax M2 教程 科技爱好者周刊(第 373 期):数据模型是新产品的核心 国产大模型接入 Claude Code 教程:以 Doubao-Seed-Code 为例 科技爱好者周刊(第 372 期):软件界面如何设计 大模型比拼:MiniMax M2 vs GLM 4.6 vs Claude Sonnet 4.5 科技爱好者周刊(第 371 期):一个乐观主义者的专访 科技爱好者周刊(第 370 期):正确的代码高亮 错误处理:异常好于状态码 科技爱好者周刊(第 369 期):Tim 与罗永浩的对谈 科技爱好者周刊(第 368 期):不要这样管理软件团队 一天之内,智谱和 Anthropic 都发了最强编程模型 科技爱好者周刊(第 367 期):Nano Banana 的几个妙用 科技爱好者周刊(第 366 期):旧金山疯狂的 AI 广告 科技爱好者周刊(第 365 期):流量变现正在崩塌 科技爱好者周刊(第 364 期):最难还原的魔方 科技爱好者周刊(第 363 期):最好懂的神经网络解释 科技爱好者周刊(第 362 期):GitHub 工程师谈系统设计 科技爱好者周刊(第 361 期):暗网 Tor 安全吗?
マイクロサービスとは何ですか?
阮一峰 · 2022-04-29 · via 阮一峰的网络日志

マイクロサービス(microservice)はソフトウェアアーキテクチャであり、ますます注目を集めています。

しかし、それは何を意味しますか?どのようなアーキテクチャをマイクロサービスと呼べるのでしょうか?

インターネット上には多くの記事がありますが、それらはあまり複雑で、初心者が理解しにくいです。私はこの概念は実は非常にシンプルで、通俗的に説明できると考えています。

一、モノリシックソフトウェア

マイクロサービスを理解するには、まずソフトウェアアーキテクチャの進化を理解する必要があります。

初期のソフトウェアでは、すべての機能が一緒に書かれており、これをモノリシックアーキテクチャ(monolithic software)と呼びます。

ソフトウェア全体が単一のまとまりであり、一体化した機械のようです。

考えると、ソフトウェアの機能が多いほど、モノリシックアーキテクチャはより複雑になり、多くの欠点も露呈してきます。

(1)すべての機能が結合しており、お互いに影響し合い、最終的に管理が困難になる。

(2)一行のコードを修正するだけで、ソフトウェア全体を再構築してデプロイする必要があり、コストが非常に高い。

(3)ソフトウェアが一つのまとまりになっているため、各機能を個別に開発・テストすることは不可能で、全体として開発・テストしなければならず、これにより水の流れ式開発モデルを導入する必要がある。

上記の三つの理由の詳細な分析は、以前の記事『ソフトウェア工学の最大の難題』を参照してください。

要するに、モノリシックアーキテクチャの大規模ソフトウェアは、開発速度が遅く、メンテナンスやアップグレードが困難な複雑なコードを形成し、プログラマーにとって重荷となる。

二、サービス指向アーキテクチャ

上記の問題を解決するために、早い段階でコードの結合を打破し、モノリシックアーキテクチャを分割し、ソフトウェアを個々の独立した機能単位に分割する必要があると提案されてきた。

約20年前、インターネットの出現とともに、機能単位が遠隔地の「サービス」という形式で提供できるようになり、「サービス指向アーキテクチャ」(service-oriented architecture、略称SOA)が生まれました。

「サービス」とは、バックグラウンドで絶えず動作し、特定の機能を提供するプログラムのことです。最も一般的なサービスはWebサービスで、80番ポートを通じて外部にウェブページのアクセスを提供します。

「サービス指向アーキテクチャ」は、大きな単体プログラムを、個々の独立したサービス、つまり小さなプログラムに分割するものです。各サービスは独立した機能単位であり、異なる機能を担い、サービス間は通信プロトコルで接続されています。

このアーキテクチャには多くの利点があります。

(1)各サービスの機能が単一で、小型ソフトウェアに相当し、開発とテストが容易です。

(2)各サービスは独立して動作するため、アーキテクチャが簡素化され、信頼性が向上します。

(3)コードの再利用を奨励し、同じサービスを複数の目的で使用できる。

(4)異なるサービスは独立して開発・デプロイできるため、アップグレードが容易。

(5)拡張性が高く、機器や機能を容易に追加でき、高負荷を耐えられる。

(6)単一障害点が発生しにくい。あるサービスが失敗しても、他のサービスに影響しない。

モノリシックアーキテクチャとは異なり、サービス指向アーキテクチャは言語に依存せず、異なるサービスは異なる言語やツールで開発でき、異なるシステムや環境でデプロイされる必要がある。

これは意味する、サービス指向アーキテクチャはデフォルトで異なるサーバー上で実行される、各サーバーは一つのサービスを提供し、複数のサーバーが一つの完全なネットワークアプリケーションを構成する。

三、マイクロサービス

2014年、Dockerが登場し、ソフトウェア開発の様子を根本から変えました。プログラムをコンテナ内で実行し、各コンテナは個別に実行環境を設定でき、かつ非常に少ないシステムリソースを占有します。

明らかに、コンテナを使って「サービス指向アーキテクチャ」を実現できます。各サービスは一台のサーバーを占有するのではなく、一つのコンテナを占有します。

そうすれば、複数のサーバーは必要ありません。最も簡単な場合、自分のマシンで複数のコンテナを実行し、一台のサーバーでサービス指向アーキテクチャを実現できます。これまでは不可能でした。この実現方法を「マイクロサービス」と呼びます。

簡単に言えば、マイクロサービスとは、コンテナ技術を用いたサービス指向アーキテクチャです。それでも「サービス」を機能単位として使用しますが、軽量な実装になり、新しいサーバーを追加する必要はなく、新しいコンテナ(一つのプロセス)を新規作成するだけでよいので、「マイクロサービス」と呼ばれるのです。

一つのマイクロサービスは独立したプロセスです。 このプロセスは本機で実行することもできますし、他のサーバーやクラウド(例えばクラウドサービスやクラウド関数FaaS)で実行することもできます。

その特徴はサービス指向アーキテクチャと同じですが、より軽量級であるため、機能の分離とサービス化がより徹底的に行えます。また、標準化できるため、同じコンテナでもどこで実行しても結果は同じです。そのため、市場には標準化されたマイクロサービスを提供するSaaS製品が多く存在します。

正にこれらのマイクロサービスの際立った利点のおかげで、ここ数年で非常に人気が高まっています。コンテナ技術やクラウドサービスと共に、今後のソフトウェア開発においてますます重要な役割を果たすことでしょう。

(完了)