《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 安装并启动 ...
随机推荐
- Click Magick – 下一代点击跟踪和链接管理
Click Magick 是新一代的广告跟踪和链接管理系统,让每一个点击都能给你带去更多的利润.它是专门设计来跟踪所有类型的点击计费广告,包括从谷歌,必应和 Facebook 的 PPC 广告,就好像 ...
- js 内存小记
其实不知道怎么起这篇blog的题目了 其实只要涉及的内容是内存泄漏的问题,也有内存管理的一些知识,把学习的过程拿来分享 垃圾回收机制 js具有自动的垃圾收集机制,它会找出那些不在继续使用的变量然后释放 ...
- css小技巧,会不断更新的
1.去除input记住密码后自动填充表单的黄色背景 input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px #FFF inset; }/ ...
- css中的background属性
第一次写博客,我就写写今天在编写网页的过程中,对background的两种运用,一是background中的线性渐变,对背景的渐变我其实是很少使用的,所以今天在写的时候我用css3的帮助手册,back ...
- 读jQuery源码 - Callbacks
代码的本质突出顺序.有序这一概念,尤其在javascript——毕竟javascript是单线程引擎. javascript拥有函数式编程的特性,而又因为javascript单线程引擎,我们的函数总是 ...
- Linux学习心得之 jnlp的文件和java应用程序安全设置
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 jnlp的文件和java应用程序安全设置 1.前言2. jnlp的文件打开3.java应用程 ...
- Autodesk hackathon 技术参考资料
Autodesk 首届黑客马拉松(hackathon )将于6月14号在上海举行,在这次活动中,推荐您使用的技术有ReCap 360 photo照片建模技术和Autodesk 360 viewer通用 ...
- Mac下的Parallel Windows忘记密码怎么办?
Mac机上安装了Parallel Windows,日久年深不登录结果忘记了登录密码,百爪挠心,想破脑壳试了n个密码都不行,放了一个多月也没想起来. 今天没事网上溜溜,肯定也有和我同病相怜的弟兄,果然, ...
- Sharepoint 2010 工作流启动时处理出错
在Sharepoint 2010 中使用Sharepoint 2010 designer做了一个工作流: 运行工作流时,当主办工程师是“张三”的时候,工作流一启动就报错. -------------- ...
- android ndk开发(二)实现一个官方demo
实现了一个官方的demo:bitmap-plasma(水波纹) 源代码就在samples文件夹下,可以自己去找. 界面: 建立项目的步骤和配置环境不明白的可以去看:http://www.cnblogs ...