首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微服务的优势在哪里,为什么别人都在说微服务好

微服务的优势在哪里,为什么别人都在说微服务好

原创
作者头像
Java周某人
修改2019-09-17 10:42:14
10.3K0
修改2019-09-17 10:42:14
举报
文章被收录于专栏:Java周某人Java周某人

微服务的优势在哪里,为什么别人都在说微服务好
微服务的优势在哪里,为什么别人都在说微服务好

前言:

在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务",

微,狭义来讲就是体积小、著名的"2 pizza 团队"很好的诠释了这一解释(2 pizza 团队最早是亚马逊 CEO Bezos提出来的,意思是说单个服务的设计,所有参与人从设计、开发、测试、运维所有人加起来 只需要2个披萨就够了 )。 而所谓服务,一定要区别于系统,服务一个或者一组相对较小且独立的功能单元,是用户可以感知最小功能集。

微服务这么火,多少人多少公司都想试试水。

了解到很多小伙伴在找 Java 开发工作时,如果这个公司用的微服务架构,就觉得很牛逼,进去了很有前景,如果没用微服务,甚者还用的是以前的 SSH ,就会觉得没前景,不想去。由此可见微服务在大家心中的分量。

不过话说回来,并非每一个项目都是适合用微服务架构,也并非每一个公司都需要微服务架构。有个朋友在某网红茶公司做微服务开发,新项目架构师强行上马微服务,结果项目上线后,一个小小的变更都要修改许多服务才能解决,没办法,架构师只能卷铺盖走人了,项目又变回了单体应用。

我觉得这样的例子不是个案,项目要不要上马微服务,还是要看项目和公司的具体情况,不盲目,不跟风。

今天来和大家聊一聊微服务到底有哪些好处,又有哪些弊端。

微服务的优势

大项目可以持续交付

微服务将一个大系统拆分成很多个互相独立的服务,每一个服务都可以由一个团队去完成,并且配备自己的开发、部署,而且可以独立于其他的团队。每一个团队开发的微服务都可以由自己的代码仓库、以及部署流水线等,互不相扰。

在微服务中,一个大项目被拆分成 n 多个小项目,每一个小项目都可以非常方便的进行测试、部署,而不会牵一发而动全身,原本需要全员高度警戒的项目上线,现在分散到不同的团队中去完成。

我六月底参加深圳的一个线下技术活动,某在线编程的 CEO 谈到他们公司的发版,说:“我说话的这会儿,我们可能就有新版本在发布。”,这句话令我印象深刻。传统的单体应用,没人敢这么搞,微服务时代,这一切才变得可能。

易于维护

这个不必多说,相信大家都理解。

一个传统的单体应用,如果你新接手,一时半会还不一定能理出一个头绪,而如果是微服务,由于比较小巧玲珑,一个微服务只负责一件事情,很容易理出头绪,然后上手开发。

并且相对于单体应用,微服务规模都比较小,无论你用 Eclipse 还是 IDEA,项目启动、测试速度都比较快。

服务可以独立扩展

独立扩展,可以让我们充分使用硬件资源。

传统的单体应用,所有的功能模块都写在一起,有的模块是 CPU 运算密集型的,有的模块则是对内存需求更大的,这些模块的代码写在一起,部署的时候,我们只能选择 CPU 运算更强,内存更大的机器,如果采用了了微服务架构,不同的系统独立部署,压力大的时候,可以独立进行集群化部署,这些操作都不会影响到已经运行的其他微服务,非常灵活。

更强的容错性

由于每一个微服务都是独立运行的,处理得当,我们在微服务架构中可以实现更好的故障隔离。当一个微服务发生问题时,例如内存泄漏,不会影响到其他的微服务。

可以灵活的采用最新技术

传统的单体应用一个非常大的弊端就是技术栈升级非常麻烦,这也是为什么你经常会见到用 10 年前的技术栈做的项目,现在还需要继续开发维护。不是他们不愿意升级,而是升级实在是太麻烦了,伤筋动骨。

而在微服务架构中,每一个服务都是独立运行的,单个微服务的技术升级则非常容易。你可以随意去尝试你喜欢的最新技术。因为试错成本很低,因此大家可以尽情的玩耍。

微服务的弊端

事物都有两面性,微服务也有一些挑战,这些挑战性问题如果处理不好,你使用微服务可能反而适得其反。那么都有哪些问题呢?

  • 服务的拆分

个人觉得,这是最大的挑战,我了解到一些公司做微服务,但是服务拆分的乱七八糟。这样到后期越搞越乱,越搞越麻烦,你可能会觉得微服务真坑爹,后悔当初信了说微服务好的鬼话。

  • 分布式系统带来的挑战

记得以前在网上看到过一个段子:

没用分布式架构之前,你只有一个问题:并发性能不足。用了分布式架构,多出了一堆问题:数据如何同步、主键如何产生、如何熔断、分布式事务如何处理......。

这个段子形象的说明了分布式系统带来的挑战。

  • 多个研发团队的协调管理

传统的单体应用开发,一个团队管理好就行了,现在不同的团队开发不同的微服务,要协调多个团队共同配合,才能做好微服务开发,这对项目管理提出了挑战。

好了,本文就先说这么多,大伙可以留言说说你的项目有没有使用微服务,出于什么样的考虑而使用了目前的架构呢?

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 微服务的优势
  • 微服务的弊端
相关产品与服务
项目管理
CODING 项目管理(CODING Project Management,CODING-PM)工具包含迭代管理、需求管理、任务管理、缺陷管理、文件/wiki 等功能,适用于研发团队进行项目管理或敏捷开发实践。结合敏捷研发理念,帮助您对产品进行迭代规划,让每个迭代中的需求、任务、缺陷无障碍沟通流转, 让项目开发过程风险可控,达到可持续性快速迭代。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档