当前位置: 首页 > news >正文

为什么BAT公司使用微服务架构,资深架构师来告诉你原因!

微服务架构已经流行了很长时间,但是想要回答为什么要使用微服务架构的问题,首先应该了解一体化架构。

为什么BAT公司使用微服务架构,资深架构师来告诉你原因!

什么是一体化架构?

一体化架构顾名思义,将应用各层打成一个包来部署。为了让代码正常工作,一体化应用的所有组件缺一不可。

以典型的3层传统web应用为例,该应用由用户界面、数据库、服务器端应用组成。这里的服务器端应用被称为monolith(一体化),包含表现、业务层、数据层。所有代码都存在于同一个代码库中。为了让代码工作起来,它被部署成为一个单元。任何一个小的改动变化,都需要重新构建和部署整个应用。

为什么BAT公司使用微服务架构,资深架构师来告诉你原因!

什么是微服务架构?

微服务架构是一种架构风格,整个应用被划分并设计为以业务域为模型的松散耦合的独立服务。微服务中的“微”非常具有欺骗性,事实上它没有规定服务的规模有多小或多大。

这里的重点是每个独立服务都有一个业务边界,可以独立开发、测试、部署、监控和扩展,甚至可以用不同的编程语言开发它们。

在基于微服务的架构中,每个组件或服务都有自己的数据库。没有集中式数据库,我们可以根据需要为每个单独的微服务使用NoSQL、RDBMS或任何其他数据库,这也是让微服务真正独立的原因之一。

为什么BAT公司使用微服务架构,资深架构师来告诉你原因!

一体化架构的问题

或者说是微服务架构所解决的问题。

1.难以扩展

一体化架构应用只能通过在负载均衡器后面放置整个应用程序的多个实例来进行水平扩展。如果应用中的特定服务需要扩展,则没有简单的选项。我们需要完整地扩展应用程序,这显然会造成不必要的资源浪费。

相比之下,基于微服务的应用程序允许我们根据需要独立扩展单个服务。在上图中,如果需要缩放服务B,则可以有10个实例,同时保持其他实例,并可以根据需要随时更改。

2.交付时间长

一体化架构在单个应用的任何部分/层中进行的任何更改都需要构建和部署整个应用程序。个人开发人员还需要下载整个应用程序代码来修复和测试,而不仅仅是受影响的模块,这就影响到了持续部署的效率。

而在微服务架构中,如果仅在一百个微服务中的一个中需要改变,则仅构建和部署改变的微服务,没有必要部署一切。我们甚至可以在短时间内多次部署。

3.应用复杂性

过去,随着应用规模的增长(功能、功能等),团队也会相应扩张,应用很快就就会变得复杂和交织在一起。随着不同的团队不断修改代码,维护模块化结构慢慢变得越来越困难,并慢慢导致像意大利面一样交织的代码。这不仅会影响代码质量,还会影响整个组织。

在基于微服务的应用中,每个团队都在单独的微服务上工作,代码会有序很多。

4.没有明确的所有权

在一体化应用中,看起来独立的团队实际上并不是独立的。它们同时在相同的代码库上工作,严重依赖于彼此。

在基于微服务的应用中,独立团队处理单独的微服务。一个团队将拥有一个完整的微服务。工作的明确所有权明确控制服务的一切,包括开发、部署和监控。

5.故障级联

如果没有正确设计,一体化交媾应用的一部分失败可能会级联并导致整个系统崩溃。

在基于微服务的架构的情况下,我们可以使用断路器来避免这种故障。

6.Dev和Ops之间的墙

开发团队通常会进行开发、测试,一旦部署,就会将维护和支持的所有权交给运维团队,应用此时与开发团队无关了,而运维团队需要努力在生产环境中支持一体化架构应用。

在基于微服务的应用中,团队的组织理解为“构建它、运行它”,开发团队继续在生产中拥有该应用。

7.陷入某种技术/语言

使用一体化架构,意味着被某种已实现的技术/语言锁定。如果需要更改技术/语言,则必须重写整个应用程序。

使用微服务,每个服务可以根据需求和业务以不同的技术或语言实现。任何改变服务技术/语言的决定都只需要重写该特定服务,因为所有微服务都是相互独立的。

8.支持微服务的正确工具/技术的可用性

几年前,我们还没有适当的工具和技术来支持微服务。但自从Docker容器和云基础设施(特别是PaaS)向大众提供服务以来,微服务正在大规模采用,因为它们提供了我们所需的“自由”,而无需进行传统的配置程序。

小结

简单来说,使用微服务架构会获得以下好处:

独立开发部署服务

速度和敏捷性

更高的代码质量

获得围绕业务功能创建/组织的代码

提高生产力

更容易扩展

自由(在某种程度上)选择实施技术/语言

想要学习Dubbo框架、zookeper基本原理、redis分布式缓存、JVM性能优化,Nginx+apache+Tomcat集群部署、大数据hadoop,Hbase实时计算spark、storm、数据分析分词和权重等核心技术;需要的可以关注之后私信哈,记得要点赞转发噢!!!

相关文章:

  • mysql学习【第4篇】:数据库之数据类型
  • python字典操作总结
  • hadoop Hive(9)
  • 启动和测试oracle是否安装成功
  • Java初始化顺序
  • linux 生成随机密码
  • 线程创建
  • 测者的测试技术手册:智能化测试框架EvoSuite的一个坑以及填坑方法
  • cookie和session
  • Android EditText控件自动转换大小写,光标位置不跳位
  • Android aidl Binder框架浅析
  • 4.8_获取页面元素的内容_getTable
  • java框架学习日志-10(自定义类实现AOP)
  • 说一说飞机上的无线上网
  • C#中的线程池使用(一)
  • ES6指北【2】—— 箭头函数
  • [nginx文档翻译系列] 控制nginx
  • 【知识碎片】第三方登录弹窗效果
  • bootstrap创建登录注册页面
  • Docker: 容器互访的三种方式
  • JAVA多线程机制解析-volatilesynchronized
  • Js基础知识(一) - 变量
  • MySQL主从复制读写分离及奇怪的问题
  • Swoft 源码剖析 - 代码自动更新机制
  • 代理模式
  • 基于组件的设计工作流与界面抽象
  • 近期前端发展计划
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 深度学习入门:10门免费线上课程推荐
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 听说你叫Java(二)–Servlet请求
  • 小程序01:wepy框架整合iview webapp UI
  • ​用户画像从0到100的构建思路
  • $.ajax()方法详解
  • (1)虚拟机的安装与使用,linux系统安装
  • (33)STM32——485实验笔记
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (四)Controller接口控制器详解(三)
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET delegate 委托 、 Event 事件
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET连接数据库方式
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @font-face 用字体画图标
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [1]-基于图搜索的路径规划基础
  • [17]JAVAEE-HTTP协议
  • [20150904]exp slow.txt
  • [Angular] 笔记 7:模块
  • [AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步
  • [C#基础知识系列]专题十七:深入理解动态类型
  • [CentOs7]搭建ftp服务器(2)——添加用户