原文同步至 http://waylau.com/ahout-microservices/html
自 2014 年始,Microservices(微服务)一词愈来愈火爆,不谈 Microservices 似乎就 out 了。那么什么是 Microservices?Microservices 架构与传统的架构有什么区别?什么时候应该采用 Microservices?如何构建 Microservices?git
本文,就针对上述提到的问题,来简单介绍下 Microservices。github
微服务的诞生并不是偶然: 领域驱动设计指导咱们如何分析并模型化复杂的业务;敏捷方法论帮助咱们消除浪费,快速反馈;持续交付促使咱们构建更快、更可靠、更频繁的软件部署和交付能力;虚拟化和基础设施自动化(Infrastructure As Code)则帮助咱们简化环境的建立、安装;DevOps 文化的流行以及特性团队的出现,使得小团队更加全功能化。这些都是推进微服务诞生的重要因素。docker
实际上,业界对于微服务自己并无一个严格的定义。James Lewis 和 Martin Fowler 对 Microservices 架构作了以下定义:数据库
简言之,Microservices 架构风格就像是把小的服务开发成单一应用的形式, 运行在其本身的进程中,并采用轻量级的机制进行通讯(通常是 HTTP 资源 API)。这些服务都是围绕业务能力来构建,经过全自动部署工具来实现独立部署。这些服务,其可使用不一样的编程语言和不一样的数据存储技术,并保持最小化集中管理。编程
Microservices 包含以下特征:架构
微服务架构(MSA)与 面向服务架构(SOA)类似之处,好比,都是面向服务。一般 SOA 意味着大而全的总体集中式的解决方案。这让设计、开发、测试、发布都增长了难度,其中任何细小的代码变动,都将致使整个系统的须要从新测试,部署。而微服务架构偏偏把全部服务都打散,设置合理的颗粒度,各个服务间保持低耦合,每一个服务都在其完整的生命周期中存活,互相之间影响降到最低。框架
SOA 须要对整个系统进行规范,而 MSA 每一个服务均可以有本身的开发语言、开发方式,灵活性大大提升。运维
对于分布式设计来讲,分布式第必定律是“尽可能不要使用分布式”。由于系统的分布式必定会带来性能的开销。编程语言
微服务使得开发变得更简单,快捷了。之前开发人员耗费时间来搭建环境、熟悉代码结构,在微服务的世界里会简单许多。可是,微服务带来了一系列的非功能性需求,好比说事务、服务治理(注册,发现,负载,路由,认证受权,隔离)、监控(日志,性能监控,告警,调用链路)、部署、测试等。微服务依赖于“基础设施自动化”。
微服务不是“银弹”,什么时候采用微服务还需考虑企业自身的需求。
真是一个大话题,本文不会详细涉及。笔者在《REST 实战》的 “使用 Java SE 部署环境”一章节中,写一个结合 Jetty 、Tomcat、Jersey 等技术,实现了 REST 风格 API 的 Microservices 入门例子。
若是对 Microservices 抱有兴趣,能够参阅市面上的书籍: