《2016ThoughtWorks技术雷达峰会----微服务架构》
微服务架构 王键,ThoughtWorks, 首席咨询师
首先微服务架构的定义,thoughtWorks在2012年3月的技术雷达中这样定义:
“微服务架构是一种架构,它提倡将单一应用程序划分为一组小的服务,每个服务运行在其独立的进程中,服务间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API)。每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。”
从这个定义中可以知道,如何甄别一个一个架构是不是微服务架构,可以从2点来判断。
一个是服务跑在单独的进程,另一个是可以独立部署。
那么Microservices有什么优点,以至于它近年来如此的热?
它有以下的四个优点:
1、弹性架构
什么叫弹性架构,可以设想以下场景。我们的系统是由一些小的服务构成,然后在通过容器这种非常灵活的基础设施,放入云的环境。假如现在双11.客户蜂拥而至,
这时候系统会自动监控到系统的响应非常的紧张,系统会弹性的开启成千上万的服务。在高峰过去之后,系统会自动把这些服务取消,从开始到结束完全没有人在干扰,
完全是自动化的。其实这种微服务架构结合Docker,结合云就为实现以上场景提供了一种可能。
2、组件化
传统的组件化是库和应用都运行在进程中,组件的任何局部变化都意味着应用的重新部署。但是通过服务来实现组件化,单个服务运行在单个进程中,某个服务的局部变动只影响该服务,而不影响整体的应用。并且因为要把应用拆分为多个微服务,对于跨进程间的调用,必须要定义清晰的职责和边界,这促进了组件的更清晰的边界。
3、去中心化
应用往往依赖于应用一开始对于技术的选择,比如你选择了.net,后几年的发展全是基于.net,因为这是一个大的应用。选择了Oracle,以后很难改变。但是微服务架构实现了一个耕细粒度的服务划分,可以在不同的服务里用不同的技术,不同的数据库,可以真正做到架构所追求的用最适合的技术解决
4、快速响应
所有以上的特点,其实都是为了快速响应需求的变化,响应市场的变化。快速响应意味着增加了竞争力
但是微服务架构是带刺的玫瑰花,不是只有美丽。
1、微服务架构会带来附加成本
如图所示,系统复杂度低时,单一应用的生产效率更好。随着系统复杂度的增加,微服务架构的生产效率慢慢超过单一应用。这说明并不是任何时候应用微服务架构,就能取得较高的生产效率,因为它会带来附加的成本。
2、很多团队在部署微服务的时候,要花费很长的时间。微服务的架构不该是更容易部署的么?
根据技术雷达2014年7月版中提到的康威定律,“一个组织的设计成果,其结构往往对应于这个组织中的沟通结构”,它从正反两面支持了《敏捷宣言》的一个核心理念"个体与交互高于过程和工具"。
要充分发挥微服务架构的能量,团队必须在构建、测试、集成以及管理方面进行良好的训练。所以,结论就是这些团队没有一个适合微服务架构的组织结构。逐渐改进你的团队和组织结构来促进你所渴望的技术架构。
今年的技术雷达对于微服务给出的关键词是:Microservice envy
Fist law of Distributed Object Design :"don't distribute your objects",一方面很多应用微服务架构的团队,其实没有达到应用微服务架构的能力,个子不够高,还不足以达到微服务架构的要求。另一个方面好的架构是进化来的,不是设计来的,不要为了微服务而微服务。
建议:单体应用优先,不要一开始就应用微服务,在演进中可以迁移到微服务。
注:微服务架构只是一种架构风格,需要很多的技术来支持,技术雷达2014年列出了微服务很多相关的技术。
《2016ThoughtWorks技术雷达峰会----微服务架构》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- 开发中可能会用到的几个 jQuery 小提示和技巧
今天,我们将分享一些很有用的技巧和窍门给 jQuery 开发人员.jQuery 是最好的 JavaScript 库之一,用于简化动画,事件处理,支持 Ajax 和 HTML 的客户端脚本.网络中有大量 ...
- Remodal – 支持 Hash 追踪的响应式模态窗口
Remodal 是一个扁平化,响应式,轻量而且容易定制的模态窗口插件,支持使用声明状态和 Hash 跟踪.您可以轻松地定义为模态弹窗定义背景景容器(如模糊效果).支持所有现代的浏览器. 您可能感兴趣的 ...
- .NET正则表达式匹配Silverlight
这是一个.NET正则表达式匹配工具的Silverlight 在页面中加入以下代码就可以了: <"> <param name="source" value ...
- 总结CSS3新特性(颜色篇)
颜色: CSS3新增加了hsl(), hsla(), rgb(),rgba()四个函数来创建color值; hsl(): hsl函数:h(色调),s(饱和度),l(亮度); 色调:为0-360之间的数 ...
- 【思维导图】Fiddler学习笔记
最近在学习Fiddler这款工具,边学边画了如下的思维导图,可以方便自己对这款工具有一个全面的了解. 软件介绍(摘自百度百科):Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电 ...
- tableView的footerView下面的颜色修改、限制文本框的输入字数
- 【代码笔记】iOS-关于UIFont的一些define
一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...
- iOS中UINavigationController控制器使用详解
一.概述 UINavigationController用来管理视图控制器,在多视图控制器中常用.它以栈的形式管理视图控制器,管理视图控制器个数理论上不受限制(实际受内存限制),push和pop方法来弹 ...
- UITableView相关知识点
//*****UITableView相关知识点*****// 1 #import "ViewController.h" // step1 要实现UITableViewDataSou ...
- 【转】简析 .NET Core 构成体系
前文介绍了.NET Core 在整个.NET 平台所处的地位,以及与.NET Framework的关系(原文链接),本文将详细介绍.NET Core 框架的构成和各模块主要功能,以及如何实现跨平台. ...