微服务的误读与误解

微服务确实很受欢迎,但是对于微服务的误解也是事实,本文对这些误解一一来介绍下:

一、微服务不够“微”?

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

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个连接,你会发现数百个来自不同微服务数据库连接,因为不能共享数据库连接(没有连接数据库的微服务);

总结

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

原文地址:http://geek.csdn.net/news/detail/67274


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注



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

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

相关文章

Hibernate注解(二)之映射简单的属性

翻译自 Hibernate Annotations2. 映射简单的属性 2.1.声明基本的属性映射每个非静态非瞬态属性(取决于访问类型的字段或方法)都被认为是持久性的,除非您将其注释为Transient。没有为您的财产注释等同于适当的 Basic注释。该Basic 注释允许…

进程与服务的签名_苹果app签名需要注意哪几点

现在部分的智能手机系统设备和工作一个应用软件,都需求证书的签名认证。未经任何签名的程序是不能在智能手机上设备和工作的。验证签名的底子进程则:智能手机操作系统或软件渠道对收到的原始数据选用相同的杂凑运算得到消息摘要,将与被签署时分的消息摘要…

8.4-中断系统

【README】 1.本文总结自bilibili《计算机组成原理(哈工大刘宏伟)》的视频讲解,非常棒,墙裂推荐; 2.采用一问一答的方式对中断进行总结(中断7问题),refer2 8.4-中断系统小结&…

ASP.NET Core的配置(1):读取配置信息

提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置信息定义在这两个文件之中。到了.NET Core的时候,很多我们…

EL调用java方法

一、jstl函数 jstl函数自定义二、调用方法的值成变量 第一种使用request对象 <% request.setAttribute(“isOperate”,isShowOperate()); %> 第二种使用标签变量 <c:set var"isOperate" value"<%isShowOperate()%>" />转换成变量使用<…

wordcloud python3.7_[原创]win7/64位系统+python3.7.2下安装wordcloud库失败之解决——一个莫名其妙的方法...

当前环境&#xff1a;win7/64位系统python3.7.2pip-19.2.1使用pip install wordcould安装时出现错误&#xff0c;提示&#xff1a;尝试方法①&#xff1a;考虑更换其他安装源提示没有变化&#xff0c;仍然提示没有找到分发版本-----------强行插入的分割线-------------------(…

1-计算机系统概论

【README】 本文总结自B站 《计算机组成原理&#xff08;哈工大刘宏伟&#xff09;》的视频讲解&#xff0c;非常棒&#xff0c;墙裂推荐&#xff1b; 【1.1】计算机软硬件概念 【1.2】计算机层次结构 【2】计算机基本组成 【2.1】冯诺依曼计算机特点&#xff08;重要*&#…

JetBrains 加入 .NET 基金会

在 BUILD 大会上&#xff0c;微软正式对外宣布&#xff0c;JetBrains 已经加入 .NET 基金会&#xff0c;详细情况可以查看 .NET Foundation 博客。 JetBrains 因为用户推荐、ReSharpe、ReSharper Ultimate 套件等原因&#xff0c;在 .NET 平台投入大量资源。而现在&#xff0c…

jstl中添加自定义的函数

转载自 jstl中添加自定义的函数由于jstl中提供的函数未必能够满足我们的要求&#xff0c;而我们又希望能够像jstl提供的函数那样能够轻松方便使用&#xff0c;那么可以通过自定义函数补充jsltl函数。给jstl添加自定义函数需要以下步骤&#xff1a;定义一个static的public的方…

多智能体强化学习_基于多智能体强化学习主宰星际争霸游戏

大家好&#xff0c;今天我们来介绍基于多智能体强化学习主宰星际争霸游戏这篇论文Grandmaster level in StarCraft II using multi-agent reinforcement learning​doi.org从Alphastar以后 利用强化学习的方法进行星际争霸2AI的又一大突破。Part1 前言游戏介绍(Introduction to…

2-计算机发展及应用

【README】 本文总结自B站 《计算机组成原理&#xff08;哈工大刘宏伟&#xff09;》的视频讲解&#xff0c;非常棒&#xff0c;墙裂推荐&#xff1b; 【1】计算机发展史 【1.1】计算机的产生和发展 【1.2】微型计算机的出现与发展 芯片上的晶体管的数量 与 cpu速度间 有没有关…

ASP.NET Core的配置(2):配置模型详解

在上面一章我们以实例演示的方式介绍了几种读取配置的几种方式&#xff0c;其中涉及到三个重要的对象&#xff0c;它们分别是承载结构化配置信息的Configuration&#xff0c;提供原始配置源数据的ConfigurationProvider&#xff0c;以及作为“中间人”的ConfigurationBuilder。…

Mysql的安装与远程登录

一、安装 &#xff08;1&#xff09;linux版A.linux普通版http://www.jb51.net/article/104107.htmB.ubuntu版 1.安装 sudo apt-get install mysql-server apt-get isntall mysql-client sudo apt-get install libmysqlclient-dev2.设置密码cd /etc/mysql vi debian.cnf ,得…

sqlserver如何定义一个静态变量_[Bazel]自定义规则实现将多个静态库合并为一个动态库或静态库...

1 前言2 自定义规则实现2.1 规则功能2.2 实现规则的理论基础2.3 规则代码实现3 总结4 参考资料1 前言为了实现如标题所述的将多个静态库合并为一个动态库&#xff0c;内置的 Bazel 规则是没有这个功能的&#xff0c;Bazel C/C 相关的内置规则有&#xff1a;cc_binary &#xff…

(转)base64编码(严格说来,base64不算作加解密算法)

【README】 1.本文转自&#xff1a; Java base64加密解密 - xuwc - 博客园参考&#xff1a; https://www.cnblogs.com/luguo3000/p/3940197.html https://blog.csdn.net/jiahao1186/article/detailhttps://www.cnblogs.com/xuwc/p/14058183.htmlhttps://zh.wikipedia.org/wik…

JavaWeb的web.xml标签元素(一)

普通信息标签 &#xff08;1&#xff09;display-name 定义了WEB应用的名字,在servletContextConfig display-name* XML语法&#xff1a;<display-name>AppName</display-name> &#xff08;2&#xff09;description 可以使用description元素来提供有关部署描述符…

python3多线程第三方库_Python3 多线程

Python3 多线程多线程类似于同时执行多个不同程序&#xff0c;多线程运行有如下优点&#xff1a;使用线程可以把占据长时间的程序中的任务放到后台去处理。用户界面可以更加吸引人&#xff0c;比如用户点击了一个按钮去触发某些事件的处理&#xff0c;可以弹出一个进度条来显示…

采用MiniProfiler监控EF与.NET MVC项目

今天来说说EF与MVC项目的性能检测和监控&#xff0c;相对本篇文章&#xff0c;更推荐大家使用另一个类似组件 NanoProfiler - 适合生产环境的性能监控类库 之 基本功能篇 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC MiniProfiler是Stack Ove…

(转)公钥,私钥和数字签名这样最好理解

转自&#xff1a; 公钥&#xff0c;私钥和数字签名这样最好理解_21aspnet的博客-CSDN博客_公钥签名还是私钥签名一、公钥加密 假设一下&#xff0c;我找了两个数字&#xff0c;一个是1&#xff0c;一个是2。我喜欢2这个数字&#xff0c;就保留起来&#xff0c;不告诉你们(私钥…

JavaWeb的web.xml标签元素(二)

JavaWeb的web.xml标签元素&#xff08;一&#xff09; 九、session-config为Web应用中的javax.servlet.http.HttpSession对象定义参数 session-config-session-timeout?session-timeout元素用来指定默认的会话超时时间间隔&#xff0c;以分钟为单位。该元素值必须为整数。如果…