인셔셔RSS 관심 있는 블로그, 뉴스, 기술 정보를 효율적으로 추적하고 읽으세요
원문 읽기 InertiaRSS에서 열기

추천 피드

博客园 - 司徒正美
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)가 탄생했습니다.

서비스(서비스)란 배경에서 끊임없이 실행되며 특정 기능을 제공하는 프로그램을 의미합니다. 가장 흔한 서비스는 웹 서비스로, 80번 포트를 통해 외부에 웹 페이지 접근을 제공합니다.

"서비스 지향 아키텍처"는 거대한 단일 프로그램을 개별적인 서비스로 분할하는 것을 의미하며, 이는 더 작은 프로그램입니다. 각 서비스는 독립적인 기능 단위로서 다른 기능을 담당하며, 서비스들은 통신 프로토콜을 통해 연결됩니다.

이러한 아키텍처는 많은 장점이 있습니다.

(1) 각 서비스는 기능이 단일하여 작은 소프트웨어와 같아 개발과 테스트가 용이합니다.

(2) 각 서비스가 독립적으로 실행되어 아키텍처를 단순화하고 신뢰성을 향상시킵니다.

(3)코드 재사용을 장려하고 지원하며, 동일한 서비스는 여러 목적으로 사용될 수 있습니다.

(4)다른 서비스는 독립적으로 개발하고 배포할 수 있어 업그레이드가 용이합니다.

(5)확장성이 좋으며, 기기나 기능을 쉽게 추가하고 높은 부하를 감당할 수 있습니다.

(6)단일 장애 지점이 발생하기 어렵습니다. 하나의 서비스가 실패해도 다른 서비스에 영향을 주지 않습니다.

단일 애플리케이션 아키텍처와 달리, 서비스 지향 아키텍처는 언어에 민감하지 않으며, 다른 서비스는 다른 언어와 도구로 개발할 수 있으며, 다른 시스템과 환경에서 배포될 수 있습니다.

이는 의미하며, 서비스 지향 아키텍처는 기본적으로 다른 서버에서 실행됩니다 , 각 서버는 한 가지 서비스를 제공하며, 여러 서버가 함께 완전한 네트워크 애플리케이션을 구성합니다.

삼, 마이크로서비스

2014년,Docker가 나타났으며, 소프트웨어 개발의 모습을 근본적으로 바꾸었습니다. 이는 프로그램을 컨테이너 내에서 실행시키며, 각 컨테이너는 별도로 실행 환경을 설정할 수 있고, 매우 적은 시스템 자원만을 사용합니다.

명백히, 컨테이너를 사용하여 "서비스 기반 아키텍처"를 구현할 수 있으며, 각 서비스는 더 이상 서버를 하나씩 사용하지 않고 컨테이너 하나만 사용합니다.

이렇게 하면 여러 서버가 필요 없습니다. 가장 간단한 경우, 로컬에서 여러 컨테이너를 실행하면, 하나의 서버만으로 서비스 기반 아키텍처를 구현할 수 있습니다. 이는 이전에는 불가능했습니다. 이러한 구현 방식을 마이크로서비스라고 합니다.

간단히 말해, 마이크로서비스는 컨테이너 기술을 사용하는 서비스 기반 아키텍처입니다. 여전히 "서비스"를 기능 단위로 사용하지만, 가볍게 구현되어 서버를 추가할 필요 없이 새로운 컨테이너(하나의 프로세스)만 생성하면 되므로 "마이크로서비스"라고 합니다.

하나의 마이크로서비스는 독립적입니다. 프로세스 입니다. 이 프로세스는 로컬에서 실행할 수도 있고, 다른 서버에서 실행하거나 클라우드(예: 클라우드 서비스와 클라우드 함수 FaaS)에서 실행할 수도 있습니다.

그 특징은 서비스 지향 아키텍처와 같지만, 더 가볍기 때문에 기능의 분리와 서비스화를 더 완전하게 할 수 있습니다. 또한, 표준화할 수 있어서 같은 컨테이너가 어디서 실행되든 결과가 동일하기 때문에, 시장에는 표준화된 마이크로서비스를 제공하는 SaaS 제품이 많습니다.

마이크로서비스의 이러한 두드러진 장점 때문에 최근 몇 년간 이렇게 인기가 있습니다. 컨테이너 기술과 클라우드 서비스와 함께, 앞으로의 소프트웨어 개발에서 점점 더 중요한 역할을 할 것입니다.

(완)