微服务的前世今生

译者:周元昊

与许多人认为的不同,微服务的概念已有相当长的历史,SOA(面向服务的体系架构)也不是90年代才被提出的。在最近举办的伦敦微服务大会上,Greg Young就微服务核心概念的前世今生进行了演讲。其中他表示,在过去的50年间,我们一直在使用服务这一概念背后的核心思想。

Young引用了Martin Fowler微服务主要特性的描述,最重要的是其独立替换系统中单个服务的能力、对业务能力的组织以及智能端点(smart endpoint)与哑管道(dumb pipes)的使用,Young提到的这些特性SOA也同样具备。

Young提及,在1970年代最初提出的面向对象模型中,可以将一个对象理解为一个小型的计算机,用户通过向它发送信息使其工作。同时期的参与者(Actor)模式也是基于相似的概念,将参与者作为一个小计算机,用户向参与者的邮箱发送信息。它们都是微服务核心概念的前身,虽然使用的工具或消息传递方式不尽相同,但是内在的思想并没有改变。如今我们认为SOA已经失败了,而微服务将会成功,但Young表示SOA的基础概念并没有任何错误,微服务的优点在SOA架构中也早已存在。

回顾近50年的经验教训,Young引用了分布式计算第一定律来概括:如果不是真正需要就不要让系统分布式。将应用分成多个服务,再将它们部署在同一台服务器上,甚至在同一个进程上,这样做并没有不对。Young表示,大部分系统,尤其是小型业务系统,并不需要分布式来提供可伸缩性,但是可以通过分布式来提升可用性。

我们真正需要的是服务间的隔离。当各个服务在同一服务器的各自进程中运行时,我们可以确保服务间遵循相互的协议。进一步隔离的方式是将各个服务运行在独立的Docker容器中。这样减少了各服务间内容的共享,从而达到更好的隔离性。再进一步可以将每个服务运行在独立的节点上。

选择一定层级隔离的原因之一是为了处理相关的错误。当在同一个进程中运行所有的微服务时,如果进程重启,所有的服务会被停止。而将服务运行在各自的进程中的话,单个进程重启只会影响一个服务。当然重启服务器会停止所有服务,所以将各个服务部署在独立的服务器上或双服务器双实例,会大大减少重启给服务可用性带来的影响。

当然每一种隔离层级都伴随着相应的成本。使用一台服务器多个进程相对于每个服务一个节点更容易实现。这其中并没有谁对谁错,有的只是各因素间的权衡。在提升系统的隔离级别的同时,你也会相应增加系统的成本和复杂度。Young同时引用Simon Brown的话:

如果你无法在单进程的独立应用上实现构建,那你如何确信在引入网络通信后问题可以得到解决?

Young认为,使用不同的隔离策略的一个优势是我们不需要提前做出一些决定,我们也不需要保持生产环境和开发环境使用一样的隔离级别。他表示这也是使用微服务架构的一个主要好处。

明年的伦敦微服务大会将与2017年11月6-7日举办。


细说云计算

ID:CloudNote


▲长按二维码识别关注

探讨云计算的一切,

有干货,也有闲聊。



内容转载自公众号

细说云计算
细说云计算
了解更多

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux 查看本机网关地址,linux查看服务器网关地址

弹性云服务器 ECS弹性云服务器(Elastic Cloud Server)是一种可随时自助获取、可弹性伸缩的云服务器,帮助用户打造可靠、安全、灵活、高效的应用环境,确保服务持久稳定运行,提升运维效率三年低至5折,多种配置可选了解详情什么是弹性…

非阻塞线程安全列表——ConcurrentLinkedDeque应用举例

转载自 非阻塞线程安全列表——ConcurrentLinkedDeque应用举例 在java中,最常用的数据结构可能是列表。有数目不详的元素列表,你可以添加、阅读、或删除任何位置的元素。此外,并发列表允许不同的线程列表中添加或删除元素时不产生任何数据不一致。非阻塞列表提供如下操作,如果…

整合JDBC---SpringBoot

整合JDBC SpringData简介 对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理。 Spring Boot 底层都是采用 Spring Data 的方式进行统一处理各种数据库,Sprin…

struts+hibernate+oracle+easyui实现lazyout组件的简单案例——EmpDao层代码

严格按照三层架构来写的,Dao层的代码比较少,我直接把Emp和实现类的都放在这篇文章里面吧, IEmpDao.java接口: /** * Title: IEmpDao.java * Package org.dao * Description: TODO该方法的主要作用: * author A18ccm…

在idea 中添加和删除模块Module

在idea 中添加和删除模块Module ThinkPet 2018-12-22 10:12:50 4125 收藏 1 分类专栏: idea 版权 1.添加模块 2.删除模块 ———————————————— 版权声明:本文为CSDN博主「ThinkPet」的原创文章,遵循CC 4.0 BY-SA版权协议&am…

ASP.NET Core File Providers

ASP.NET Core通过对File Providers的使用实现了对文件系统访问的抽象。 查看或下载示例代码 File Provider 抽象 File Providers是文件系统之上的一层抽象。它的主要接口是IFileProvider。IFileProvider公开了相应方法用来获取文件信息(IFileInfo)&#…

java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍

转载自 java并发编程(二十一)----(JUC集合)CopyOnWriteArraySet和ConcurrentSkipListSet介绍 这一节我们来接着介绍JUC集合:CopyOnWriteArraySet和ConcurrentSkipListSet。从名字上来看我们知道CopyOnWriteArraySet与上一节讲到的CopyOnWrit…

linux u32,如何在程序中使用u32这个类型啊。

如何在程序中使用u32这个类型啊。 我用的keil 4.5#include "stm32f10x.h"int main(void){GPIO_InitTypeDef GPIO_Init1;GPIO_Init1.GPIO_Pin GPIO_Pin_0;GPIO_Init1.GPIO_Speed GPIO_Speed_50MHz;GPIO_Init1.GPIO_Mode GPIO_Mode_Out_PP;GPIO_Init(GPIOA,&GPI…

虚拟机安装CentOS-7-x86_64-DVD-1708说明

https://blog.csdn.net/guanzhuwo/article/details/105903844 镜像已经下载了 使用IDM下载 http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2003.iso 虚拟机安装CentOS-7-x86_64-DVD-1708说明 guanzhuwo 2020-05-03 15:12:22 102 收藏 分类专栏&a…

struts+hibernate+oracle+easyui实现lazyout组件的简单案例——DeptDao层代码

下面来看看DeptDao 的事例吧: IDeptDao.java: /** * Title: IDeptDao.java * Package org.dao * Description: TODO该方法的主要作用: * author A18ccms A18ccms_gmail_com * date 2017-4-19 下午6:37:00 * version V1.0 */ package org.dao;impo…

IJ实现侧边栏单独搜索

第一步任意点击一个 第二步输入要搜索的单词

关于全局ID,雪花(snowflake)算法的说明

C#版本的国外朋友已经封装了,大家可以去看看:https://github.com/ccollie/snowflake-net 强大的网友出来个简化版本:http://blog.csdn.net/***/article/details/*** (地址我就不贴了,对前辈需要最起码的尊敬&#xff0…

Java并发包:ConcurrentMap

转载自 Java并发包:ConcurrentMap 文章译自:http://tutorials.jenkov.com/java-util-concurrent/index.html 抽空翻译了一下这个教程的文章,后面会陆续放出,如有不妥,请批评指正。 转自请注明出处。 之前漏了一篇文…

SecureCRT的下载、安装( 过程非常详细!!值得查看)

我自己百度联通主号有存储了 可以下下来 有视频加这个文档 就可以了 https://blog.csdn.net/qq_39052513/article/details/100272502 SecureCRT的下载、安装( 过程非常详细!!值得查看) 置顶 超Ren专属 2020-06-02 21:29:33 1…

整合Druid---SpringBoot

整合Druid(数据源) Druid简介 Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池。 Druid 是阿里巴巴开源平台上一个数据库连接池实现,结合了 C3P0、DBCP 等 DB 池的优点,同时加入了日志…

struts+hibernate+oracle+easyui实现lazyout组件的简单案例——工具类

次此篇文章是两个工具类的实现,HibernateUtil.java和分页的工具类PageUtil.java的实现: 先看看HibernateUtil.java的实现: package org.util;import javax.transaction.Transaction;import org.hibernate.Session; import org.hibernate.Sess…

理想的互联网服务后台框架的九个要点

理想的互联网服务后台框架的九个要点对于互联网服务后台团队,开发框架的选择是非常关键的一个问题,多年的海量服务经验和教训使得我们团队深刻的认识到: 要尽早规范团队的开发服务框架,避免到了后期,各种开发语言混杂、…

linux 无线网卡驱动桥转发,引用和完美转发

# 右值引用 移动语意~~~右值引用解决了左值引用无法传递临时对象和常引用传递的对象只读的问题. 右值引用允许传递一个可变的临时对象引用.移动构造使用移动而非赋值语义完成构造过程, 主要用于解决函数返回值时的大量深拷贝开销.#include int main(void){int a 30;int &b…

虚拟机安装centeros7 无法连接网络 virsh命令找不到 删除多余的vir0 不然dubbo会有问题

进入linux ping www.baidu.com 无法访问 cd /etc/sysconfig/network-scripts vi ifcfg-ens33 修改这个文件 onbootyes 原来是on shutdown -h now 关机 然后重启虚拟机 再次ping ping www.baidu.com 就通了 https://www.zhihu.com/question/53708440 virsh命令找…

Java集合之EnumSet

转载自 Java集合之EnumSet EnumSet EnumSet 是一个专为枚举设计的集合类,EnumSet中的所有元素都必须是指定枚举类型的枚举值,该枚举类型在创建EnumSet时显式或隐式地指定。 EnumSet的集合元素也是有序的,EnumSet以枚举值在Enum类内的定义顺…