微服务的一些概念

单体架构(Monolithic Architecture)

传统的单体架构,把所有的功能都集中在一起,打包为一个war包,或者是可执行程序。部署的时候,需要部署一个完整的应用,升级时,也需要替换整个war包或是可执行程序,升级时,要中断正在提供的服务。单片架构的优势在于开发测试都比较容易,只需改动一个工程、启动一个应用。部署的时候,只需要复制应用及配置即可。当网站的流量很小时,我们只需要一个应用,并把所有的功能都部署在一起就可以了,以减少部署节点和成本。

但是随着应用规模越来越大,单体结构会面临问题:

  • 庞大的代码堆积在一个应用中,难以理解与维护
  • 部分修改,也需要构建和部署整个程序
  • 部署复杂,风险大,耗时长
  • 无法持续提供服务
  • 无法支持频繁改动的开发过程
  • 改动可能影响到本来可稳定运行的代码,在测试上,也需要整站测试,周期长
  • 伸缩性差

微服务

微服务是指开发一个单一的、小型的,但是有业务功能的服务。将原先的一整个的应用程序,拆分成多个可以独立开发测试部署的小服务,每个服务,都有自己的处理和轻量通信流程,可以部署在单个或者多个服务器上。微服务可以拥有自己的存储层,包括数据库或内存缓存。微服务是一种松耦合的、有明显责任边界的服务架构。也就是说,一个微服务的修改,不应该引起另一个微服务的同步修改,如果一个的改变会影响另外一个(应该失败隔离),那么就不适合做拆分。有了微服务,可以进行产品的快速迭代开发,并保证已有服务持续稳定提供服务。

微服务的缺点在于,服务分布式部署带来的分布式系统复杂性,需要有分布式事务的支持,服务之间依赖关系复杂,更新的时候需要谨慎处理。对服务划分的策略也需要谨慎,粒度太大,与单体甲架构有同样的缺点;粒度太小,则增大了系统的复杂性,用户的请求可能需要多个微服务跳转处理才能够返回,划分不合理了,整个系统也很难理解。

与SOA的区别在哪?

面向服务架构(SOA)是一种软件架构模式,一些应用程序组件,通过网络通信协议向其他组件提供服务,这些服务之间的通信,可以是简单的数据传递,也可以是两个或多个彼此需要互相协调的服务之间的互连。在服务中,可以实现纯粹的业务功能,例如购物车、收藏列表等。也可以是供其他服务调用的公共服务,例如登录鉴权服务。这些服务组合在一起,可以实现一个需求。

微服务与SOA是一脉相承的,区别主要在于规模与范围。微服务的核心思想,是对应用做有效拆分,以实现敏捷开发与部署,SOA包含的意义可能更广泛、不准确一些。

从实现方式上来说,微服务与SOA都是语言无关,协议跨平台的。微服务框架能够带来更大的敏捷性,构建更加轻量级、高效率的开发。而SOA更适合大型企业的应用集成。

从服务粒度上来说,微服务提倡服务的细粒度,每个操作甚至是方法都是独立开发的服务,足够小到不能再拆分。SOA没有这么极致的要求。

从部署方式上来说,微服务利用Docker技术,不依赖任何服务器和数据模型,是一个全栈应用,可以通过自动化方式独立部署,每个服务运行在自己的进程中。

参考

  • 《可伸缩服务架构 框架与中间件》
  • SOA和微服务架构的区别? - 徐兵元的回答 - 知乎

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ThoughtWorks

登录工程:现代Web应用的典型身份验证需求|洞见

朋友就职于某大型互联网公司。前不久,在闲聊间我问他日常工作的内容,他说他所在部门只负责一件事,即用户与登录。 ? 而他的具体工作则是为各个业务子网站提供友好的登...

3345
来自专栏程序员的知识天地

Python自动化测试框架不知道有哪些?我都给你收集好了

随着技术的进步和自动化技术的出现,市面上出现了一些自动化测试框架,你可以使用这些框架,在调整特定测试适用性和效率参数后,测试你项目的任何模块。这节省了时间,而且...

1224
来自专栏Linux Python 加油站

Python自动化测试框架有哪些?

来源:马哥教育链接:https://mp.weixin.qq.com/s/PvlaRmPmGc5b1XIMqMMslA令开发者万分高兴的是,开发自己的测试框架的...

1374
来自专栏网络

资深女程序员告诉你:微服务架构如何实践?80%以上男程序员点赞

上篇文章给大家介绍了什么是微服务架构,本文将会讲到如何实践微服务。 不知道微服务架构的,可以看我上一篇文章 微服务听上去好像不错,具体怎么落地啊?这需要回答下面...

3807
来自专栏DevOps时代的专栏

什么是服务网格(Service Mesh)?为什么需要使用它?

在过去的一年中,服务网格(Service Mesh)已经演变成为云原生堆栈的重要组成部分。像 Paypal,Lyft,Ticketmaster 和 Credit...

5146
来自专栏JAVA高级架构

SOA与微服务

微服务是一种应用架构模式,而 RPC 是一种远程调用方式,它们是不一样的概念;而在微服务中会出现服务之间的调用,为了确保性能,我们一般采用 RPC 来调用。

781
来自专栏北京马哥教育

Python自动化测试框架有哪些?

令开发者万分高兴的是,开发自己的测试框架的日子终于结束了。以前,开发团队接手一个项目并开始开发时,除了项目模块的实际开发之外,他们不得不为这个项目构建一个自动化...

720
来自专栏风中追风

分布式基础_为什么要用分布式架构,又为什么要用微服务?

我用了dubbo后,我就可以这样调接口,巴拉巴拉,说到底还是争不过面试官问:那照你这么说,我不用分布式架构也可以完成啊,你只是说了用了分布式架构后业务处理的方法...

46212
来自专栏微信公众号:Java团长

JavaEE学习路线图

这是学习Java的基础,掌握程度的深浅甚至直接影响后面的整个学习进程。Java的核心主要包括几个部分:

1331
来自专栏杨建荣的学习笔记

浅谈zabbix和Grid control (r6笔记第25天)

在IT行业始终在进行着开源和商业的竞争而且双方火力都不差,开源的受众更多是中小企业,免费开源而且用户基数庞大,商业的用户都是一些大中型企业,求稳求成熟的服务。 ...

3527

扫码关注云+社区