传统IT架构面临的一些问题:
对于企业:node
对于产品:git
此外,从技术方面看,云计算及互联网公司大量开源轻量级技术不停涌现并日渐成熟:github
这一切都催生了新的架构设计风格 – 微服务架构的出现。spring
参考2014年3月Martin Fowler关于微服务架构的文章。微服务架构是一种架构模式,它提倡将单一应用程序划分红一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每一个服务运行在其独立的进程中,服务与服务间采用轻量级的通讯机制互相协做(一般是基于HTTP协议的Restful API)。每一个服务都围绕着具体业务进行构建,并使用自动化布署工具进行独立的发布。能够有一个很是轻量级的集中式管理来协调这些服务,可使用不一样的语言来编写服务,也可使用不一样的数据存储。数据库
In short, 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.缓存
微服务架构 ≈ 模块化开发 + 分布式计算安全
通用特性:网络
经过服务实现应用的组件化
围绕业务能力组织服务
每一个微服务仅关注于完成一件任务并很好地完成该任务。每一个任务表明着一个小的业务能力。 因相同缘由而变化的功能聚合到一块儿,而把因不一样缘由而变化的功能分离开智能端点与管道扁平化
去中心化
使用合适的工具完成各自的任务基础设施自动化
架构 | 优势 | 缺点 | 适用场景 |
---|---|---|---|
单体应用 | 1. 开发简单直接,集中式管理 2. 功能都在本地,没有分布式的管理开销和调用开销 |
1. 随着项目增大,会带来开发效率低,代码维护难,部署不灵活的问题 2. 扩展性不足(横向的硬件资源扩展和纵向的功能扩展) |
小项目,临时项目 |
微服务 | 1. 下降系统复杂度。单体应用分解为一组服务,每一个服务都比较简单,只关注于一个业务功能 2. 松耦合,服务可独立开发 3. 跨语言,选择合适的语言和技术,而且易于重构和升级 4. 服务可独立部署,使得持续集成和部署成为可能也是必须 5. 服务可独立扩展,根据服务特性选择硬件资源 6. 和 Docker 容器结合的更好 |
1. 分布式使服务间的调用,通讯,跟踪变的复杂 2. 分区的数据库体系和分布式事务 3. 服务数量多,系统碎片化。必须考虑到部署,管理问题 4. 跨多个服务的更改须要仔细规划和协调 |
大且业务复杂度高的项目, 须要长期演进的项目 |
架构 | 相同点 | 差别点 |
---|---|---|
SOA | 以服务为核心 | SOA更关注企业规模范围,强调的是异构系统之间的通讯和解耦合。 重ESB 以Web Service/BMP/ESB等技术为主 |
微服务 | 以服务为核心 | 微服务架构则更关注应用规模范围,强调的是系统按业务边界作细粒度的拆分和部署。 微服务甚至是去ESB、去中心化、分布式 采用许多新的开源技术和经验 |
可是显而易见,不管是Dubbo仍是Spring Cloud都只适用于特定的应用场景和开发环境,它们的设计目的并非为了支持通用性和多语言性。而且它们只是Dev层的框架,缺乏DevOps的总体解决方案(这正是微服务架构须要关注的)。架构
2017 年末,非侵入式的 Service Mesh 技术从萌芽到走向了成熟。译做“服务网格”,做为服务间通讯的基础设施层。能够将它比做是应用程序或者说微服务间的 TCP/IP,负责服务之间的网络调用、限流、熔断和监控。
Service Mesh有以下几个特色:
目前流行的Service Mesh开源软件有Linkerd,Envoy,Istio,Conduit等。
Linkerd和Envoy比较类似,都是一种面向服务通讯的网络代理,都可实现诸如服务发现、请求路由、负载均衡等功能。它们的设计目标就是为了解决服务之间的通讯问题,使得应用对服务通讯无感知,这也是Service Mesh的核心理念。Linkerd和Envoy像是分布式的Sidebar,多个相似Linkerd和Envoy的proxy互相链接,就组成了service mesh。
而Istio则是站在了一个更高的角度,它将Service Mesh分为了Data Plane和Control Plane。Data Plane负责微服务间的全部网络通讯,而Control Plane负责管理Data Plane Proxy。Conduit定位和功能与Istio相似。