微服务一词源自 马丁·福勒(Martin Fowler) 在2014 年的一篇博客:Microservices 该文章中对微服务定义以下:html
the microservice architectural style [1] is an approach to developing
a single application as a suite of small services, each running in its
own process and communicating with lightweight mechanisms, often an
HTTP resource API. These services are built around business
capabilities and independently deployable by fully automated
deployment machinery. There is a bare minimum of centralized
management of these services, which may be written in different
programming languages and use different data storage technologies.web
微服务架构风格是将单体应用程序 拆分为多个小型的服务 而且每一个服务在独立的进程中。服务间的通讯采用轻量级通讯的机制 一般是HTTP方式提供API 来实现。这些服务经过自动化部署的方式进行独立部署。每一个服务能够根据自身的特色采用不一样的语言开发同时也可使用不一样的数据存储技术。数据库
服务的拆分是基于业务和公司的组织架构进行拆分,也称之为康威定律。tomcat
另外 Adrian Cockcroft 更是将微服务比喻成 细粒度的 SOA(面向服务的架构)服务器
虽然我对微服务的定义进行解释,可是若是想更深层次的了解微服务 咱们不得不先从单体架构提及。架构
单体架构就是 将 web项目应用实例 的全部功能模块打包到一块儿并放在一个web容器中运行的系统。 例如 咱们的一个电商网站 其中包含 商品模块 订单模块 等咱们能够经过maven多模块 或者 放入到不一样的包中来区分。 可是最终仍是将其打包成一个war 部署在咱们的tomcate中。app
随着业务规模的发展咱们的单体架构会出现以下问题负载均衡
不敢作新的技术的尝试
因为咱们的项目是单体的架构,项目成员必须使用同一种技术栈进行项目的开发。切换新的技术和语言要对整个项目进行重头开发。这使得尝试新的语言变得比较困难。框架
简单点说微服务的好处正式用来弥补单体架构的不足的。具体的好处以下:maven
尝试新的技术变得更容易
个人我的理解就是微服务是在SOA 上进一步的延伸而产生的新名词。
微服务不是银弹,使用微服务业务也有困难须要解决。当咱们将服务拆分多个服务 多是几十个服务 也有多是上百甚至上千个服务。这个多服务如何区治理就是咱们要面临的困难,具体细分的话包含以下内容:
若是你的项目代码模块 代码逻辑 比较混乱是不可以经过微服务来解决的。引入微服务须要对整个项目的功能进行梳理划分后才能在考虑切换为微服务。
和坚 简书博主当咱们在说微服务治理的时候究竟在说什么:
Rick Osowski:微服务介绍
承诺一时的华丽 简书博主:Go - Micro微服务框架实践 - 相关概念(六)
每日一拾 简书博主:架构设计漫步:从单体架构、SOA到微服务