阅读更多

0顶
0踩

互联网

原创新闻 微服务的误读与误解

2016-04-14 10:25 by 副主编 mengyidan1988 评论(0) 有5395人浏览
微服务确实很受欢迎,但是对于微服务的误解也是事实,本文对这些误解一一来介绍下:

一、微服务不够“微”?

尽管微服务定义的很明确,但是开发者社区对它的解释却颇有争议,主要的一些问题如下:

1.它是否是单体架构的代表?
2.它是否是单体服务的代表?
3.它是否是逻辑功能的组合?

下面让我们以银行应用为例来讨论一下:三层架构解决了技术组件之间的紧耦合问题,允许它们各自独立改变而不相互依赖。例如: Web端的改变不会影响到后端服务。 但是三层架构没有把基于组件分组的功能和特性考虑进去,为此我想出了一个“功能型”架构的名称,以表明架构需要通过产品的特征来划分。这对于现代应用的性能和吞吐量是至关重要的,我会在文章中对细节做进一步的解释。



二、 微服务可伸缩性

微服务是一种架构风格,它允许你向规模化的宏伟系统进攻,这是怎么做到的呢?传统的三层架构服务能伸缩可被扩展,那微服务有啥特别之处呢?例如:在线旅行预定,购买请求和预定请求比例是100:1

1.这意味着什么呢, 101个请求中,购买请求能达到100个,而预定请求只有1个;
2.这就敲响了警钟!预定需要的资源远远小于购买所占用的资源,为何不将整个系统按照期望比例缩放成100:1呢?



三、 微服务帮助维护和运行

“滚动式重启”, “热部署”, “轮询式部署, ”是不是听起来很熟悉?用最短的停机时间来维护应用系统,是现代应用系统的一个状态优先级典型表现。 让我们举个例子,改变应用将会贯穿整个三层架构,包括数据库应用程序的变化。如果数据的语义被修改了,任何上述技术是注定要失败((例如: ORM(对象映射关系)一旦看到了对象的变化,就需要重新启动所有的节点)。关于微服务:功能型-层架构给高可用性和维护带来了一个新的局面。即使银行报表微服务奔溃了也不会影响银行系统其他的功能。你将会为90%的消费者不用银行报表功能感到庆幸。

四、微服务需要进一步发掘

好吧,任何关于自动伸缩的系统都需要被挖掘。

1.在微服务中有10个节点是购物的,两个节点是预定的;
2.由于假日季节,流入流量比较高;
3.你期望通过人工分拆购物实例得到什么?
4.假设分拆出了多个实例,那负载平衡器又是怎么实现负责均衡的呢?

传统的负载均衡器在静态环境中能够运行良好,但是当动态增加节点或执行脚本添加新实例的就很糟糕了。如果微服务能够实现缩放,微服务项目就需要被挖掘、注册、添加实现负载均衡;对,大部分的软件问题,通过引用间接层来解决。每个微服务在关闭或启动时都需要自我注册。这就需要一个注册管理员-负载均衡器,对微服务的加载很敏感。如何检查呢,

Netflix解决了这个问题, Netflix在开源Eureka AWS上实现了负载均衡。

五、微服务是否支持多元化编程语言?

顾名思义微服务是以协议驱动的服务,这些服务是基于HTTP/REST( XML/ JSON数据传输)的。微服务与轻量级协议之间的清晰的定义边界,有助于建立一个多元化的编程团队,因为他们的焦点是功能而不在于选择语言。

六、微服务和容器是天作之合?

虚拟机的笨重和现代应⽤程序的性质,将他们分拆和拆卸为微服务,使微服务成为容器的理想搭配。这是真正意义上的DevOps,打的包不仅仅是微服务的容器也是整体的一个执行环境。缺点是,应用团队将成为基础设施团队,需要对集装箱有个很好的理解。

七、 微服务添加额外的复杂性?

1.Jenkins简单通道把两个应用部署到2个Tomcats里,以此类推,将膨胀出无数个微服务;
2.随着部署的数量增加,部署的时间也跟着显著上升;
3.需要有一个良好的容器管理,部署和分发工具和技术;
4.每个微服务将拥有更多的日志文件,如果没有stash、 splunk这种合适的工具,对接调试事务将成为一场噩梦;
5.如果每个Tomcat有10个连接,你会发现数百个来自不同微服务数据库连接,因为不能共享数据库连接(没有连接数据库的微服务);

总结

所有的事情都是有代价的,微服务也是一样,并不是所有的应用都有同样的架构,也不是所有应用对高可用性、可扩展性、可维修性都有着同样的要求。

原文链接:Microservices - Myths and Misunderstanding
  • 大小: 67.7 KB
  • 大小: 12.5 KB
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • Windows10环境下编译生成启用了ui扩展并可以使用composer的PHP7.4.25(一)编译环境搭建

    记录Windows10 64位环境下使用Visual Studio 15 生成工具 2017编译32位的PHP7.4.25,下载相关库,并配置必要编译选项从而启用ui扩展和支持composer过程中遇到的问题和解决办法。

  • win10 php7 zend,win10 编译php7.2 扩展

    win10 编译php7.2 自定义简单的扩展1、环境准备1.1、Visual C++ 编译器(安装vs2019)官方支持使用微软的Visual C++ compilers。Visual C++ 15.0 (Visual Studio 2017) for PHP 7.2, PHP 7.3 or PHP 7.4.安装宇宙第一IDE——visual studio 2019 社区版(免费)。1.2、sd...

  • win10_php_imagick 扩展的安装

    PHP_imagick 这个扩展是我迄今为止遇到最难安装的扩展主要问题在于正确的文档太少, 今天终于是把这个扩展安装好了. 下面分享一些过程. 第一步: 首先到imagemagick官网下载imagemagickwindows安装包地址是这个 https://imagemagick.org/script/download.php 我的apache和php都是64位的那么我也选择64位

  • windows环境下php和Php扩展编译,扩展dll文件编译

    工作过程中需要编译php扩展的dll格式文件 , 经过1天的折腾,终于编译出来了,下面以编译php5.3.28 下runkit扩展为例 , 官方的windows环境下php编译过程参考下面这两篇文章: https://wiki.php.net/internals/windows/stepbystepbuild http://blog.csdn.net/mycwq/article/detai

  • 在windows10下php7.3+编译phalcon扩展(Zephir)

    在windows10下php7.3+编译phalcon扩展(Zephir)在windows10下php7.3+编译phalcon扩展(Zephir)0x00 作者开发环境0x01 安装visual studio2017社区版0x02 下载相关PHP工具0x03 执行步骤step 1step 2step 3参考网址 在windows10下php7.3+编译phalcon扩展(Zephir) 官方上提...

  • Ext.tree.Panel6.2

    关于ext6.2的Ext.tree.PanelExt.tree.Panel一些重要的配置数据结构1代码块1数据结构2代码块2效果图 Ext.tree.Panel一些重要的配置 最近一段时间一直在学习ext6.2版本, 是一个不折不扣的ext新手(之前的版本都没有...

  • ExtJs之结构树 Ext.tree.panel详细用法

    1.简单的树 效果图 代码 [javascript] view plain copy ..."text/javascript" defer> Ext.onReady(function(){ Ext.BLANK_IMAGE_URL = '/ext/resources/images/default/s.gif'; 

  • EXT TREE CHECKBOX 用法

    tree = new Ext.tree.TreePanel( { el:'tree-viewer', id:'tree', autoScroll:true, animate:true, border:false, enableDD:true, containerScroll: true, rootVisible:false, loader: new Ext.tree.TreeLoader({ ...

  • Ext Tree

    var t_root = new Ext.tree.TreeNode({ id:root, text:测试根节点, iconCls:new }); var myTreeLoader = new Ext.tree.TreeLoader({ dataUrl:/ExtDevelop/TreeData }); var testTree = n

  • Ext Tree异步树的增加修改删除的简单实现~

    因为之前写的人用了xloadTree,其他功能都实现了,但是客户要求要有cookie功能,实现不了麻烦啊~正巧现在在学习用Ext,发现Ext的tree本身就很强大基本的功能都可以实现。Ext.onReady(function() { Ext.QuickTips....

  • win10下php拓展环境搭建

    需要下载的有:1.php源码,2.cygwin,3.编译器(vc++6.0),4.安装好配置环境变量的php程序 php源码 php5.5.38 这里使用的是php5.5.38源码 下载完成解压到d:/phpsrc目录,在下载cygwin cygwin官网 选择自己系统的位数下载,下载完成安装,在选择网址的时候选择 http://mirrors.sohu.com/cygwin/这个镜像网站

  • ext动态树 java_基于Ext异步加载tree的实例 - Seraph115 - JavaEye技术网站

    使用JS生成树形结构的菜单是基于J2EE的B/S系统常用的UI方式。但长期以来的问题是同步(即一次加载整棵树)加载一棵完整的树给前台及后台同时带来压力,由于加载...Ext的TreePanel组件提供了此功能即异步树(asynchronis...

  • ext tree控件 使用

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br />       ; charset=utf-8" /> <br /> <link rel="stylesheet" type="text/css" href="js/ext

  • extjs 树刷新_Extjs-树 Ext.tree.TreePanel 动态加载数据

    }private void LoadTreeNode(List listCategory, List listTreeNodes, intpid) {foreach (testTree category inlistCategory) {if (category.fatherId ==pid) { Tree node= this.TransformTreeNode(category);...

  • ext 动态Tree

    接触EXT差不多两个礼拜了吧,今天终于把动态树形菜单搞定了。----------------jsp--------------

  • [Ext JS]5.11 轻量版的树- treelist

    treelist, Ext.list.Tree 是一种轻量的用于显示树形结构的组件。

  • Extjs-树 Ext.tree.TreePanel

    文章源址:http://blog.csdn.net/itlwc/article/details/7873869 1.简单的树 效果图 代码 [javascript] view plaincopy ... Ext.onReady(function(){   

  • Rails生成EXT Tree

    在Rails中使用has_one 、has_many 、belongs_to 和 has_and_belongs_to_may 来声明关系型数据库中的一对一,一对多和多对多的关系,但当想以...提供了acts as的扩展功能,如acts_as_list 、acts_as_tree 、 acts_as_nes

  • EXT tree 事件

    treePanel.on({  //目录树单击事件  'itemclick' : function(view, rcd, item, idx, event, eOpts) {  var dirid = rcd.get('id'); //节点id  var dirtype = rcd.ra

  • EXT JS 异步动态树服务端加载 Ext.tree.TreeLoader异步服务端加载

    Ext js的动态树,网上百度了一大片,都只是加载本地文件,此处不再说明,我这里使用...var loader=new Ext.tree.TreeLoader({ url:"/tree.do" }); var root=new Ext.tree.AsyncTreeNode({ id:'0', expanded

Global site tag (gtag.js) - Google Analytics