微服务容器化实践——微服务引入的问题和解决方案_微服务容器化实践中常见的问题-程序员宅基地

技术标签: 微服务  

什么是微服务?

使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程里,一般采用轻量级的通讯机制互联,并且它们可以通过自动化的方式部署。

在这里插入图片描述
关于微服务的其他内容,我的以下文章可以一一说明:

多微才算微服务?
其实微服务这个微不是以代码量或者开发时间来度量的,它传递的是一种开发思想,而不是固定的一个量。其思想表现如下:

  1. 单一职责
    紧密相关的业务放在一起,“高内聚低耦合”,比如说订单和支付可以作为一个服务,登录和注册可以作为一个服务,又比如邮件服务、短信服务。
  2. 轻量级的通信
    微服务与微服务之间的通信,应该使用轻量级的通信。什么是轻量级的通信呢,其应该做到与平台无关,和语言无关,比如说HTTP就是轻量级的通信。什么不是轻量级的通信呢,比如JAVA的RMI,.NET的remoting,虽然它们在各自的语言环境中都非常的方便,但是无法跨语言。
  3. 隔离性
    微服务都运行在自己的进程中,不会相互干扰。
  4. 业务数据的独立性
    要求每个微服务都有自己独立的数据存储系统,以降低数据结构的复杂度。
  5. 技术的多样性
    能够根据业务选择技术工具,并且提供自己的API以供调用。比如有的是Java、golang、nest.js开发,但是能够互相访问。

微服务的不足

  1. 服务的拆分和定义是一项挑战
    服务的拆分是一门很深的学问,感兴趣可以详细了解TDD、DDD。拆分的太小,服务太细,服务之间的调用过于复杂,会造成不必要的性能损失,而且也要考虑团队的数量。服务太大,就会丧失微服务的优势。

  2. 分布式系统的一致性
    微服务有自己的数据库。

  3. 沟通成本
    微服务API的改变带来的沟通成本。

微服务的好处

  1. 可以持续交付和持续部署
    微服务拥有持续交付和部署的可测试性可部署性。开发团队是松散解耦合的。
  2. 每个服务相对较小并容易维护
  3. 服务可以独立扩展
  4. 具有更好的容错性
  5. 更容易实验和采纳新技术

微服务架构引入的问题及解决方案


  1. 微服务之间如何通讯?

说到通讯呢,我们可能会想到,TCP/IP、HTTP、WEBSOCKET或者想到DUBBO、ZOOKEEPER等等,这么多的通讯方法,如何抉择?我们可以从两个方向来考虑通讯的问题。

从通讯模式的角度考虑
在这里插入图片描述
从通讯协议的角度考虑

  • REST API
  • RPC
  • MQ

  1. 微服务如何发现彼此?

服务发现的本质其实是服务调用者如何来发现服务提供者的ip和端口号。

传统服务一般就是通过Nginx进行负载均衡的转发,Nginx指定ip和端口号,一般是通过配置文件指定的,是写死的。配置文件的更新需要运维人员来手动操作。

如果是微服务的话,由于微服务数目众多,如果靠运维人员来手动操作的话,消耗人力也很大。所以微服务一般都是自动的服务发现,并且分为两类:

  • 客户端发现
  • 服务端发现

在这里插入图片描述
微服务启动的时候,会把自己的ip和端口号告诉注册中心,然后客户端通过查询注册信息得知微服务的ip端口号和列表,然后通过本地的负载均衡策略,来进行微服务的访问。
在这里插入图片描述
服务同样的把自己的ip和端口号注册到注册中心,但这客户端不会去访问注册中心了。客户端通过一个固定的ip访问到具有服务发现和负载均衡的服务,再由它将请求转发给后端的具体服务,并且将服务的应答转发给客户端。


  1. 微服务如何进行部署?更新?扩容?

微服务为了保证其高可用,一般会部署两个以上的相同服务,并且微服务很多,更新很频繁,这就需要服务编排

流行的服务编排工具:

  • Mesos
  • Swarm
  • Kubernetes

K8s以前介绍过很多了,也是这三者中处于霸主地位的工具,不多做介绍了。

单体架构与微服务架构的对比

微服务优势:

  • 交付速度
    服务拆分后,各个服务可以独立、并行开发测试和部署,交付效率会更快。代码规模越大,微服务的优势越明显。
  • 故障隔离范围
    单体是线程级的,微服务是进程级的。所以整体上,微服务的可用性更高。
  • 架构持续演进
    微服务粒度更小,不存在大规模重构导致的各种问题,但是存在服务粒度划分的问题。
  • 沟通效率
    关于这一点争论不一,我认为微服务将团队规模缩小,但是需要的沟通没有明显减少,主要还是看组织架构,如果权力下方,不出现决策瓶颈点(Netflix最初的决策就是:既然沟通太费时费力,那就划分团队,尽量不沟通),能够提高沟通效率。
  • 可重用性
    微服务,尤其是结合阿里提出的“大中台,小前台”的策略,其可重用性是单体不及的。

单体优势:

  • 一致性实现成本
    微服务一致性保障需要额外付出精力。
  • 时延
    服务划分后,调用次数增加,导致响应时间增加、吞吐降低。
  • 资源成本
    吞吐降低意味着更多的资源成本。
  • 运维和开发复杂度
    微服务更高。

一般来说,产品初期会优先选用单体架构,业务复杂到一定程度后,微服务架构消耗的成本才会体现出优势。

我认为,其过程应该是满足 单体–>组件化–>微服务–>中台 的。在《企业IT架构转型之道:阿里巴巴中台战略思想与架构实战》一书中,也说明了这一点,并不需要一开始就微服务化,成本过高,每个阶段都需要一定时间的沉淀。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/No_Game_No_Life_/article/details/103356276

智能推荐

tp3与tp5的区别 以及 tp5与laravel的区别_tp3版本-程序员宅基地

文章浏览阅读2.6k次。Tp3 和 Tp5之间的区别Tp5版本和Tp3的差异较大的,它们的主要区别:1.URL和路由5.0的URL访问不再支持普通URL模式,路由也不支持正则路由定义,而是全部改为规则路由配合变量规则(正则定义)的方式:主要改进有以下几点:1.增加路由变量规则、2.增加组合变量支持、3.增加资源路由、4.增加路由分组、5.增加闭包定义支持、6.增加MISS路由定义、7.支持URL路由..._tp3版本

docker介绍-程序员宅基地

文章浏览阅读88次。简介:docker是目前最火的技术,没有之一1,与openstack相比,docker的优点:2,docker的使用场景(docker能干什么):1,简化配置2,提高开发效率3,应用隔离4,服务器整合5,多用户使用6,快速部署7,代码流水线管理8,开发调试安装前准备升级内核-3.0参考文档:http://w..._"[graphdriver] prior storage driver \"devicemapper\" failed: error running devi"

Web服务器处理并发连接请求的工作模型_常用的web服务器请求处理模型有哪些-程序员宅基地

文章浏览阅读2.4k次。一、单线程web服务器(Single-threaded web servers)此种架构方式中,web服务器一次处理一个请求,结束后读取并处理下一个请求。在某请求处理过程中,其它所有的请求将被忽略,因此,在并发请求较多的场景中将会出现严重的性能问题。(即一次只能处理一个请求) 二、多进程/多线程web服务器此种架构方式中,web服务器生成多个进程或线程并行处理多个用户请求,进程或线程可以按需或事先..._常用的web服务器请求处理模型有哪些

Linux-在linux修改文件夹及其子文件夹的权限_centos 更改文件夹子文件权限-程序员宅基地

文章浏览阅读2.2k次。加入-R 参数,就可以将读写权限传递给子文件夹例如chmod -R 777 /home/mypackage那么mypackage 文件夹和它下面的所有子文件夹的属性都变成了777.777是读、写、执行权限..._centos 更改文件夹子文件权限

随便推点

dinic (poj2987)_poj2987 dinic-程序员宅基地

文章浏览阅读995次。program poj2987; const inf=10000001;var d,dis,pre,s,q:array[0..10000] of longint; p,next,b:array[0..200000] of longint; c:array[0..200000] of int64; aa,bb,o,i,m,tt,ans1,t:longint; ans,n,f:int64;procedure link(aa,bb:longint;cc:int_poj2987 dinic

高级计算机网络:论文汇报PPT《Similarity-Based One-shot Learning for Device-free Gesture Signals》_计算机论文阅读汇报ppt-程序员宅基地

文章浏览阅读247次。完整论文题目《Dynamic Speed Warping: Similarity-Based One-shot Learning for Device-free Gesture Signals》_计算机论文阅读汇报ppt

浏览器一句代码去除某奇艺,某库,某迅视频右上角logo水印_网页源代码删除水印-程序员宅基地

文章浏览阅读3.5k次,点赞4次,收藏21次。有时候我们在线看视频的时候右上角的logo很影响我们,今天教大家如何去除右上角logo。一、打开视频网站找到需要播放的视频。二、F12打开调试工具,找到控制台:Console。三、在下面粘贴对应的代码,回车键,搞定。某奇艺:document.querySelectorAll(".iqp-logo-box").forEach(function(item,index,arr){item.style.display='none';});某库document.quer..._网页源代码删除水印

Activity 的启动与传值_startacyivity(i)是什么方法,参数是什么-程序员宅基地

文章浏览阅读375次。Activity 的启动 ①. 在Android应用里各组件之间通信使用Intent。一个Activity通过Intent来表达自己的“意图”。 ②. 常用有两种方式:- Intent intent = new Intent(MainActivity.this , NextActivity.class);- Intent intent = new Intent();- inte..._startacyivity(i)是什么方法,参数是什么

利用路由器实现VLAN_路由器的wifi定义vlan-程序员宅基地

文章浏览阅读1.1w次,点赞9次,收藏39次。实验六 利用路由器实现VLAN【实验目的】熟悉路由器子接口相关配置,实现不同VLAN间主机的通信。了解路由器子接口的含义及作用 正确配置路由器子接口的相关配置【背景描述】某公司建立网路,划分了销售部和技术部两个VLAN,销售部的一台计算机划分到VLAN10中,技术部的一台计算机划分到VLAN20中。先要对路由器和交换机进行相应的配置,以实现两个部门主机间进行通信。【实验功能】通过对路由器子接口进行相关配置,实现不同VLAN间主机的通信。【实验原理】在交换网络中,通..._路由器的wifi定义vlan

SpringBoot接入支付宝支付功能(沙箱操作)_"<bean id=\"alipayservice\" class=\"com.ssm.servic-程序员宅基地

文章浏览阅读538次。官网给出的例子,跑到自己本地如下图:一、前期准备进入开放平台,沙箱环境,登录,一开始需要填写基本信息下载支付宝开放平台开发助手,生成密钥需要用到配置参数保留appId 和 支付宝网关,后面我们会用到生成密钥(打开我们下载的开发助手), 保留公钥和私钥将公钥配置到我们的沙箱环境中,保留最后的支付宝公钥,后面我们会用到二、项目应用后台代码编写 AlipayConfig.java 类,里面设计的参数,我们前一步都获取到了,填写到对应位置就可以了._""

推荐文章

热门文章

相关标签